2 * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <gtest/gtest.h>
18 #include <arpa/inet.h>
21 #include "mocks/thread-mock-dummy.h"
23 class ThreadBRTest : public ::testing::Test
26 enum class RouteInfo {
34 uint8_t ipv6Prefix[THREAD_IPV6_PREFIX_SIZE];
35 uint8_t ipv6PrefixLen;
41 uint8_t onmeshIpv6Prefix[THREAD_IPV6_PREFIX_SIZE];
42 uint8_t onmeshIpv6PrefixLen;
53 thread_instance_h instance;
54 thread_route_info_h routeInfo;
55 thread_onmesh_prefix_info_h onmeshPrefix;
58 static bool GetOnmeshPrefixesCallback(int total,
59 thread_onmesh_prefix_info_h onmesh_prefix_info, void *user_data)
64 static bool GetExternalRoutesCallback(int total,
65 thread_route_info_h route_info, void *user_data)
67 RouteInfo routeInfo = static_cast<RouteInfo>(GPOINTER_TO_UINT(user_data));
70 case RouteInfo::kIpv6Prefix:
72 uint8_t ipv6Prefix[THREAD_IPV6_ADDRESS_SIZE];
73 uint8_t ipv6PrefixLen;
74 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_ipv6_prefix(route_info, ipv6Prefix, &ipv6PrefixLen));
77 case RouteInfo::kRloc16:
80 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_rloc16(route_info, &rloc16));
83 case RouteInfo::kPreference:
86 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_preference(route_info, &preference));
89 case RouteInfo::kStable:
92 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_check_stable(route_info, &isStable));
95 case RouteInfo::kDeviceNexthop:
98 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_check_device_nexthop(route_info, &isDeviceNexthop));
109 void SetUp() override
114 ipv6PrefixLen = THREAD_IPV6_PREFIX_SIZE;
118 isDeviceNextHop = TRUE;
119 makeOnmeshIpv6Prefix();
120 onmeshIpv6PrefixLen = THREAD_IPV6_PREFIX_SIZE;
130 void TearDown() override
135 thread_onmesh_prefix_destroy(instance, onmeshPrefix);
136 thread_br_disable(instance);
137 thread_disable(instance);
139 thread_deinitialize();
143 void makeIpv6Prefix()
145 struct in6_addr result;
146 inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result);
147 memcpy(ipv6Prefix, result.s6_addr,
148 THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t));
151 void makeOnmeshIpv6Prefix()
153 struct in6_addr result;
154 inet_pton(AF_INET6, DUMMY_IPV6_ADDRESS, &result);
155 memcpy(ipv6Prefix, result.s6_addr,
156 THREAD_IPV6_PREFIX_SIZE * sizeof(uint8_t));
160 TEST_F(ThreadBRTest, BREnableNotInitialized)
162 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
163 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_br_enable(instance));
166 TEST_F(ThreadBRTest, BREnableInvalidParameter)
168 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_br_enable(instance));
171 TEST_F(ThreadBRTest, BREnableErrorNone)
173 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
174 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
177 TEST_F(ThreadBRTest, BRDisableNotInitialized)
179 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
180 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_br_disable(instance));
183 TEST_F(ThreadBRTest, BRDisableInvalidParameter)
185 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_br_disable(instance));
188 TEST_F(ThreadBRTest, BRDisableErrorNone)
190 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
191 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
192 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_disable(instance));
195 TEST_F(ThreadBRTest, BRGetExternalRoutesNotInitialized)
197 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
198 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED,
199 thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr));
202 TEST_F(ThreadBRTest, BRGetExternalRoutesInvalidParameter)
204 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER,
205 thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr));
208 TEST_F(ThreadBRTest, BRGetExternalRoutesNotEnabled)
210 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
211 EXPECT_EQ(THREAD_ERROR_NOT_ENABLED,
212 thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr));
215 TEST_F(ThreadBRTest, BRGetExternalRoutesErrorNone)
217 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
218 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
219 EXPECT_EQ(THREAD_ERROR_NONE,
220 thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr));
223 TEST_F(ThreadBRTest, BRGetIpv6PrefixErrorNone)
225 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
226 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
227 EXPECT_EQ(THREAD_ERROR_NONE,
228 thread_br_get_external_routes(instance, GetExternalRoutesCallback,
229 GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kIpv6Prefix))));
232 TEST_F(ThreadBRTest, BRGetRloc16ErrorNone)
234 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
235 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
236 EXPECT_EQ(THREAD_ERROR_NONE,
237 thread_br_get_external_routes(instance, GetExternalRoutesCallback,
238 GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kRloc16))));
241 TEST_F(ThreadBRTest, BRGetPreferenceErrorNone)
243 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
244 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
245 EXPECT_EQ(THREAD_ERROR_NONE,
246 thread_br_get_external_routes(instance, GetExternalRoutesCallback,
247 GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kPreference))));
250 TEST_F(ThreadBRTest, BRCheckStableErrorNone)
252 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
253 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
254 EXPECT_EQ(THREAD_ERROR_NONE,
255 thread_br_get_external_routes(instance, GetExternalRoutesCallback,
256 GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kStable))));
259 TEST_F(ThreadBRTest, BRCheckDeviceNexthopErrorNone)
261 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
262 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
263 EXPECT_EQ(THREAD_ERROR_NONE,
264 thread_br_get_external_routes(instance, GetExternalRoutesCallback,
265 GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kDeviceNexthop))));
268 TEST_F(ThreadBRTest, BRAddExternalRouteNotInitialized)
270 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
271 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED,
272 thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen,
273 rloc16, preference, isStable, isDeviceNextHop, &routeInfo));
276 TEST_F(ThreadBRTest, BRAddExternalRouteInvalidParameter)
278 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER,
279 thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen,
280 rloc16, preference, isStable, isDeviceNextHop, &routeInfo));
283 TEST_F(ThreadBRTest, BRAddExternalRouteNotEnabled)
285 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
286 EXPECT_EQ(THREAD_ERROR_NOT_ENABLED,
287 thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen,
288 rloc16, preference, isStable, isDeviceNextHop, &routeInfo));
291 TEST_F(ThreadBRTest, BRAddExternalRouteErrorNone)
293 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
294 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
295 EXPECT_EQ(THREAD_ERROR_NONE,
296 thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen,
297 rloc16, preference, isStable, isDeviceNextHop, &routeInfo));
300 TEST_F(ThreadBRTest, BRRemoveExternalRouteNotInitialized)
302 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
303 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED,
304 thread_br_remove_external_route(instance, routeInfo));
307 TEST_F(ThreadBRTest, BRRemoveExternalRouteInvalidParameter)
309 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER,
310 thread_br_remove_external_route(instance, routeInfo));
313 TEST_F(ThreadBRTest, BRRemoveExternalRouteNotEnabled)
315 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
316 EXPECT_EQ(THREAD_ERROR_NOT_ENABLED,
317 thread_br_remove_external_route(instance, routeInfo));
320 TEST_F(ThreadBRTest, BRRemoveExternalRouteErrorNone)
322 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
323 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
324 EXPECT_EQ(THREAD_ERROR_NONE,
325 thread_br_add_external_route(instance, ipv6Prefix, ipv6PrefixLen,
326 rloc16, preference, isStable, isDeviceNextHop, &routeInfo));
327 EXPECT_EQ(THREAD_ERROR_NONE,
328 thread_br_remove_external_route(instance, routeInfo));
331 TEST_F(ThreadBRTest, BRCreateOnmeshPrefixErrorNone)
333 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
334 EXPECT_EQ(THREAD_ERROR_NONE,
335 thread_onmesh_prefix_create(instance, &onmeshPrefix));
338 TEST_F(ThreadBRTest, BRDestroyOnmeshPrefixErrorNone)
340 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
341 EXPECT_EQ(THREAD_ERROR_NONE,
342 thread_onmesh_prefix_create(instance, &onmeshPrefix));
343 EXPECT_EQ(THREAD_ERROR_NONE,
344 thread_onmesh_prefix_destroy(instance, onmeshPrefix));
347 TEST_F(ThreadBRTest, BRSetOnmeshIpv6PrefixErrorNone)
349 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
350 EXPECT_EQ(THREAD_ERROR_NONE,
351 thread_onmesh_prefix_create(instance, &onmeshPrefix));
352 EXPECT_EQ(THREAD_ERROR_NONE,
353 thread_onmesh_prefix_set_ipv6_prefix(onmeshPrefix,
354 onmeshIpv6Prefix, onmeshIpv6PrefixLen));
357 TEST_F(ThreadBRTest, BRGetOnmeshIpv6PrefixErrorNone)
359 uint8_t *ipv6Prefix = NULL;
360 uint8_t ipv6PrefixLen;
362 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
363 EXPECT_EQ(THREAD_ERROR_NONE,
364 thread_onmesh_prefix_create(instance, &onmeshPrefix));
365 EXPECT_EQ(THREAD_ERROR_NONE,
366 thread_onmesh_prefix_set_ipv6_prefix(onmeshPrefix,
367 onmeshIpv6Prefix, onmeshIpv6PrefixLen));
368 EXPECT_EQ(THREAD_ERROR_NONE,
369 thread_onmesh_prefix_get_ipv6_prefix(onmeshPrefix,
370 &ipv6Prefix, &ipv6PrefixLen));
374 TEST_F(ThreadBRTest, BRSetOnmeshPreferenceErrorNone)
376 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
377 EXPECT_EQ(THREAD_ERROR_NONE,
378 thread_onmesh_prefix_create(instance, &onmeshPrefix));
379 EXPECT_EQ(THREAD_ERROR_NONE,
380 thread_onmesh_prefix_set_preference(onmeshPrefix, preference));
383 TEST_F(ThreadBRTest, BRGetOnmeshPreferenceErrorNone)
385 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
386 EXPECT_EQ(THREAD_ERROR_NONE,
387 thread_onmesh_prefix_create(instance, &onmeshPrefix));
388 EXPECT_EQ(THREAD_ERROR_NONE,
389 thread_onmesh_prefix_set_preference(onmeshPrefix, preference));
390 EXPECT_EQ(THREAD_ERROR_NONE,
391 thread_onmesh_prefix_get_preference(onmeshPrefix, &preference));
394 TEST_F(ThreadBRTest, BRSetOnmeshRlocErrorNone)
396 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
397 EXPECT_EQ(THREAD_ERROR_NONE,
398 thread_onmesh_prefix_create(instance, &onmeshPrefix));
399 EXPECT_EQ(THREAD_ERROR_NONE,
400 thread_onmesh_prefix_set_rloc(onmeshPrefix, rloc16));
403 TEST_F(ThreadBRTest, BRGetOnmeshRlocErrorNone)
405 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
406 EXPECT_EQ(THREAD_ERROR_NONE,
407 thread_onmesh_prefix_create(instance, &onmeshPrefix));
408 EXPECT_EQ(THREAD_ERROR_NONE,
409 thread_onmesh_prefix_set_rloc(onmeshPrefix, rloc16));
410 EXPECT_EQ(THREAD_ERROR_NONE,
411 thread_onmesh_prefix_get_rloc(onmeshPrefix, &rloc16));
414 TEST_F(ThreadBRTest, BRSetOnmeshPreferredErrorNone)
416 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
417 EXPECT_EQ(THREAD_ERROR_NONE,
418 thread_onmesh_prefix_create(instance, &onmeshPrefix));
419 EXPECT_EQ(THREAD_ERROR_NONE,
420 thread_onmesh_prefix_set_preferred(onmeshPrefix, preferred));
423 TEST_F(ThreadBRTest, BRGetOnmeshPreferredErrorNone)
425 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
426 EXPECT_EQ(THREAD_ERROR_NONE,
427 thread_onmesh_prefix_create(instance, &onmeshPrefix));
428 EXPECT_EQ(THREAD_ERROR_NONE,
429 thread_onmesh_prefix_set_preferred(onmeshPrefix, preferred));
430 EXPECT_EQ(THREAD_ERROR_NONE,
431 thread_onmesh_prefix_get_preferred(onmeshPrefix, &preferred));
434 TEST_F(ThreadBRTest, BRSetOnmeshSlaacErrorNone)
436 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
437 EXPECT_EQ(THREAD_ERROR_NONE,
438 thread_onmesh_prefix_create(instance, &onmeshPrefix));
439 EXPECT_EQ(THREAD_ERROR_NONE,
440 thread_onmesh_prefix_set_slaac(onmeshPrefix, slaac));
443 TEST_F(ThreadBRTest, BRGetOnmeshSlaacErrorNone)
445 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
446 EXPECT_EQ(THREAD_ERROR_NONE,
447 thread_onmesh_prefix_create(instance, &onmeshPrefix));
448 EXPECT_EQ(THREAD_ERROR_NONE,
449 thread_onmesh_prefix_set_slaac(onmeshPrefix, slaac));
450 EXPECT_EQ(THREAD_ERROR_NONE,
451 thread_onmesh_prefix_get_slaac(onmeshPrefix, &slaac));
454 TEST_F(ThreadBRTest, BRSetOnmeshDhcpErrorNone)
456 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
457 EXPECT_EQ(THREAD_ERROR_NONE,
458 thread_onmesh_prefix_create(instance, &onmeshPrefix));
459 EXPECT_EQ(THREAD_ERROR_NONE,
460 thread_onmesh_prefix_set_dhcp(onmeshPrefix, dhcp));
463 TEST_F(ThreadBRTest, BRGetOnmeshDhcpErrorNone)
465 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
466 EXPECT_EQ(THREAD_ERROR_NONE,
467 thread_onmesh_prefix_create(instance, &onmeshPrefix));
468 EXPECT_EQ(THREAD_ERROR_NONE,
469 thread_onmesh_prefix_set_dhcp(onmeshPrefix, dhcp));
470 EXPECT_EQ(THREAD_ERROR_NONE,
471 thread_onmesh_prefix_get_dhcp(onmeshPrefix, &dhcp));
474 TEST_F(ThreadBRTest, BRSetOnmeshConfigureErrorNone)
476 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
477 EXPECT_EQ(THREAD_ERROR_NONE,
478 thread_onmesh_prefix_create(instance, &onmeshPrefix));
479 EXPECT_EQ(THREAD_ERROR_NONE,
480 thread_onmesh_prefix_set_configure(onmeshPrefix, configure));
483 TEST_F(ThreadBRTest, BRGetOnmeshConfigureErrorNone)
485 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
486 EXPECT_EQ(THREAD_ERROR_NONE,
487 thread_onmesh_prefix_create(instance, &onmeshPrefix));
488 EXPECT_EQ(THREAD_ERROR_NONE,
489 thread_onmesh_prefix_set_configure(onmeshPrefix, configure));
490 EXPECT_EQ(THREAD_ERROR_NONE,
491 thread_onmesh_prefix_get_configure(onmeshPrefix, &configure));
494 TEST_F(ThreadBRTest, BRSetOnmeshDefaultRouteErrorNone)
496 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
497 EXPECT_EQ(THREAD_ERROR_NONE,
498 thread_onmesh_prefix_create(instance, &onmeshPrefix));
499 EXPECT_EQ(THREAD_ERROR_NONE,
500 thread_onmesh_prefix_set_default_route(onmeshPrefix, defaultRoute));
503 TEST_F(ThreadBRTest, BRGetOnmeshDefaultRouteErrorNone)
505 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
506 EXPECT_EQ(THREAD_ERROR_NONE,
507 thread_onmesh_prefix_create(instance, &onmeshPrefix));
508 EXPECT_EQ(THREAD_ERROR_NONE,
509 thread_onmesh_prefix_set_default_route(onmeshPrefix, defaultRoute));
510 EXPECT_EQ(THREAD_ERROR_NONE,
511 thread_onmesh_prefix_get_default_route(onmeshPrefix, &defaultRoute));
514 TEST_F(ThreadBRTest, BRSetOnmeshOnMeshErrorNone)
516 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
517 EXPECT_EQ(THREAD_ERROR_NONE,
518 thread_onmesh_prefix_create(instance, &onmeshPrefix));
519 EXPECT_EQ(THREAD_ERROR_NONE,
520 thread_onmesh_prefix_set_on_mesh(onmeshPrefix, onMesh));
523 TEST_F(ThreadBRTest, BRGetOnmeshOnMeshErrorNone)
525 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
526 EXPECT_EQ(THREAD_ERROR_NONE,
527 thread_onmesh_prefix_create(instance, &onmeshPrefix));
528 EXPECT_EQ(THREAD_ERROR_NONE,
529 thread_onmesh_prefix_set_on_mesh(onmeshPrefix, onMesh));
530 EXPECT_EQ(THREAD_ERROR_NONE,
531 thread_onmesh_prefix_get_on_mesh(onmeshPrefix, &onMesh));
534 TEST_F(ThreadBRTest, BRSetOnmeshStableErrorNone)
536 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
537 EXPECT_EQ(THREAD_ERROR_NONE,
538 thread_onmesh_prefix_create(instance, &onmeshPrefix));
539 EXPECT_EQ(THREAD_ERROR_NONE,
540 thread_onmesh_prefix_set_stable(onmeshPrefix, stable));
543 TEST_F(ThreadBRTest, BRGetOnmeshStableErrorNone)
545 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
546 EXPECT_EQ(THREAD_ERROR_NONE,
547 thread_onmesh_prefix_create(instance, &onmeshPrefix));
548 EXPECT_EQ(THREAD_ERROR_NONE,
549 thread_onmesh_prefix_set_stable(onmeshPrefix, stable));
550 EXPECT_EQ(THREAD_ERROR_NONE,
551 thread_onmesh_prefix_get_stable(onmeshPrefix, &stable));
554 TEST_F(ThreadBRTest, BRSetOnmeshNdDnsErrorNone)
556 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
557 EXPECT_EQ(THREAD_ERROR_NONE,
558 thread_onmesh_prefix_create(instance, &onmeshPrefix));
559 EXPECT_EQ(THREAD_ERROR_NONE,
560 thread_onmesh_prefix_set_nd_dns(onmeshPrefix, ndDns));
563 TEST_F(ThreadBRTest, BRGetOnmeshNdDnsErrorNone)
565 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
566 EXPECT_EQ(THREAD_ERROR_NONE,
567 thread_onmesh_prefix_create(instance, &onmeshPrefix));
568 EXPECT_EQ(THREAD_ERROR_NONE,
569 thread_onmesh_prefix_set_nd_dns(onmeshPrefix, ndDns));
570 EXPECT_EQ(THREAD_ERROR_NONE,
571 thread_onmesh_prefix_get_nd_dns(onmeshPrefix, &ndDns));
574 TEST_F(ThreadBRTest, BRSetOnmeshDpErrorNone)
576 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
577 EXPECT_EQ(THREAD_ERROR_NONE,
578 thread_onmesh_prefix_create(instance, &onmeshPrefix));
579 EXPECT_EQ(THREAD_ERROR_NONE,
580 thread_onmesh_prefix_set_dp(onmeshPrefix, dp));
583 TEST_F(ThreadBRTest, BRGetOnmeshDpErrorNone)
585 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
586 EXPECT_EQ(THREAD_ERROR_NONE,
587 thread_onmesh_prefix_create(instance, &onmeshPrefix));
588 EXPECT_EQ(THREAD_ERROR_NONE,
589 thread_onmesh_prefix_set_dp(onmeshPrefix, dp));
590 EXPECT_EQ(THREAD_ERROR_NONE,
591 thread_onmesh_prefix_get_dp(onmeshPrefix, &dp));
594 TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotInitialized)
596 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
597 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED,
598 thread_br_add_onmesh_prefix(instance, onmeshPrefix));
601 TEST_F(ThreadBRTest, BRAddOnmeshPrefixInvalidParameter)
603 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER,
604 thread_br_add_onmesh_prefix(instance, onmeshPrefix));
607 TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotEnabled)
609 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
610 EXPECT_EQ(THREAD_ERROR_NOT_ENABLED,
611 thread_br_add_onmesh_prefix(instance, onmeshPrefix));
614 TEST_F(ThreadBRTest, BRAddOnmeshPrefixErrorNone)
616 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
617 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
618 EXPECT_EQ(THREAD_ERROR_NONE,
619 thread_onmesh_prefix_create(instance, &onmeshPrefix));
620 EXPECT_EQ(THREAD_ERROR_NONE,
621 thread_br_add_onmesh_prefix(instance, onmeshPrefix));
624 TEST_F(ThreadBRTest, BRGetOnmeshPrefixesNotInitialized)
626 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
627 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED,
628 thread_br_get_onmesh_prefixes(instance,
629 GetOnmeshPrefixesCallback, nullptr));
632 TEST_F(ThreadBRTest, BRGetOnmeshPrefixesInvalidParameter)
634 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER,
635 thread_br_get_onmesh_prefixes(instance,
636 GetOnmeshPrefixesCallback, nullptr));
639 TEST_F(ThreadBRTest, BRGetOnmeshPrefixesNotEnabled)
641 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
642 EXPECT_EQ(THREAD_ERROR_NOT_ENABLED,
643 thread_br_get_onmesh_prefixes(instance,
644 GetOnmeshPrefixesCallback, nullptr));
647 TEST_F(ThreadBRTest, BRGetOnmeshPrefixesErrorNone)
649 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
650 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
651 EXPECT_EQ(THREAD_ERROR_NONE,
652 thread_br_get_onmesh_prefixes(instance,
653 GetOnmeshPrefixesCallback, nullptr));
656 TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixNotInitialized)
658 EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());
659 EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED,
660 thread_br_remove_onmesh_prefix(instance, onmeshPrefix));
663 TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixInvalidParameter)
665 EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER,
666 thread_br_remove_onmesh_prefix(instance, onmeshPrefix));
669 TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixNotEnabled)
671 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
672 EXPECT_EQ(THREAD_ERROR_NOT_ENABLED,
673 thread_br_remove_onmesh_prefix(instance, onmeshPrefix));
676 TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixErrorNone)
678 EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
679 EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
680 EXPECT_EQ(THREAD_ERROR_NONE,
681 thread_onmesh_prefix_create(instance, &onmeshPrefix));
682 EXPECT_EQ(THREAD_ERROR_NONE,
683 thread_br_add_onmesh_prefix(instance, onmeshPrefix));
684 EXPECT_EQ(THREAD_ERROR_NONE,
685 thread_br_remove_onmesh_prefix(instance, onmeshPrefix));