* limitations under the License.
*/
+#include <arpa/inet.h>
+
#include "thread-private.h"
#include "thread-dbus-handler.h"
#include "thread-mock-util.h"
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;
__property_get_panid,
},
{
+ "Get",
+ THREAD_DBUS_PROPERTY_EXTERNAL_ROUTES,
+ __property_get_external_routes,
+ },
+ {
NULL,
NULL,
NULL,
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
{
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