From 38402e8d5e5d7aef6f3c17fee524a4c80da0932f Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 28 Mar 2022 16:26:07 +0900 Subject: [PATCH] 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.34.1