From 209bd1a22cfffa7f237b59e7f4dbec263fa8705a Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 11:49:59 +0900 Subject: [PATCH 01/16] Add border router test case for disable Change-Id: I37868e3308838dc4f774f80afaa200d592e589b6 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-br.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index 70ad72c..ce26fac 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -32,6 +32,8 @@ protected: void TearDown() override { + if (instance) + thread_disable(instance); thread_deinitialize(); } }; @@ -51,4 +53,22 @@ TEST_F(ThreadBRTest, BREnableErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); +} + +TEST_F(ThreadBRTest, BRDisableNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_br_disable(instance)); +} + +TEST_F(ThreadBRTest, BRDisableInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_br_disable(instance)); +} + +TEST_F(ThreadBRTest, BRDisableErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_disable(instance)); } \ No newline at end of file -- 2.7.4 From c938c4e949d24e6056cd517ea6c23a2b5b3b0755 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 16:05:34 +0900 Subject: [PATCH 02/16] Add border router test case for getting external routes Change-Id: If5e0ec0ea36654a881b894abf7d00210d30f8585 Signed-off-by: hyunuk.tak --- tests/unittest/mocks/thread-mock-dummy.cpp | 44 ++++++++++++++++++++++++++++++ tests/unittest/thread-unittest-br.cpp | 35 ++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/tests/unittest/mocks/thread-mock-dummy.cpp b/tests/unittest/mocks/thread-mock-dummy.cpp index 4dba5a7..52de67d 100644 --- a/tests/unittest/mocks/thread-mock-dummy.cpp +++ b/tests/unittest/mocks/thread-mock-dummy.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#include + #include "thread-private.h" #include "thread-dbus-handler.h" #include "thread-mock-util.h" @@ -165,6 +167,43 @@ static GVariant *__property_get_panid() return g_variant_new("(v)", g_variant_new("q", 65535)); } +static void __make_ipv6_address(uint8_t *ipv6Address) +{ + const char *DUMMY_IPV6_ADDRESS = "fd32:647d:8272:7562:78a:1bfb:72d:3544"; + struct in6_addr result; + inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); + memcpy(ipv6Address, result.s6_addr, + THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); +} + +static GVariant *__make_external_routes_result() +{ + uint8_t prefixAddress[THREAD_IPV6_PREFIX_SIZE]; + uint8_t prefixLen = THREAD_IPV6_PREFIX_SIZE; + uint16_t rloc16 = 0xb801; + uint8_t preference = 0; + bool stable = TRUE; + bool nextHopIsSelf = TRUE; + + GVariantBuilder *prefixBuilder = + g_variant_builder_new(G_VARIANT_TYPE("ay")); + __make_ipv6_address(prefixAddress); + for (int i = 0; i < THREAD_IPV6_PREFIX_SIZE; ++i) + g_variant_builder_add(prefixBuilder, "y", prefixAddress[i]); + + GVariant *externalRoutesResult = g_variant_new("((ayy)qybb)", + prefixBuilder, prefixLen, rloc16, preference, stable, nextHopIsSelf); + + g_variant_builder_unref(prefixBuilder); + + return externalRoutesResult; +} + +static GVariant *__property_get_external_routes() +{ + return g_variant_new("(v)", __make_external_routes_result()); +} + struct { const gchar *interface_name; const gchar *signal_name; @@ -271,6 +310,11 @@ struct { __property_get_panid, }, { + "Get", + THREAD_DBUS_PROPERTY_EXTERNAL_ROUTES, + __property_get_external_routes, + }, + { NULL, NULL, NULL, diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index ce26fac..62cce6f 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -23,6 +23,13 @@ class ThreadBRTest : public ::testing::Test public: thread_instance_h instance; +public: + static bool GetExternalRoutesCallback(int total, + thread_route_info_h route_info, void *user_data) + { + return true; + }; + protected: void SetUp() override { @@ -71,4 +78,32 @@ TEST_F(ThreadBRTest, BRDisableErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_disable(instance)); +} + +TEST_F(ThreadBRTest, BRGetExternalRoutesNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr)); +} + +TEST_F(ThreadBRTest, BRGetExternalRoutesInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr)); +} + +TEST_F(ThreadBRTest, BRGetExternalRoutesNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr)); +} + +TEST_F(ThreadBRTest, BRGetExternalRoutesErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr)); } \ No newline at end of file -- 2.7.4 From 38402e8d5e5d7aef6f3c17fee524a4c80da0932f Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 16:26:07 +0900 Subject: [PATCH 03/16] Add border router test case for adding external route Change-Id: I1153b9cd679694c900e44625da9204be5c607200 Signed-off-by: hyunuk.tak --- tests/unittest/mocks/thread-mock-dummy.cpp | 6 ++-- tests/unittest/thread-unittest-br.cpp | 58 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/tests/unittest/mocks/thread-mock-dummy.cpp b/tests/unittest/mocks/thread-mock-dummy.cpp index 52de67d..c93c92b 100644 --- a/tests/unittest/mocks/thread-mock-dummy.cpp +++ b/tests/unittest/mocks/thread-mock-dummy.cpp @@ -167,12 +167,12 @@ static GVariant *__property_get_panid() return g_variant_new("(v)", g_variant_new("q", 65535)); } -static void __make_ipv6_address(uint8_t *ipv6Address) +static void __make_ipv6_prefix(uint8_t *ipv6Prefix) { const char *DUMMY_IPV6_ADDRESS = "fd32:647d:8272:7562:78a:1bfb:72d:3544"; struct in6_addr result; inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); - memcpy(ipv6Address, result.s6_addr, + memcpy(ipv6Prefix, result.s6_addr, THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); } @@ -187,7 +187,7 @@ static GVariant *__make_external_routes_result() GVariantBuilder *prefixBuilder = g_variant_builder_new(G_VARIANT_TYPE("ay")); - __make_ipv6_address(prefixAddress); + __make_ipv6_prefix(prefixAddress); for (int i = 0; i < THREAD_IPV6_PREFIX_SIZE; ++i) g_variant_builder_add(prefixBuilder, "y", prefixAddress[i]); diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index 62cce6f..65817bb 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -15,13 +15,24 @@ */ #include +#include #include "thread.h" +#define DUMMY_IPV6_ADDRESS "fd32:647d:8272:7562:78a:1bfb:72d:3544" + class ThreadBRTest : public ::testing::Test { public: + uint8_t ipv6Prefix[THREAD_IPV6_PREFIX_SIZE]; + uint8_t ipv6PrefixLen; + uint16_t rloc16; + int8_t preference; + bool isStable; + bool isDeviceNextHop; + thread_instance_h instance; + thread_route_info_h routeInfo; public: static bool GetExternalRoutesCallback(int total, @@ -35,6 +46,12 @@ protected: { thread_initialize(); instance = nullptr; + makeIpv6Prefix(); + ipv6PrefixLen = THREAD_IPV6_PREFIX_SIZE; + rloc16 = 0xb801; + preference = 0; + isStable = TRUE; + isDeviceNextHop = TRUE; } void TearDown() override @@ -43,6 +60,15 @@ protected: thread_disable(instance); thread_deinitialize(); } + +private: + void makeIpv6Prefix() + { + struct in6_addr result; + inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); + memcpy(ipv6Prefix, result.s6_addr, + THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); + } }; TEST_F(ThreadBRTest, BREnableNotInitialized) @@ -106,4 +132,36 @@ TEST_F(ThreadBRTest, BRGetExternalRoutesErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr)); +} + +TEST_F(ThreadBRTest, BRAddExternalRouteNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen, + rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); +} + +TEST_F(ThreadBRTest, BRAddExternalRouteInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen, + rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); +} + +TEST_F(ThreadBRTest, BRAddExternalRouteNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen, + rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); +} + +TEST_F(ThreadBRTest, BRAddExternalRouteErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen, + rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); } \ No newline at end of file -- 2.7.4 From c9820b3041b85800638a09772f4bf506a87322e7 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 16:36:38 +0900 Subject: [PATCH 04/16] Add border router test case for removing external route Change-Id: Iec73c140b8132b78a759fcb55a76fa9aa91b552a Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-br.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index 65817bb..9ca4904 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -164,4 +164,35 @@ TEST_F(ThreadBRTest, BRAddExternalRouteErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen, rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); +} + +TEST_F(ThreadBRTest, BRRemoveExternalRouteNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_br_remove_external_route(instance, routeInfo)); +} + +TEST_F(ThreadBRTest, BRRemoveExternalRouteInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_br_remove_external_route(instance, routeInfo)); +} + +TEST_F(ThreadBRTest, BRRemoveExternalRouteNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_br_remove_external_route(instance, routeInfo)); +} + +TEST_F(ThreadBRTest, BRRemoveExternalRouteErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen, + rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_remove_external_route(instance, routeInfo)); } \ No newline at end of file -- 2.7.4 From 9b88ed41457648a60810cddeb25d383fc85787d8 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 16:50:59 +0900 Subject: [PATCH 05/16] Add border router test case for adding onmesh prefix Change-Id: Id9e3c86ae269530be91fc308e71a71fc093dad19 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-br.cpp | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index 9ca4904..cf7b5f5 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -31,8 +31,19 @@ public: bool isStable; bool isDeviceNextHop; + uint8_t onmeshIpv6Prefix[THREAD_IPV6_PREFIX_SIZE]; + uint8_t onmeshIpv6PrefixLen; + bool preferred; + bool slaac; + bool dhcp; + bool configure; + bool defaultRoute; + bool onMesh; + bool stable; + thread_instance_h instance; thread_route_info_h routeInfo; + thread_onmesh_prefix_info_h onmeshPrefix; public: static bool GetExternalRoutesCallback(int total, @@ -52,6 +63,15 @@ protected: preference = 0; isStable = TRUE; isDeviceNextHop = TRUE; + makeOnmeshIpv6Prefix(); + onmeshIpv6PrefixLen = THREAD_IPV6_PREFIX_SIZE; + preferred = true; + slaac = true; + dhcp = true; + configure = true; + defaultRoute = true; + onMesh = true; + stable = true; } void TearDown() override @@ -69,6 +89,14 @@ private: memcpy(ipv6Prefix, result.s6_addr, THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); } + + void makeOnmeshIpv6Prefix() + { + struct in6_addr result; + inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); + memcpy(ipv6Prefix, result.s6_addr, + THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); + } }; TEST_F(ThreadBRTest, BREnableNotInitialized) @@ -195,4 +223,40 @@ TEST_F(ThreadBRTest, BRRemoveExternalRouteErrorNone) rloc16, preference, isStable, isDeviceNextHop, &routeInfo)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_remove_external_route(instance, routeInfo)); +} + +TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, + onmeshIpv6PrefixLen, preference, preferred, slaac, + dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRAddOnmeshPrefixInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, + onmeshIpv6PrefixLen, preference, preferred, slaac, + dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, + onmeshIpv6PrefixLen, preference, preferred, slaac, + dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRAddOnmeshPrefixErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, + onmeshIpv6PrefixLen, preference, preferred, slaac, + dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); } \ No newline at end of file -- 2.7.4 From 4b0690aa141569f6e6e76750e16aefd07e295624 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 16:59:31 +0900 Subject: [PATCH 06/16] Add border router test case for removing onmesh prefix Change-Id: Ia111de236169ed639cc6a2f82fc1c36b33b6166a Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-br.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index cf7b5f5..fec4427 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -259,4 +259,36 @@ TEST_F(ThreadBRTest, BRAddOnmeshPrefixErrorNone) thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, onmeshIpv6PrefixLen, preference, preferred, slaac, dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_br_remove_onmesh_prefix(instance, onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_br_remove_onmesh_prefix(instance, onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_br_remove_onmesh_prefix(instance, onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, + onmeshIpv6PrefixLen, preference, preferred, slaac, + dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_remove_onmesh_prefix(instance, onmeshPrefix)); } \ No newline at end of file -- 2.7.4 From 9686e8de67949d201c0ddb9f5bd626f7fd0f6988 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 17:20:00 +0900 Subject: [PATCH 07/16] Move dummy ipv6 address to header file Change-Id: I365d152d09abca41c8adf6ac7eec9f426218ff8f Signed-off-by: hyunuk.tak --- tests/unittest/mocks/thread-mock-dummy.cpp | 1 - tests/unittest/mocks/thread-mock-dummy.h | 1 + tests/unittest/thread-unittest-br.cpp | 3 +-- tests/unittest/thread-unittest-network.cpp | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/unittest/mocks/thread-mock-dummy.cpp b/tests/unittest/mocks/thread-mock-dummy.cpp index c93c92b..e931951 100644 --- a/tests/unittest/mocks/thread-mock-dummy.cpp +++ b/tests/unittest/mocks/thread-mock-dummy.cpp @@ -169,7 +169,6 @@ static GVariant *__property_get_panid() static void __make_ipv6_prefix(uint8_t *ipv6Prefix) { - const char *DUMMY_IPV6_ADDRESS = "fd32:647d:8272:7562:78a:1bfb:72d:3544"; struct in6_addr result; inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); memcpy(ipv6Prefix, result.s6_addr, diff --git a/tests/unittest/mocks/thread-mock-dummy.h b/tests/unittest/mocks/thread-mock-dummy.h index 8d2f35c..0b8e4c9 100644 --- a/tests/unittest/mocks/thread-mock-dummy.h +++ b/tests/unittest/mocks/thread-mock-dummy.h @@ -20,6 +20,7 @@ #include #define DUMMY_SIGNAL_ID 1 +#define DUMMY_IPV6_ADDRESS "fd32:647d:8272:7562:78a:1bfb:72d:3544" typedef enum { PROPERTIES_CHANGED = 0, diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index fec4427..d1139ce 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -18,8 +18,7 @@ #include #include "thread.h" - -#define DUMMY_IPV6_ADDRESS "fd32:647d:8272:7562:78a:1bfb:72d:3544" +#include "mocks/thread-mock-dummy.h" class ThreadBRTest : public ::testing::Test { diff --git a/tests/unittest/thread-unittest-network.cpp b/tests/unittest/thread-unittest-network.cpp index 08c6b87..a2b40aa 100644 --- a/tests/unittest/thread-unittest-network.cpp +++ b/tests/unittest/thread-unittest-network.cpp @@ -18,6 +18,7 @@ #include #include "thread.h" +#include "mocks/thread-mock-dummy.h" #define NETWORK_DATA_SIZE 256 #define NETWORK_TLVS_SIZE 1024 @@ -26,7 +27,6 @@ "16d3e0aee52fb7e618a759973030f4f70656e5468726561642d34633" \ "33801024c3804103044b2dc6512dce13b11d3386eb2ce7e0c0402a0fff8" #define DUMMY_TLVS_SIZE ((int)(sizeof(DUMMY_TLVS_STR) / 2)) -#define DUMMY_IPV6_ADDRESS "fe80::1ee5:a5a9:8bd2:68de" class ThreadNetworkTest : public ::testing::Test { -- 2.7.4 From 8eadaf997f7740b0585d39eda5f7b272f9837742 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 17:21:38 +0900 Subject: [PATCH 08/16] Modify indentation Change-Id: Ibecfa857433ca9a4a71b97552d8fcdc3a37b8874 Signed-off-by: hyunuk.tak --- tests/unittest/mocks/thread-mock-dummy.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/unittest/mocks/thread-mock-dummy.cpp b/tests/unittest/mocks/thread-mock-dummy.cpp index e931951..8e59794 100644 --- a/tests/unittest/mocks/thread-mock-dummy.cpp +++ b/tests/unittest/mocks/thread-mock-dummy.cpp @@ -170,9 +170,9 @@ static GVariant *__property_get_panid() static void __make_ipv6_prefix(uint8_t *ipv6Prefix) { struct in6_addr result; - inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); - memcpy(ipv6Prefix, result.s6_addr, - THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); + inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result); + memcpy(ipv6Prefix, result.s6_addr, + THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t)); } static GVariant *__make_external_routes_result() -- 2.7.4 From d0e08ac57fba99dec151b691061fff2e6e25828d Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 17:27:28 +0900 Subject: [PATCH 09/16] Add to clean up after used API for br enable Change-Id: I676666b57c48e6da931d93d077492306cbf396b4 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-br.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index d1139ce..f4f458d 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -76,7 +76,10 @@ protected: void TearDown() override { if (instance) + { + thread_br_disable(instance); thread_disable(instance); + } thread_deinitialize(); } -- 2.7.4 From b9087bc625757648dc54320558f162c7a4a63f52 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 11:12:18 +0900 Subject: [PATCH 10/16] Add commissioner test case for start Change-Id: I61604323de139881a9024a6d06307a45cfad7c8b Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-commissioner.cpp | 56 +++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/unittest/thread-unittest-commissioner.cpp diff --git a/tests/unittest/thread-unittest-commissioner.cpp b/tests/unittest/thread-unittest-commissioner.cpp new file mode 100644 index 0000000..62a8ff1 --- /dev/null +++ b/tests/unittest/thread-unittest-commissioner.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "thread.h" + +class ThreadCommissionerTest : public ::testing::Test +{ +public: + thread_instance_h instance; + +protected: + void SetUp() override + { + thread_initialize(); + instance = nullptr; + } + + void TearDown() override + { + if (instance) + thread_disable(instance); + thread_deinitialize(); + } +}; + +TEST_F(ThreadCommissionerTest, CommissionerStartNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_commissioner_start(instance)); +} + +TEST_F(ThreadCommissionerTest, CommissionerStartInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_commissioner_start(instance)); +} + +TEST_F(ThreadCommissionerTest, CommissionerStartErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_commissioner_start(instance)); +} \ No newline at end of file -- 2.7.4 From da806f0c65197877c543eacf89f63197c2b1626d Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 11:20:55 +0900 Subject: [PATCH 11/16] Add commissioner test case for setting commissioning data Change-Id: Ie45b7efd707e4c5e0b74b7310c80310a0149be52 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-commissioner.cpp | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/unittest/thread-unittest-commissioner.cpp b/tests/unittest/thread-unittest-commissioner.cpp index 62a8ff1..4eeeee3 100644 --- a/tests/unittest/thread-unittest-commissioner.cpp +++ b/tests/unittest/thread-unittest-commissioner.cpp @@ -21,6 +21,9 @@ class ThreadCommissionerTest : public ::testing::Test { public: + const char *joiner_uuid = "joiner_uuid"; + const char *joiner_passphrase = "joiner_passphrase"; + thread_instance_h instance; protected: @@ -53,4 +56,27 @@ TEST_F(ThreadCommissionerTest, CommissionerStartErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_commissioner_start(instance)); +} + +TEST_F(ThreadCommissionerTest, SetCommissioningDataNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_commissioner_set_commisioning_data(instance, + joiner_uuid, joiner_passphrase)); +} + +TEST_F(ThreadCommissionerTest, SetCommissioningDataInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_commissioner_set_commisioning_data(instance, + joiner_uuid, joiner_passphrase)); +} + +TEST_F(ThreadCommissionerTest, SetCommissioningDataErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_commissioner_set_commisioning_data(instance, + joiner_uuid, joiner_passphrase)); } \ No newline at end of file -- 2.7.4 From 6596eb5df23765873d040bc06b1a568270d6058c Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 11:26:02 +0900 Subject: [PATCH 12/16] Fix a typo of commissioner API Change-Id: I6e968ed343fc0dbff00b3c6112f55cbf8b8c7788 Signed-off-by: hyunuk.tak --- include/thread.h | 2 +- src/thread-commissioner.c | 2 +- tests/thread-test/thread-commissioner.c | 16 ++++++++-------- tests/thread-test/thread-scenarios.c | 4 ++-- tests/unittest/thread-unittest-commissioner.cpp | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/thread.h b/include/thread.h index 36fbb4e..8a763c4 100644 --- a/include/thread.h +++ b/include/thread.h @@ -677,7 +677,7 @@ int thread_commissioner_start(thread_instance_h instance); * * @pre thread API must be initialized with thread_initialize(). */ -int thread_commissioner_set_commisioning_data(thread_instance_h instance, const char *joiner_uuid, +int thread_commissioner_set_commissioning_data(thread_instance_h instance, const char *joiner_uuid, const char *joiner_passphrase); /** diff --git a/src/thread-commissioner.c b/src/thread-commissioner.c index eb0ffb5..59c6eaf 100644 --- a/src/thread-commissioner.c +++ b/src/thread-commissioner.c @@ -57,7 +57,7 @@ int thread_commissioner_start(thread_instance_h instance) return THREAD_ERROR_NONE; } -int thread_commissioner_set_commisioning_data(thread_instance_h instance, +int thread_commissioner_set_commissioning_data(thread_instance_h instance, const char *joiner_uuid, const char *joiner_passphrase) { diff --git a/tests/thread-test/thread-commissioner.c b/tests/thread-test/thread-commissioner.c index e2baf2b..1a0f7eb 100644 --- a/tests/thread-test/thread-commissioner.c +++ b/tests/thread-test/thread-commissioner.c @@ -52,35 +52,35 @@ OUT: return RET_SUCCESS; } -static int run_thread_commissioner_set_commisioning_data(MManager *mm, struct menu_data *menu) +static int run_thread_commissioner_set_commissioning_data(MManager *mm, struct menu_data *menu) { FUNC_ENTRY; thread_instance_h g_instance = mm->t_instance; if (g_instance == NULL) goto OUT; - int ret = thread_commissioner_set_commisioning_data(g_instance, g_joiner_uuid, + int ret = thread_commissioner_set_commissioning_data(g_instance, g_joiner_uuid, g_joiner_passphrase); if (ret == THREAD_ERROR_NONE) - msg("thread_commissioner_set_commisioning_data success"); + msg("thread_commissioner_set_commissioning_data success"); else - msg("thread_commissioner_set_commisioning_data failed"); + msg("thread_commissioner_set_commissioning_data failed"); OUT: FUNC_EXIT; return RET_SUCCESS; } -static struct menu_data menu_thread_commissioner_set_commisioning_data[] = { +static struct menu_data menu_thread_commissioner_set_commissioning_data[] = { { "1", "Joiner UUID", NULL, NULL, g_joiner_uuid}, { "2", "Joiner Passphrase", NULL, NULL, g_joiner_passphrase}, - { "3", "run", NULL, run_thread_commissioner_set_commisioning_data, NULL}, + { "3", "run", NULL, run_thread_commissioner_set_commissioning_data, NULL}, { NULL, NULL, }, }; struct menu_data menu_thread_commissioner[] = { { "1", "thread_commissioner_start", NULL, run_thread_commissioner_start, NULL}, - { "2", "thread_commissioner_set_commisioning_data", - menu_thread_commissioner_set_commisioning_data, NULL, NULL }, + { "2", "thread_commissioner_set_commissioning_data", + menu_thread_commissioner_set_commissioning_data, NULL, NULL }, { NULL, NULL, }, }; diff --git a/tests/thread-test/thread-scenarios.c b/tests/thread-test/thread-scenarios.c index 369282c..4b9dec3 100644 --- a/tests/thread-test/thread-scenarios.c +++ b/tests/thread-test/thread-scenarios.c @@ -194,14 +194,14 @@ static int run_thread_start_leader_as_commissioner(MManager *mm, struct menu_dat } /* thread commissioner set commissioning data*/ - ret = thread_commissioner_set_commisioning_data(g_instance, g_joiner_uuid, + ret = thread_commissioner_set_commissioning_data(g_instance, g_joiner_uuid, g_joiner_passphrase); if (ret != THREAD_ERROR_NONE) { msg("Failed: %s", _thread_get_error_message(ret)); goto OUT; } - msg("thread_commissioner_set_commisioning_data success"); + msg("thread_commissioner_set_commissioning_data success"); OUT: FUNC_EXIT; return RET_SUCCESS; diff --git a/tests/unittest/thread-unittest-commissioner.cpp b/tests/unittest/thread-unittest-commissioner.cpp index 4eeeee3..5df5c23 100644 --- a/tests/unittest/thread-unittest-commissioner.cpp +++ b/tests/unittest/thread-unittest-commissioner.cpp @@ -62,14 +62,14 @@ TEST_F(ThreadCommissionerTest, SetCommissioningDataNotInitialized) { EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, - thread_commissioner_set_commisioning_data(instance, + thread_commissioner_set_commissioning_data(instance, joiner_uuid, joiner_passphrase)); } TEST_F(ThreadCommissionerTest, SetCommissioningDataInvalidParameter) { EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, - thread_commissioner_set_commisioning_data(instance, + thread_commissioner_set_commissioning_data(instance, joiner_uuid, joiner_passphrase)); } @@ -77,6 +77,6 @@ TEST_F(ThreadCommissionerTest, SetCommissioningDataErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, - thread_commissioner_set_commisioning_data(instance, + thread_commissioner_set_commissioning_data(instance, joiner_uuid, joiner_passphrase)); } \ No newline at end of file -- 2.7.4 From 510737364530289775ee1b54ca6c92cb55697317 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 12:46:25 +0900 Subject: [PATCH 13/16] Add srp test case for client start Change-Id: I4198da20d6e46bb9acf29bc0b88ee81496f4d0f0 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-srp.cpp | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/unittest/thread-unittest-srp.cpp diff --git a/tests/unittest/thread-unittest-srp.cpp b/tests/unittest/thread-unittest-srp.cpp new file mode 100644 index 0000000..227251f --- /dev/null +++ b/tests/unittest/thread-unittest-srp.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "thread.h" + +class ThreadSrpTest : public ::testing::Test +{ +public: + thread_instance_h instance; + +protected: + void SetUp() override + { + thread_initialize(); + instance = nullptr; + } + + void TearDown() override + { + if (instance) + thread_disable(instance); + thread_deinitialize(); + } +}; + +TEST_F(ThreadSrpTest, ClientStartNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_srp_client_start(instance)); +} + +TEST_F(ThreadSrpTest, ClientStartInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_srp_client_start(instance)); +} + +TEST_F(ThreadSrpTest, ClientStartErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_start(instance)); +} \ No newline at end of file -- 2.7.4 From 77f6d317f4b3a2294f1968d25210329d715fb769 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 12:55:48 +0900 Subject: [PATCH 14/16] Add srp test case for client stop Change-Id: Ie0c44209e9955cae917f0105a30c4fa6e082b3e9 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-srp.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/unittest/thread-unittest-srp.cpp b/tests/unittest/thread-unittest-srp.cpp index 227251f..b9273c7 100644 --- a/tests/unittest/thread-unittest-srp.cpp +++ b/tests/unittest/thread-unittest-srp.cpp @@ -53,4 +53,21 @@ TEST_F(ThreadSrpTest, ClientStartErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_start(instance)); +} + +TEST_F(ThreadSrpTest, ClientStopNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_srp_client_stop(instance)); +} + +TEST_F(ThreadSrpTest, ClientStopInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_srp_client_stop(instance)); +} + +TEST_F(ThreadSrpTest, ClientStopErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_stop(instance)); } \ No newline at end of file -- 2.7.4 From a2e7db91a1f724c5fcab2861bfa916c5443235ec Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 12:58:21 +0900 Subject: [PATCH 15/16] Add srp test case for removing client host Change-Id: I279e46d72043627ff77123cb8c2dbbe3a56a810f Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-srp.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/unittest/thread-unittest-srp.cpp b/tests/unittest/thread-unittest-srp.cpp index b9273c7..b03eeb3 100644 --- a/tests/unittest/thread-unittest-srp.cpp +++ b/tests/unittest/thread-unittest-srp.cpp @@ -70,4 +70,21 @@ TEST_F(ThreadSrpTest, ClientStopErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_stop(instance)); +} + +TEST_F(ThreadSrpTest, ClientRemoveHostNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_srp_client_remove_host(instance)); +} + +TEST_F(ThreadSrpTest, ClientRemoveHostInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_srp_client_remove_host(instance)); +} + +TEST_F(ThreadSrpTest, ClientRemoveHostErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_remove_host(instance)); } \ No newline at end of file -- 2.7.4 From 2cc7b95f697762c8b101ca080a6802848bdcac1d Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 29 Mar 2022 13:03:21 +0900 Subject: [PATCH 16/16] Add srp test case for setting client host name Change-Id: I5124a8714a3c8c3e6470550c351885f9352532f3 Signed-off-by: hyunuk.tak --- tests/unittest/thread-unittest-srp.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/unittest/thread-unittest-srp.cpp b/tests/unittest/thread-unittest-srp.cpp index b03eeb3..aa33de6 100644 --- a/tests/unittest/thread-unittest-srp.cpp +++ b/tests/unittest/thread-unittest-srp.cpp @@ -21,6 +21,7 @@ class ThreadSrpTest : public ::testing::Test { public: + const char *hostName = "host_name"; thread_instance_h instance; protected: @@ -87,4 +88,21 @@ TEST_F(ThreadSrpTest, ClientRemoveHostErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_remove_host(instance)); +} + +TEST_F(ThreadSrpTest, ClientSetHostNameNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_srp_client_set_host_name(instance, hostName)); +} + +TEST_F(ThreadSrpTest, ClientSetHostNameInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_srp_client_set_host_name(instance, hostName)); +} + +TEST_F(ThreadSrpTest, ClientSetHostNameErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_srp_client_set_host_name(instance, hostName)); } \ No newline at end of file -- 2.7.4