// SPDX-License-Identifier: BSD-3-Clause OR Apache-2.0 #ifndef TESTUD3TN_EID_HELPERS_H_ #define TESTUD3TN_EID_HELPERS_H_ #include "ud3tn/eid.h" #include "testud3tn_unity.h" #include #include #include // INVALID #define EID_INVALID (struct eid){ \ .scheme = EID_SCHEME_UNKNOWN, \ .dtn_eid = NULL, \ } // NOTE: We currently assume that all `struct eid` instances have been validated on creation. // static const struct eid EID_DTN_EMPTY = (struct eid){ .scheme = EID_SCHEME_DTN, .dtn_eid = "" }; // VALID -- NULL #define EID_NULL_DTN (struct eid){ \ .scheme = EID_SCHEME_DTN, \ .dtn_eid = NULL, \ } #define EID_NULL_IPN (struct eid){ \ .scheme = EID_SCHEME_IPN, \ .ipn_eid = (struct ipn_eid){ .fully_qualified_node_number = 0, .service_number = 0 }, \ } // VALID #define EID_DTN_UD3TN (struct eid){ \ .scheme = EID_SCHEME_DTN, \ .dtn_eid = "dtn://ud3tn.dtn/", \ } #define EID_DTN_UD3TN_AGENT (struct eid){ \ .scheme = EID_SCHEME_DTN, \ .dtn_eid = "dtn://ud3tn.dtn/agent", \ } #define EID_DTN_UD3TN_AGENT2 (struct eid){ \ .scheme = EID_SCHEME_DTN, \ .dtn_eid = "dtn://ud3tn.dtn/agent2", \ } #define EID_IPN_10 (struct eid){ \ .scheme = EID_SCHEME_IPN, \ .ipn_eid = (struct ipn_eid){ .fully_qualified_node_number = 1, .service_number = 0 }, \ } #define EID_IPN_11 (struct eid){ \ .scheme = EID_SCHEME_IPN, \ .ipn_eid = (struct ipn_eid){ .fully_qualified_node_number = 1, .service_number = 1 }, \ } // ASSERT HELPERS // Compares two EID structs. #define TEST_ASSERT_EQUAL_EID_MESSAGE(a, b, msg) do { \ struct eid _a = (a); \ struct eid _b = (b); \ TEST_ASSERT_EQUAL_MESSAGE(_a.scheme, _b.scheme, msg); \ if (_a.scheme == EID_SCHEME_DTN) { \ TEST_ASSERT_EQUAL_STRING_MESSAGE(_a.dtn_eid, _b.dtn_eid, (msg)); \ } else if (_a.scheme == EID_SCHEME_IPN) { \ TEST_ASSERT_EQUAL_UINT64_MESSAGE( \ _a.ipn_eid.fully_qualified_node_number, \ _b.ipn_eid.fully_qualified_node_number, (msg)); \ TEST_ASSERT_EQUAL_UINT64_MESSAGE( \ _a.ipn_eid.service_number, _b.ipn_eid.service_number, (msg)); \ } else if (_a.scheme != EID_SCHEME_UNKNOWN) { \ TEST_FAIL_MESSAGE((msg)); \ } \ } while (0) #define TEST_ASSERT_EQUAL_EID(a, b) TEST_ASSERT_EQUAL_EID_MESSAGE((a), (b), NULL) // Compares a heap-allocated EID struct (that is then deallocated) with an expected EID. #define TEST_ASSERT_EQUAL_AEID_MESSAGE(a2, b2, msg) do { \ struct eid _a2 = (a2); \ struct eid _b2 = (b2); \ TEST_ASSERT_EQUAL_EID_MESSAGE(_a2, _b2, (msg)); \ eid_free(_b2); \ } while (0) #define TEST_ASSERT_EQUAL_AEID(a2, b2) TEST_ASSERT_EQUAL_AEID_MESSAGE((a2), (b2), NULL) // Compares a heap-allocated string (that is then deallocated) with an expected value. #define TEST_ASSERT_EQUAL_ASTRING(exp, str) do { \ __typeof__(exp) _exp = (exp); \ __typeof__(str) _str = (str); \ TEST_ASSERT_EQUAL_STRING(_exp, _str); \ free(_str); \ } while (0) // CONSTRUCTION HELPERS #define EID_DTN(str) ((const struct eid) { \ .scheme = EID_SCHEME_DTN, \ .dtn_eid = (char *)str, \ }) #define EID_IPN(n, s) ((const struct eid) { \ .scheme = EID_SCHEME_IPN, \ .ipn_eid = (struct ipn_eid){ \ .fully_qualified_node_number = n, \ .service_number = s, \ }, \ }) #define EID_IPN_S(str) eid_from_string(str) #define EID_IPN_3(ai, an, s) (EID_IPN( \ ((uint64_t)(ai) << 32) | ((an) & 0xFFFFFFFF), \ (s) \ )) #endif // TESTUD3TN_EID_HELPERS_H_