Test: Add Secure SFN Backend test

This patch adds Secure SFN Backend test (PSA API tests):
- Adding a new TEST_S_SFN_BACKEND_TEST config and enable by default
  for TEST_S
- Adding Secure test source and CMakeLists

Change-Id: Ife229c2c7c5abbf84effc18b0951f6a4eb5acace
Signed-off-by: Kevin Peng <kevin.peng@arm.com>
diff --git a/test/config/check_config.cmake b/test/config/check_config.cmake
index 0c8d964..0b1c725 100644
--- a/test/config/check_config.cmake
+++ b/test/config/check_config.cmake
@@ -36,6 +36,7 @@
 message(STATUS "TEST_S_PLATFORM is set as ${TEST_S_PLATFORM}")
 message(STATUS "TEST_S_FWU is set as ${TEST_S_FWU}")
 message(STATUS "TEST_S_IPC is set as ${TEST_S_IPC}")
+message(STATUS "TEST_S_SFN_BACKEND is set as ${TEST_S_SFN_BACKEND}")
 message(STATUS "TEST_S_FPU is set as ${TEST_S_FPU}")
 
 message(STATUS "---------- Display TEST Configuration - stop ---------------")
@@ -49,10 +50,13 @@
 tfm_invalid_config((NOT TFM_PARTITION_PLATFORM AND NOT FORWARD_PROT_MSG) AND (TEST_NS_PLATFORM OR TEST_S_PLATFORM))
 tfm_invalid_config(NOT TFM_PARTITION_FIRMWARE_UPDATE AND (TEST_NS_FWU OR TEST_S_FWU))
 tfm_invalid_config(NOT TFM_PARTITION_AUDIT_LOG AND (TEST_NS_AUDIT OR TEST_S_AUDIT))
-tfm_invalid_config((TFM_LIB_MODEL) AND (TEST_NS_IPC OR TEST_S_IPC OR TEST_NS_SLIH_IRQ OR TEST_NS_FLIH_IRQ))
-tfm_invalid_config(CONFIG_TFM_SPM_BACKEND_SFN AND (TEST_NS_IPC OR TEST_S_IPC OR TEST_NS_CORE OR TEST_NS_SLIH_IRQ OR TEST_NS_FLIH_IRQ))
+
+tfm_invalid_config((TEST_NS_IPC OR TEST_S_IPC OR TEST_NS_SLIH_IRQ OR TEST_NS_FLIH_IRQ) AND (TFM_LIB_MODEL))
+tfm_invalid_config((TEST_NS_IPC OR TEST_S_IPC OR TEST_NS_CORE OR TEST_NS_SLIH_IRQ OR TEST_NS_FLIH_IRQ) AND CONFIG_TFM_SPM_BACKEND_SFN)
+tfm_invalid_config(TEST_S_SFN_BACKEND AND CONFIG_TFM_SPM_BACKEND_IPC)
+
 tfm_invalid_config(CONFIG_TFM_FP STREQUAL "soft" AND (TEST_S_FPU OR TEST_NS_FPU))
-tfm_invalid_config(TFM_LIB_MODEL AND (TEST_S_FPU OR TEST_NS_FPU))
+tfm_invalid_config(TFM_LIB_MODEL AND (TEST_S_FPU OR TEST_NS_FPU OR TEST_S_SFN_BACKEND))
 tfm_invalid_config((NOT TFM_MULTI_CORE_TOPOLOGY) AND TEST_NS_MULTI_CORE)
 tfm_invalid_config(TEST_NS_T_COSE AND SYMMETRIC_INITIAL_ATTESTATION)
 tfm_invalid_config((NOT TFM_NS_MANAGE_NSID) AND TEST_NS_MANAGE_NSID)
diff --git a/test/config/default_s_test_config.cmake b/test/config/default_s_test_config.cmake
index 05ad57a..dfb103c 100644
--- a/test/config/default_s_test_config.cmake
+++ b/test/config/default_s_test_config.cmake
@@ -20,4 +20,5 @@
 
 set(TEST_S_FWU              OFF       CACHE BOOL      "Whether to build S regression FWU tests")
 set(TEST_S_IPC              OFF       CACHE BOOL      "Whether to build S regression IPC tests")
+set(TEST_S_SFN_BACKEND      OFF       CACHE BOOL      "Whether to build S regression SFN tests")
 set(TEST_S_FPU              OFF       CACHE BOOL      "Whether to build S regression FPU tests")
diff --git a/test/config/default_test_config.cmake b/test/config/default_test_config.cmake
index dbc32dd..62ac4a0 100644
--- a/test/config/default_test_config.cmake
+++ b/test/config/default_test_config.cmake
@@ -43,6 +43,7 @@
 set(TEST_S_PLATFORM         OFF        CACHE BOOL      "Whether to build S regression Platform tests")
 set(TEST_S_FWU              OFF        CACHE BOOL      "Whether to build S regression FWU tests")
 set(TEST_S_IPC              OFF        CACHE BOOL      "Whether to build S regression IPC tests")
