Add testcase for psa_crypto_output_copy_free()

Signed-off-by: David Horstmann <david.horstmann@arm.com>
diff --git a/tests/suites/test_suite_psa_crypto_memory.data b/tests/suites/test_suite_psa_crypto_memory.data
index fcd60fb..2ca7e15 100644
--- a/tests/suites/test_suite_psa_crypto_memory.data
+++ b/tests/suites/test_suite_psa_crypto_memory.data
@@ -45,3 +45,12 @@
 
 PSA crypto output copy alloc, NULL buffer
 output_copy_alloc:0:PSA_SUCCESS
+
+PSA crypto output copy free
+output_copy_free:200:0:PSA_SUCCESS
+
+PSA crypto output copy free, NULL buffer
+output_copy_free:0:0:PSA_SUCCESS
+
+PSA crypto output copy free, NULL original buffer
+output_copy_free:200:1:PSA_ERROR_CORRUPTION_DETECTED
diff --git a/tests/suites/test_suite_psa_crypto_memory.function b/tests/suites/test_suite_psa_crypto_memory.function
index 6fd58cd..57a10ae 100644
--- a/tests/suites/test_suite_psa_crypto_memory.function
+++ b/tests/suites/test_suite_psa_crypto_memory.function
@@ -163,3 +163,48 @@
     output = NULL;
 }
 /* END_CASE */
+
+/* BEGIN_CASE */
+void output_copy_free(int output_len, int original_is_null,
+                      psa_status_t exp_status)
+{
+    uint8_t *output = NULL;
+    uint8_t *buffer_copy_for_comparison = NULL;
+    psa_crypto_output_copy_t output_copy;
+    psa_status_t status;
+
+    output_copy.buffer = NULL;
+    output_copy.len = 0;
+
+    if (!original_is_null) {
+        TEST_CALLOC(output, output_len);
+    }
+    TEST_CALLOC(buffer_copy_for_comparison, output_len);
+    TEST_CALLOC(output_copy.buffer, output_len);
+    output_copy.len = output_len;
+    output_copy.original = output;
+
+    if (output_copy.buffer != NULL) {
+        fill_buffer_pattern(output_copy.buffer, output_copy.len);
+        memcpy(buffer_copy_for_comparison, output_copy.buffer, output_copy.len);
+    }
+
+    status = psa_crypto_output_copy_free(&output_copy);
+    TEST_EQUAL(status, exp_status);
+
+    if (exp_status == PSA_SUCCESS) {
+        TEST_ASSERT(output_copy.buffer == NULL);
+        TEST_EQUAL(output_copy.len, 0);
+        if (output != NULL) {
+            TEST_MEMORY_COMPARE(buffer_copy_for_comparison, output_len,
+                                output, output_len);
+        }
+    }
+
+exit:
+    mbedtls_free(output);
+    mbedtls_free(buffer_copy_for_comparison);
+    mbedtls_free(output_copy.buffer);
+    output_copy.len = 0;
+}
+/* END_CASE */