blob: b385b7a90d91b6d2ad21bf9b8589e376f6fb9cdd [file] [log] [blame]
From e9ff55c03e06c044eb9c13f2a3315bf7e35f3659 Mon Sep 17 00:00:00 2001
From: Imre Kis <imre.kis@arm.com>
Date: Fri, 17 Jun 2022 13:51:21 +0200
Subject: [PATCH 18/24] Add mock for libsp/sp_discovery
Add mock_sp_discovery for mocking sp_discovery part of libsp.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I94460dc03dd6dcd27f6865f852cc9a0d85f4b583
Upstream-Status: Pending [In review]
Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
---
.../messaging/ffa/libsp/mock/component.cmake | 1 +
.../ffa/libsp/mock/mock_sp_discovery.cpp | 109 +++++++++++++++++
.../ffa/libsp/mock/mock_sp_discovery.h | 37 ++++++
.../mock/test/test_mock_sp_discovery.cpp | 111 ++++++++++++++++++
components/messaging/ffa/libsp/tests.cmake | 13 ++
5 files changed, 271 insertions(+)
create mode 100644 components/messaging/ffa/libsp/mock/mock_sp_discovery.cpp
create mode 100644 components/messaging/ffa/libsp/mock/mock_sp_discovery.h
create mode 100644 components/messaging/ffa/libsp/mock/test/test_mock_sp_discovery.cpp
diff --git a/components/messaging/ffa/libsp/mock/component.cmake b/components/messaging/ffa/libsp/mock/component.cmake
index 03b8006..15db85a 100644
--- a/components/messaging/ffa/libsp/mock/component.cmake
+++ b/components/messaging/ffa/libsp/mock/component.cmake
@@ -12,6 +12,7 @@ target_sources(${TGT} PRIVATE
"${CMAKE_CURRENT_LIST_DIR}/mock_assert.cpp"
"${CMAKE_CURRENT_LIST_DIR}/mock_ffa_api.cpp"
"${CMAKE_CURRENT_LIST_DIR}/mock_ffa_internal_api.cpp"
+ "${CMAKE_CURRENT_LIST_DIR}/mock_sp_discovery.cpp"
"${CMAKE_CURRENT_LIST_DIR}/mock_sp_rxtx.cpp"
)
diff --git a/components/messaging/ffa/libsp/mock/mock_sp_discovery.cpp b/components/messaging/ffa/libsp/mock/mock_sp_discovery.cpp
new file mode 100644
index 0000000..47f4ef7
--- /dev/null
+++ b/components/messaging/ffa/libsp/mock/mock_sp_discovery.cpp
@@ -0,0 +1,109 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ */
+
+#include <CppUTestExt/MockSupport.h>
+#include "mock_sp_discovery.h"
+
+void expect_sp_discovery_ffa_version_get(const uint16_t *major,
+ const uint16_t *minor,
+ sp_result result)
+{
+ mock()
+ .expectOneCall("sp_discovery_ffa_version_get")
+ .withOutputParameterReturning("major", major, sizeof(*major))
+ .withOutputParameterReturning("minor", minor, sizeof(*minor))
+ .andReturnValue(result);
+}
+
+sp_result sp_discovery_ffa_version_get(uint16_t *major, uint16_t *minor)
+{
+ return mock()
+ .actualCall("sp_discovery_ffa_version_get")
+ .withOutputParameter("major", major)
+ .withOutputParameter("minor", minor)
+ .returnIntValue();
+}
+
+void expect_sp_discovery_own_id_get(const uint16_t *id, sp_result result)
+{
+ mock()
+ .expectOneCall("sp_discovery_own_id_get")
+ .withOutputParameterReturning("id", id, sizeof(*id))
+ .andReturnValue(result);
+}
+
+sp_result sp_discovery_own_id_get(uint16_t *id)
+{
+ return mock()
+ .actualCall("sp_discovery_own_id_get")
+ .withOutputParameter("id", id)
+ .returnIntValue();
+}
+
+void expect_sp_discovery_partition_id_get(const struct sp_uuid *uuid,
+ const uint16_t *id, sp_result result)
+{
+ mock()
+ .expectOneCall("sp_discovery_partition_id_get")
+ .withMemoryBufferParameter("uuid", (const unsigned char *)uuid,
+ sizeof(*uuid))
+ .withOutputParameterReturning("id", id, sizeof(*id))
+ .andReturnValue(result);
+}
+
+sp_result sp_discovery_partition_id_get(const struct sp_uuid *uuid,
+ uint16_t *id)
+{
+ return mock()
+ .actualCall("sp_discovery_partition_id_get")
+ .withMemoryBufferParameter("uuid", (const unsigned char *)uuid,
+ sizeof(*uuid))
+ .withOutputParameter("id", id)
+ .returnIntValue();
+}
+
+void expect_sp_discovery_partition_info_get(const struct sp_uuid *uuid,
+ const struct sp_partition_info *info,
+ sp_result result)
+{
+ mock()
+ .expectOneCall("sp_discovery_partition_info_get")
+ .withMemoryBufferParameter("uuid", (const unsigned char *)uuid,
+ sizeof(*uuid))
+ .withOutputParameterReturning("info", info, sizeof(*info))
+ .andReturnValue(result);
+}
+
+sp_result sp_discovery_partition_info_get(const struct sp_uuid *uuid,
+ struct sp_partition_info *info)
+{
+ return mock()
+ .actualCall("sp_discovery_partition_info_get")
+ .withMemoryBufferParameter("uuid", (const unsigned char *)uuid,
+ sizeof(*uuid))
+ .withOutputParameter("info", info)
+ .returnIntValue();
+}
+
+void expect_sp_discovery_partition_info_get_all(const struct sp_partition_info info[],
+ const uint32_t *count,
+ sp_result result)
+{
+ mock()
+ .expectOneCall("sp_discovery_partition_info_get_all")
+ .withOutputParameterReturning("info", info, sizeof(*info) * *count)
+ .withOutputParameterReturning("count", count, sizeof(*count))
+ .andReturnValue(result);
+}
+
+sp_result sp_discovery_partition_info_get_all(struct sp_partition_info info[],
+ uint32_t *count)
+{
+ return mock()
+ .actualCall("sp_discovery_partition_info_get_all")
+ .withOutputParameter("info", info)
+ .withOutputParameter("count", count)
+ .returnIntValue();
+}
diff --git a/components/messaging/ffa/libsp/mock/mock_sp_discovery.h b/components/messaging/ffa/libsp/mock/mock_sp_discovery.h
new file mode 100644
index 0000000..a71ce18
--- /dev/null
+++ b/components/messaging/ffa/libsp/mock/mock_sp_discovery.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
+ */
+
+#ifndef LIBSP_MOCK_MOCK_SP_DISCOVERY_H_
+#define LIBSP_MOCK_MOCK_SP_DISCOVERY_H_
+
+#include "../include/sp_discovery.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void expect_sp_discovery_ffa_version_get(const uint16_t *major,
+ const uint16_t *minor,
+ sp_result result);
+
+void expect_sp_discovery_own_id_get(const uint16_t *id, sp_result result);
+
+void expect_sp_discovery_partition_id_get(const struct sp_uuid *uuid,
+ const uint16_t *id, sp_result result);
+
+
+void expect_sp_discovery_partition_info_get(const struct sp_uuid *uuid,
+ const struct sp_partition_info *info,
+ sp_result result);
+
+void expect_sp_discovery_partition_info_get_all(const struct sp_partition_info info[],
+ const uint32_t *count,
+ sp_result result);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBSP_MOCK_MOCK_SP_DISCOVERY_H_ */
diff --git a/components/messaging/ffa/libsp/mock/test/test_mock_sp_discovery.cpp b/components/messaging/ffa/libsp/mock/test/test_mock_sp_discovery.cpp
new file mode 100644
index 0000000..bb4bf07
--- /dev/null
+++ b/components/messaging/ffa/libsp/mock/test/test_mock_sp_discovery.cpp
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ */
+
+#include <CppUTestExt/MockSupport.h>
+#include <CppUTest/TestHarness.h>
+#include "mock_sp_discovery.h"
+#include <stdint.h>
+#include <stdlib.h>
+
+
+
+
+TEST_GROUP(mock_sp_discovery) {
+ TEST_TEARDOWN()
+ {
+ mock().checkExpectations();
+ mock().clear();
+ }
+
+ static const sp_result result = -1;
+};
+
+TEST(mock_sp_discovery, sp_discovery_ffa_version_get)
+{
+ const uint16_t expected_major = 0xabcd;
+ const uint16_t expected_minor = 0xef01;
+ uint16_t major = 0, minor = 0;
+
+ expect_sp_discovery_ffa_version_get(&expected_major, &expected_minor,
+ result);
+ LONGS_EQUAL(result, sp_discovery_ffa_version_get(&major, &minor));
+ UNSIGNED_LONGS_EQUAL(expected_major, major);
+ UNSIGNED_LONGS_EQUAL(expected_minor, minor);
+}
+
+TEST(mock_sp_discovery, sp_discovery_own_id_get)
+{
+ const uint16_t expected_id = 0x8765;
+ uint16_t id = 0;
+
+ expect_sp_discovery_own_id_get(&expected_id, result);
+ LONGS_EQUAL(result, sp_discovery_own_id_get(&id));
+ UNSIGNED_LONGS_EQUAL(expected_id, id);
+}
+
+TEST(mock_sp_discovery, sp_discovery_partition_id_get)
+{
+ const struct sp_uuid expected_uuid = {
+ .uuid = {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}};
+ const uint16_t expected_id = 0xc1ca;
+
+ struct sp_uuid uuid = expected_uuid;
+ uint16_t id = 0;
+
+ expect_sp_discovery_partition_id_get(&expected_uuid, &expected_id,
+ result);
+ LONGS_EQUAL(result, sp_discovery_partition_id_get(&uuid, &id));
+ UNSIGNED_LONGS_EQUAL(expected_id, id);
+}
+
+TEST(mock_sp_discovery, sp_discovery_partition_info_get)
+{
+ const struct sp_uuid expected_uuid = {
+ .uuid = {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}};
+ const struct sp_partition_info expected_info = {
+ .partition_id = 0x1234,
+ .execution_context_count = 0xffff,
+ .supports_direct_requests = true,
+ .can_send_direct_requests = true,
+ .supports_indirect_requests = false
+ };
+
+ struct sp_uuid uuid = expected_uuid;
+ struct sp_partition_info info = {0};
+
+ expect_sp_discovery_partition_info_get(&expected_uuid, &expected_info,
+ result);
+ LONGS_EQUAL(result, sp_discovery_partition_info_get(&uuid, &info));
+ MEMCMP_EQUAL(&expected_info, &info, sizeof(&expected_info));
+}
+
+TEST(mock_sp_discovery, sp_discovery_partition_info_get_all)
+{
+ const uint32_t expected_count = 2;
+ const struct sp_partition_info expected_info[expected_count] = {{
+ .partition_id = 0x5678,
+ .execution_context_count = 0x1111,
+ .supports_direct_requests = false,
+ .can_send_direct_requests = false,
+ .supports_indirect_requests = true
+ }, {
+ .partition_id = 0x1234,
+ .execution_context_count = 0xffff,
+ .supports_direct_requests = true,
+ .can_send_direct_requests = true,
+ .supports_indirect_requests = false
+ }};
+
+ struct sp_partition_info info[expected_count] = {0};
+ uint32_t count = 0;
+
+ expect_sp_discovery_partition_info_get_all(expected_info,
+ &expected_count, result);
+ LONGS_EQUAL(result, sp_discovery_partition_info_get_all(info, &count));
+ MEMCMP_EQUAL(&expected_info, &info, sizeof(&expected_info));
+ UNSIGNED_LONGS_EQUAL(expected_count, count);
+}
\ No newline at end of file
diff --git a/components/messaging/ffa/libsp/tests.cmake b/components/messaging/ffa/libsp/tests.cmake
index 296ae46..7b52248 100644
--- a/components/messaging/ffa/libsp/tests.cmake
+++ b/components/messaging/ffa/libsp/tests.cmake
@@ -104,6 +104,19 @@ unit_test_add_suite(
-DARM64
)
+unit_test_add_suite(
+ NAME libsp_mock_sp_discovery
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/mock/test/test_mock_sp_discovery.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/mock/mock_sp_discovery.cpp
+ INCLUDE_DIRECTORIES
+ ${CMAKE_CURRENT_LIST_DIR}/include/
+ ${CMAKE_CURRENT_LIST_DIR}/mock
+ ${UNIT_TEST_PROJECT_PATH}/components/common/utils/include
+ COMPILE_DEFINITIONS
+ -DARM64
+)
+
unit_test_add_suite(
NAME libsp_sp_memory_management
SOURCES
--
2.17.1