+set(TEST_S_SFN_BACKEND      OFF        CACHE BOOL      "Whether to build S regression SFN tests")
 
 ################################## PS Tests ####################################
 
diff --git a/test/config/set_config.cmake b/test/config/set_config.cmake
index 455406d..1fe94a8 100644
--- a/test/config/set_config.cmake
+++ b/test/config/set_config.cmake
@@ -132,6 +132,10 @@
     set(TEST_NS_SFN_BACKEND     ON        CACHE BOOL      "Whether to build NS regression SFN backend tests")
 endif()
 
+if (CONFIG_TFM_SPM_BACKEND_SFN AND TEST_S)
+    set(TEST_S_SFN_BACKEND      ON        CACHE BOOL      "Whether to build S regression SFN backend tests")
+endif()
+
 ######################### Library Model Specific Tests #########################
 if (TFM_LIB_MODEL AND TEST_NS)
     set(TEST_NS_CORE            ON        CACHE BOOL      "Whether to build NS regression Core tests")
@@ -160,6 +164,12 @@
     set(TFM_PARTITION_IPC_TEST  OFF)
 endif()
 
+if (TEST_NS_SFN_BACKEND OR TEST_S_SFN_BACKEND)
+    set(TFM_PARTITION_SFN_BACKEND_TEST  ON)
+else()
+    set(TFM_PARTITION_SFN_BACKEND_TEST  OFF)
+endif()
+
 if ((TEST_NS_ATTESTATION OR TEST_S_ATTESTATION)
     # This initial attestation test service provide a secure API to enable tests to
     # fetch Initial Attestation public key.
diff --git a/test/secure_fw/common_test_services/tfm_secure_client_service/tfm_secure_client_service.yaml b/test/secure_fw/common_test_services/tfm_secure_client_service/tfm_secure_client_service.yaml
index dc036b8..6ce9998 100644
--- a/test/secure_fw/common_test_services/tfm_secure_client_service/tfm_secure_client_service.yaml
+++ b/test/secure_fw/common_test_services/tfm_secure_client_service/tfm_secure_client_service.yaml
@@ -67,6 +67,8 @@
     "IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
     "IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM",
     "IPC_CLIENT_TEST_MEM_CHECK",
-    "IPC_CLIENT_TEST_RETRIEVE_APP_MEM"
+    "IPC_CLIENT_TEST_RETRIEVE_APP_MEM",
+    "SFN_TEST_STATELESS",
+    "SFN_TEST_CONNECTION_BASED",
   ]
 }
diff --git a/test/secure_fw/secure_suites.c b/test/secure_fw/secure_suites.c
index 674144e..3d7536b 100644
--- a/test/secure_fw/secure_suites.c
+++ b/test/secure_fw/secure_suites.c
@@ -28,13 +28,15 @@
 #ifdef TEST_S_PLATFORM
 #include "platform_s_tests.h"
 #endif
-#ifdef TEST_S_IPC
-#include "ipc_s_tests.h"
-#else
 #ifdef TEST_S_AUDIT
 #include "audit_s_tests.h"
 #endif
-#endif /* TFM_PSA_API */
+#ifdef TEST_S_IPC
+#include "ipc_s_tests.h"
+#endif
+#ifdef TEST_S_SFN_BACKEND
+#include "sfn_s_tests.h"
+#endif
 #if defined (TEST_S_FPU)
 #include "fpu_s_tests.h"
 #endif
@@ -88,6 +90,11 @@
     {&register_testsuite_s_ipc_interface, 0, 0, 0},
 #endif
 
+#ifdef TEST_S_SFN_BACKEND
+    /* Secure SFN backend test cases */
+    {&register_testsuite_s_sfn_interface, 0, 0, 0},
+#endif
+
 #ifdef TEST_S_FPU
     /* Secure FPU test cases */
     {&register_testsuite_s_fpu_interface, 0, 0, 0},
diff --git a/test/secure_fw/suites/spm/sfn/CMakeLists.txt b/test/secure_fw/suites/spm/sfn/CMakeLists.txt
index b5acfc1..186f038 100644
--- a/test/secure_fw/suites/spm/sfn/CMakeLists.txt
+++ b/test/secure_fw/suites/spm/sfn/CMakeLists.txt
@@ -44,3 +44,39 @@
             tfm_test_suite_sfn_ns
     )
 endif()
