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));
}
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]);
*/
#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,
{
thread_initialize();
instance = nullptr;
+ makeIpv6Prefix();
+ ipv6PrefixLen = THREAD_IPV6_PREFIX_SIZE;
+ rloc16 = 0xb801;
+ preference = 0;
+ isStable = TRUE;
+ isDeviceNextHop = TRUE;
}
void TearDown() override
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)
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