Add border router test case for adding external route 10/273110/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Mon, 28 Mar 2022 07:26:07 +0000 (16:26 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 31 Mar 2022 00:56:43 +0000 (09:56 +0900)
Change-Id: I1153b9cd679694c900e44625da9204be5c607200
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
tests/unittest/mocks/thread-mock-dummy.cpp
tests/unittest/thread-unittest-br.cpp

index 52de67d7ef293d33cff8eae52657601c6233bb97..c93c92b928eb2ff4d7c7488f20938d3fd09de14d 100644 (file)
@@ -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]);
 
index 62cce6fbaee0eb632c25f145791bad0744cc9116..65817bb35b4503bce6cd79a333461efab7928d4e 100644 (file)
  */
 
 #include <gtest/gtest.h>
+#include <arpa/inet.h>
 
 #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