+
+########################### Secure #############################################
+
+if (TEST_S_SFN_BACKEND)
+    add_library(tfm_test_suite_sfn_s STATIC EXCLUDE_FROM_ALL)
+
+    target_sources(tfm_test_suite_sfn_s
+        PRIVATE
+            secure/sfn_backend_s_testsuite.c
+            sfn_backend_tests.c
+            ${CMAKE_CURRENT_SOURCE_DIR}/../common/suites/client_api_tests.c
+            $<$<BOOL:${PSA_FRAMEWORK_HAS_MM_IOVEC}>:
+                ${CMAKE_CURRENT_SOURCE_DIR}/../common/suites/mmiovec_test.c>
+    )
+
+    target_include_directories(tfm_test_suite_sfn_s
+        PUBLIC
+            secure
+    )
+
+    target_compile_definitions(tfm_test_suite_sfn_s
+        INTERFACE
+            TEST_S_SFN_BACKEND
+    )
+
+    target_link_libraries(tfm_test_suite_sfn_s
+        PRIVATE
+            tfm_test_framework_s
+            spm_test_common
+    )
+
+    target_link_libraries(tfm_s_tests
+        INTERFACE
+            tfm_test_suite_sfn_s
+    )
+endif()
diff --git a/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c b/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c
new file mode 100644
index 0000000..8e918ac
--- /dev/null
+++ b/test/secure_fw/suites/spm/sfn/secure/sfn_backend_s_testsuite.c
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include <stdint.h>
+
+#include "sfn_s_tests.h"
+#include "../sfn_backend_tests.h"
+
+#include "psa/framework_feature.h"
+
+static struct test_t sfn_backend_s_tests[] = {
+    {&tfm_sfn_test_1001, "TFM_S_SFN_TEST_1001",
+     "Get PSA framework version"},
+    {&tfm_sfn_test_1002, "TFM_S_SFN_TEST_1002",
+     "Get version of an RoT Service"},
+    {&tfm_sfn_test_1003, "TFM_S_SFN_TEST_1003",
+     "Request a connection-based RoT Service"},
+    {&tfm_sfn_test_1004, "TFM_S_SFN_TEST_1004",
+     "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. "},
+    {&tfm_sfn_test_1006, "TFM_S_SFN_TEST_1006",
+     "Mapping output vectors and unmapping them. "},
+    {&tfm_sfn_test_1007, "TFM_S_SFN_TEST_1007",
+     "Mapping output vectors and not unmapping them. "},
+#endif
+};
+
+void register_testsuite_s_sfn_interface(struct test_suite_t *p_test_suite)
+{
+    uint32_t list_size;
+
+    list_size = (sizeof(sfn_backend_s_tests) / sizeof(sfn_backend_s_tests[0]));
+
+    set_testsuite("SFN Backend Secure test (TFM_S_SFN_TEST_1XXX)",
+                  sfn_backend_s_tests, list_size, p_test_suite);
+}
diff --git a/test/secure_fw/suites/spm/sfn/secure/sfn_s_tests.h b/test/secure_fw/suites/spm/sfn/secure/sfn_s_tests.h
new file mode 100644
index 0000000..3fa5439
--- /dev/null
+++ b/test/secure_fw/suites/spm/sfn/secure/sfn_s_tests.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __SFN_S_TESTS_H__
+#define __SFN_S_TESTS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "test_framework.h"
+
+/**
+ * \brief Register testsuite for sfn Secure interface.
+ *
+ * \param[in] p_test_suite The test suite to be executed.
+ */
+void register_testsuite_s_sfn_interface(struct test_suite_t *p_test_suite);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SFN_S_TESTS_H__ */
diff --git a/test/secure_fw/suites/spm/sfn/service/CMakeLists.txt b/test/secure_fw/suites/spm/sfn/service/CMakeLists.txt
index bf0b528..d613ae1 100644
--- a/test/secure_fw/suites/spm/sfn/service/CMakeLists.txt
+++ b/test/secure_fw/suites/spm/sfn/service/CMakeLists.txt
@@ -8,6 +8,6 @@
 cmake_policy(SET CMP0079 NEW)
 
 # Add sfn test service.
-if (TEST_NS_SFN_BACKEND)
+if (TFM_PARTITION_SFN_BACKEND_TEST)
     add_subdirectory(sfn_backend_test_partition)
 endif()
diff --git a/test/secure_fw/tfm_test_manifest_list.yaml b/test/secure_fw/tfm_test_manifest_list.yaml
index 9db35df..640d162 100644
--- a/test/secure_fw/tfm_test_manifest_list.yaml
+++ b/test/secure_fw/tfm_test_manifest_list.yaml
@@ -181,7 +181,7 @@
       "short_name": "SFN_BACKEND_TEST",
       "manifest": "suites/spm/sfn/service/sfn_backend_test_partition/sfn_backend_test_partition.yaml",
       "output_path": "secure_fw/test_services/sfn_backend_test_partition",
-      "conditional": "@TEST_NS_SFN_BACKEND@",
+      "conditional": "@TFM_PARTITION_SFN_BACKEND_TEST@",
       "version_major": 0,
       "version_minor": 1,
       "pid": 3011,