tests_reg: Add test for refused connection in SFN

Add tfm_sfn_test_1008 test case to check the correct PSA_ERROR
returned value from a RoT which refuses a connection with the
SFN backend.

Signed-off-by: Nicola Mazzucato <nicola.mazzucato@arm.com>
Change-Id: Ib695ee67de55fc232ceaeb5f3312d4f08abe10b1
(cherry picked from commit 5631e70069c04647c7f5e7ca6a9646d4d89ba188)
diff --git a/tests_reg/test/secure_fw/suites/spm/sfn/non_secure/sfn_backend_ns_testsuite.c b/tests_reg/test/secure_fw/suites/spm/sfn/non_secure/sfn_backend_ns_testsuite.c
index 242c601..dce950b 100644
--- a/tests_reg/test/secure_fw/suites/spm/sfn/non_secure/sfn_backend_ns_testsuite.c
+++ b/tests_reg/test/secure_fw/suites/spm/sfn/non_secure/sfn_backend_ns_testsuite.c
@@ -23,12 +23,14 @@
      "Request a stateless RoT Service"},
 #if PSA_FRAMEWORK_HAS_MM_IOVEC
     {&tfm_sfn_test_1005, "TFM_NS_SFN_TEST_1005",
-     "Mapping input vectors and unmapping them. "},
+     "Mapping input vectors and unmapping them"},
     {&tfm_sfn_test_1006, "TFM_NS_SFN_TEST_1006",
-     "Mapping output vectors and unmapping them. "},
+     "Mapping output vectors and unmapping them"},
     {&tfm_sfn_test_1007, "TFM_NS_SFN_TEST_1007",
-     "Mapping output vectors and not unmapping them. "},
+     "Mapping output vectors and not unmapping them"},
 #endif
+    {&tfm_sfn_test_1008, "TFM_NS_SFN_TEST_1008",
+     "Request to a refused connection"},
 };
 
 void register_testsuite_ns_sfn_interface(struct test_suite_t *p_test_suite)
diff --git a/tests_reg/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c b/tests_reg/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c
index 8e918ac..81444f5 100644
--- a/tests_reg/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c
+++ b/tests_reg/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c
@@ -23,12 +23,14 @@
      "Request a stateless RoT Service"},
 #if PSA_FRAMEWORK_HAS_MM_IOVEC
     {&tfm_sfn_test_1005, "TFM_S_SFN_TEST_1005",
-     "Mapping input vectors and unmapping them. "},
+     "Mapping input vectors and unmapping them"},
     {&tfm_sfn_test_1006, "TFM_S_SFN_TEST_1006",
-     "Mapping output vectors and unmapping them. "},
+     "Mapping output vectors and unmapping them"},
     {&tfm_sfn_test_1007, "TFM_S_SFN_TEST_1007",
-     "Mapping output vectors and not unmapping them. "},
+     "Mapping output vectors and not unmapping them"},
 #endif
+    {&tfm_sfn_test_1008, "TFM_NS_SFN_TEST_1008",
+     "Request to a refused connection"},
 };
 
 void register_testsuite_s_sfn_interface(struct test_suite_t *p_test_suite)
diff --git a/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.c b/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.c
index f9651dc..3960108 100644
--- a/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.c
+++ b/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.c
@@ -68,6 +68,21 @@
     return status;
 }
 
+psa_status_t sfn_test_connection_refused_sfn(const psa_msg_t* msg)
+{
+    psa_status_t status = PSA_ERROR_NOT_SUPPORTED;
+
+    switch (msg->type) {
+    case PSA_IPC_CONNECT:
+        status = PSA_ERROR_CONNECTION_REFUSED;
+        break;
+    default:
+        break;
+    }
+
+    return status;
+}
+
 psa_status_t sfn_test_partition_init(void)
 {
     LOG_DBGFMT("[DBG][SFN Test] SFN Test Partition initialized\r\n");
diff --git a/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.yaml b/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.yaml
index 599b20f..fa94186 100644
--- a/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.yaml
+++ b/tests_reg/test/secure_fw/suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.yaml
@@ -31,6 +31,14 @@
       "connection_based": true,
       "version": 1,
       "version_policy": "RELAXED"
+    },
+    {
+      "name": "SFN_TEST_CONNECTION_REFUSED",
+      "sid": "0x0000F102",
+      "non_secure_clients": true,
+      "connection_based": true,
+      "version": 1,
+      "version_policy": "RELAXED"
     }
   ],
 }
diff --git a/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.c b/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.c
index 4eeb2b3..2bce6bf 100644
--- a/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.c
+++ b/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.c
@@ -78,5 +78,18 @@
 {
     outvec_map_only_test(ret, SFN_TEST_STATELESS_HANDLE);
 }
-
 #endif /* PSA_FRAMEWORK_HAS_MM_IOVEC */
+
+void tfm_sfn_test_1008(struct test_result_t *ret)
+{
+    psa_handle_t handle;
+
+    handle = psa_connect(SFN_TEST_CONNECTION_REFUSED_SID,
+                         SFN_TEST_CONNECTION_REFUSED_VERSION);
+    if (handle != PSA_ERROR_CONNECTION_REFUSED) {
+        TEST_FAIL("Connection was expected to be refused: failed\r\n");
+        return;
+    }
+
+    ret->val = TEST_PASSED;
+}
diff --git a/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.h b/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.h
index 5af344a..a8516c4 100644
--- a/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.h
+++ b/tests_reg/test/secure_fw/suites/spm/sfn/sfn_backend_tests.h
@@ -52,3 +52,8 @@
 void tfm_sfn_test_1007(struct test_result_t *ret);
 
 #endif /* PSA_FRAMEWORK_HAS_MM_IOVEC */
+
+/**
+ * \brief Test the connection to be refused.
+ */
+void tfm_sfn_test_1008(struct test_result_t *ret);