Add border router test case for getting external routes 09/273109/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Mon, 28 Mar 2022 07:05:34 +0000 (16:05 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 31 Mar 2022 00:41:26 +0000 (09:41 +0900)
Change-Id: If5e0ec0ea36654a881b894abf7d00210d30f8585
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
tests/unittest/mocks/thread-mock-dummy.cpp
tests/unittest/thread-unittest-br.cpp

index 4dba5a7..52de67d 100644 (file)
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+#include <arpa/inet.h>
+
 #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,
index ce26fac..62cce6f 100644 (file)
@@ -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