Line data Source code
1 : /**
2 : * Copyright Notice:
3 : * Copyright 2023-2026 DMTF. All rights reserved.
4 : * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5 : **/
6 :
7 : #include "spdm_unit_test.h"
8 : #include "internal/libspdm_common_lib.h"
9 :
10 : /**
11 : * Test 1: Test support functions.
12 : **/
13 1 : static void libspdm_test_common_context_data_case1(void **state)
14 : {
15 1 : assert_int_equal(0x0001020304050607, libspdm_byte_swap_64(UINT64_C(0x0706050403020100)));
16 1 : }
17 :
18 : /**
19 : * Test 2: Test libspdm_read_uint16 and libspdm_write_uint16.
20 : **/
21 1 : static void libspdm_test_common_read_write_uint16(void **state)
22 : {
23 : uint8_t buffer[2];
24 : uint16_t value;
25 :
26 1 : value = libspdm_read_uint16((const uint8_t *)"\x01\x02");
27 1 : assert_int_equal(value, 0x0201);
28 :
29 1 : libspdm_write_uint16(buffer, 0x0201);
30 1 : assert_memory_equal(buffer, "\x01\x02", sizeof(buffer));
31 :
32 1 : libspdm_write_uint16(buffer, 0xFFFF);
33 1 : assert_int_equal(libspdm_read_uint16(buffer), 0xFFFF);
34 :
35 1 : libspdm_write_uint16(buffer, 0x0000);
36 1 : assert_int_equal(libspdm_read_uint16(buffer), 0x0000);
37 1 : }
38 :
39 : /**
40 : * Test 3: Test libspdm_read_uint24 and libspdm_write_uint24.
41 : **/
42 1 : static void libspdm_test_common_read_write_uint24(void **state)
43 : {
44 : uint8_t buffer[3];
45 : uint32_t value;
46 :
47 1 : value = libspdm_read_uint24((const uint8_t *)"\x01\x02\x03");
48 1 : assert_int_equal(value, 0x030201);
49 :
50 1 : libspdm_write_uint24(buffer, 0x030201);
51 1 : assert_memory_equal(buffer, "\x01\x02\x03", sizeof(buffer));
52 :
53 1 : libspdm_write_uint24(buffer, 0x00FFFFFF);
54 1 : assert_int_equal(libspdm_read_uint24(buffer), 0x00FFFFFF);
55 :
56 1 : libspdm_write_uint24(buffer, 0x00000000);
57 1 : assert_int_equal(libspdm_read_uint24(buffer), 0x00000000);
58 1 : }
59 :
60 : /**
61 : * Test 4: Test libspdm_read_uint32 and libspdm_write_uint32.
62 : **/
63 1 : static void libspdm_test_common_read_write_uint32(void **state)
64 : {
65 : uint8_t buffer[4];
66 : uint32_t value;
67 :
68 1 : value = libspdm_read_uint32((const uint8_t *)"\x01\x02\x03\x04");
69 1 : assert_int_equal(value, 0x04030201);
70 :
71 1 : libspdm_write_uint32(buffer, 0x04030201);
72 1 : assert_memory_equal(buffer, "\x01\x02\x03\x04", sizeof(buffer));
73 :
74 1 : libspdm_write_uint32(buffer, 0xFFFFFFFF);
75 1 : assert_int_equal(libspdm_read_uint32(buffer), 0xFFFFFFFF);
76 :
77 1 : libspdm_write_uint32(buffer, 0x00000000);
78 1 : assert_int_equal(libspdm_read_uint32(buffer), 0x00000000);
79 1 : }
80 :
81 : /**
82 : * Test 5: Test libspdm_read_uint64 and libspdm_write_uint64.
83 : **/
84 1 : static void libspdm_test_common_read_write_uint64(void **state)
85 : {
86 : uint8_t buffer[8];
87 : uint64_t value;
88 :
89 1 : value = libspdm_read_uint64((const uint8_t *)"\x01\x02\x03\x04\x05\x06\x07\x08");
90 1 : assert_int_equal(value, UINT64_C(0x0807060504030201));
91 :
92 1 : libspdm_write_uint64(buffer, UINT64_C(0x0807060504030201));
93 1 : assert_memory_equal(buffer, "\x01\x02\x03\x04\x05\x06\x07\x08", sizeof(buffer));
94 :
95 1 : libspdm_write_uint64(buffer, UINT64_C(0xFFFFFFFFFFFFFFFF));
96 1 : assert_int_equal(libspdm_read_uint64(buffer), UINT64_C(0xFFFFFFFFFFFFFFFF));
97 :
98 1 : libspdm_write_uint64(buffer, UINT64_C(0x0000000000000000));
99 1 : assert_int_equal(libspdm_read_uint64(buffer), UINT64_C(0x0000000000000000));
100 1 : }
101 :
102 1 : int libspdm_common_support_test_main(void)
103 : {
104 1 : const struct CMUnitTest test_cases[] = {
105 : cmocka_unit_test(libspdm_test_common_context_data_case1),
106 : cmocka_unit_test(libspdm_test_common_read_write_uint16),
107 : cmocka_unit_test(libspdm_test_common_read_write_uint24),
108 : cmocka_unit_test(libspdm_test_common_read_write_uint32),
109 : cmocka_unit_test(libspdm_test_common_read_write_uint64),
110 :
111 : };
112 :
113 1 : return cmocka_run_group_tests(test_cases,
114 : libspdm_unit_test_group_setup,
115 : libspdm_unit_test_group_teardown);
116 : }
|