From: hyunuk.tak Date: Mon, 28 Mar 2022 07:05:34 +0000 (+0900) Subject: Add border router test case for getting external routes X-Git-Tag: accepted/tizen/unified/20220914.164046~66 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c938c4e949d24e6056cd517ea6c23a2b5b3b0755;p=platform%2Fcore%2Fapi%2Fthread.git Add border router test case for getting external routes Change-Id: If5e0ec0ea36654a881b894abf7d00210d30f8585 Signed-off-by: hyunuk.tak --- 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; @@ -270,6 +309,11 @@ struct { THREAD_DBUS_PROPERTY_PANID, __property_get_panid, }, + { + "Get", + THREAD_DBUS_PROPERTY_EXTERNAL_ROUTES, + __property_get_external_routes, + }, { 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