[mle] update number parent requests in an attach cycle (#7538)
This commit updates the MLE attach process so that in the first attach cycle device tries a total of six MLE Parent Requests, the first two to routers only followed by four to routers and REEDs. For example, the six Parent Request message will be used before device can decide to act the leader. An MTD in the next attach attempt (if cannot find a parent in first attempt cycle), will go to the model of two Parent Requests (first to routers, then to routers/REEDs). This change impacts the time it takes for a device to start as leader (due to increased number of Parent Request and wait time). This commit updates different test scripts to address the change in the wait time. It adds a new `config.LEADER_STARTUP_DELAY` constants which is used for wait time for leader to start.
This commit is contained in:
parent
b71c1590c1
commit
5d09e9ca4f
|
@ -83,7 +83,7 @@ send "ifconfig up\r\n"
|
|||
expect "Done"
|
||||
send "thread start\r\n"
|
||||
expect "Done"
|
||||
sleep 5
|
||||
sleep 10
|
||||
send "state\r\n"
|
||||
expect "leader"
|
||||
expect "Done"
|
||||
|
|
|
@ -182,7 +182,7 @@ send "ifconfig up\r\n"
|
|||
expect "Done"
|
||||
send "thread start\r\n"
|
||||
expect "Done"
|
||||
sleep 5
|
||||
sleep 10
|
||||
send "state\r\n"
|
||||
expect "leader"
|
||||
expect "Done"
|
||||
|
@ -207,7 +207,7 @@ EOF
|
|||
sleep 5
|
||||
|
||||
# wait until the node becomes leader
|
||||
timeout_run 5 wait_for_leader
|
||||
timeout_run 10 wait_for_leader
|
||||
|
||||
# wait coap service start
|
||||
sleep 5
|
||||
|
|
|
@ -1282,10 +1282,64 @@ void Mle::HandleAttachTimer(Timer &aTimer)
|
|||
aTimer.Get<Mle>().HandleAttachTimer();
|
||||
}
|
||||
|
||||
Error Mle::DetermineParentRequestType(ParentRequestType &aType) const
|
||||
{
|
||||
// This method determines the Parent Request type to use during an
|
||||
// attach cycle based on `mAttachMode`, `mAttachCounter` and
|
||||
// `mParentRequestCounter`. This method MUST be used while in
|
||||
// `kAttachStateParentRequest` state.
|
||||
//
|
||||
// On success it returns `kErrorNone` and sets `aType`. It returns
|
||||
// `kErrorNotFound` to indicate that device can now transition
|
||||
// from `kAttachStateParentRequest` state (has already sent the
|
||||
// required number of Parent Requests for this attach attempt
|
||||
// cycle).
|
||||
|
||||
Error error = kErrorNone;
|
||||
|
||||
OT_ASSERT(mAttachState == kAttachStateParentRequest);
|
||||
|
||||
aType = kToRoutersAndReeds;
|
||||
|
||||
// If device is not yet attached, `mAttachCounter` will track the
|
||||
// number of attach attempt cycles so far, starting from one for
|
||||
// the first attempt. `mAttachCounter` will be zero if device is
|
||||
// already attached. Examples of this situation include a leader or
|
||||
// router trying to attach to a better partition, or a child trying
|
||||
// to find a better parent.
|
||||
|
||||
if ((mAttachCounter <= 1) && (mAttachMode != kBetterParent))
|
||||
{
|
||||
VerifyOrExit(mParentRequestCounter <= kFirstAttachCycleTotalParentRequests, error = kErrorNotFound);
|
||||
|
||||
// During reattach to the same partition all the Parent
|
||||
// Request are sent to Routers and REEDs.
|
||||
|
||||
if ((mAttachMode != kSamePartition) && (mAttachMode != kSamePartitionRetry) &&
|
||||
(mParentRequestCounter <= kFirstAttachCycleNumParentRequestToRouters))
|
||||
{
|
||||
aType = kToRouters;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VerifyOrExit(mParentRequestCounter <= kNextAttachCycleTotalParentRequests, error = kErrorNotFound);
|
||||
|
||||
if (mParentRequestCounter <= kNextAttachCycleNumParentRequestToRouters)
|
||||
{
|
||||
aType = kToRouters;
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
bool Mle::HasAcceptableParentCandidate(void) const
|
||||
{
|
||||
bool hasAcceptableParent = false;
|
||||
LinkQuality linkQuality;
|
||||
bool hasAcceptableParent = false;
|
||||
LinkQuality linkQuality;
|
||||
ParentRequestType parentReqType;
|
||||
|
||||
VerifyOrExit(mParentCandidate.IsStateParentResponse());
|
||||
|
||||
|
@ -1295,16 +1349,19 @@ bool Mle::HasAcceptableParentCandidate(void) const
|
|||
VerifyOrExit(!HasMoreChannelsToAnnouce());
|
||||
break;
|
||||
|
||||
case kAttachStateParentRequestRouter:
|
||||
// If we cannot find a parent with best link quality (3) when
|
||||
// in `kAttachStateParentRequestRouter` state we will keep the
|
||||
// candidate and forward to REED stage to potentially find a
|
||||
// better parent.
|
||||
linkQuality = OT_MIN(mParentCandidate.GetLinkInfo().GetLinkQuality(), mParentCandidate.GetLinkQualityOut());
|
||||
VerifyOrExit(linkQuality == kLinkQuality3);
|
||||
break;
|
||||
case kAttachStateParentRequest:
|
||||
SuccessOrAssert(DetermineParentRequestType(parentReqType));
|
||||
|
||||
if (parentReqType == kToRouters)
|
||||
{
|
||||
// If we cannot find a parent with best link quality (3) when
|
||||
// in Parent Request was sent to routers, we will keep the
|
||||
// candidate and forward to REED stage to potentially find a
|
||||
// better parent.
|
||||
linkQuality = OT_MIN(mParentCandidate.GetLinkInfo().GetLinkQuality(), mParentCandidate.GetLinkQualityOut());
|
||||
VerifyOrExit(linkQuality == kLinkQuality3);
|
||||
}
|
||||
|
||||
case kAttachStateParentRequestReed:
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1331,8 +1388,9 @@ exit:
|
|||
|
||||
void Mle::HandleAttachTimer(void)
|
||||
{
|
||||
uint32_t delay = 0;
|
||||
bool shouldAnnounce = true;
|
||||
uint32_t delay = 0;
|
||||
bool shouldAnnounce = true;
|
||||
ParentRequestType type;
|
||||
|
||||
// First, check if we are waiting to receive parent responses and
|
||||
// found an acceptable parent candidate.
|
||||
|
@ -1355,46 +1413,26 @@ void Mle::HandleAttachTimer(void)
|
|||
break;
|
||||
|
||||
case kAttachStateStart:
|
||||
if (mAttachCounter > 0)
|
||||
{
|
||||
LogNote("Attempt to attach - attempt %d, %s %s", mAttachCounter, AttachModeToString(mAttachMode),
|
||||
ReattachStateToString(mReattachState));
|
||||
}
|
||||
else
|
||||
{
|
||||
LogNote("Attempt to attach - %s %s", AttachModeToString(mAttachMode),
|
||||
ReattachStateToString(mReattachState));
|
||||
}
|
||||
LogNote("Attach attempt %d, %s %s", mAttachCounter, AttachModeToString(mAttachMode),
|
||||
ReattachStateToString(mReattachState));
|
||||
|
||||
SetAttachState(kAttachStateParentRequestRouter);
|
||||
SetAttachState(kAttachStateParentRequest);
|
||||
mParentCandidate.SetState(Neighbor::kStateInvalid);
|
||||
mReceivedResponseFromParent = false;
|
||||
mParentRequestCounter = 0;
|
||||
Get<MeshForwarder>().SetRxOnWhenIdle(true);
|
||||
|
||||
// initial MLE Parent Request has both E and R flags set in Scan Mask TLV
|
||||
// during reattach when losing connectivity.
|
||||
if (mAttachMode == kSamePartition || mAttachMode == kSamePartitionRetry)
|
||||
OT_FALL_THROUGH;
|
||||
|
||||
case kAttachStateParentRequest:
|
||||
mParentRequestCounter++;
|
||||
if (DetermineParentRequestType(type) == kErrorNone)
|
||||
{
|
||||
SendParentRequest(kToRoutersAndReeds);
|
||||
delay = kParentRequestReedTimeout;
|
||||
}
|
||||
// initial MLE Parent Request has only R flag set in Scan Mask TLV for
|
||||
// during initial attach or downgrade process
|
||||
else
|
||||
{
|
||||
SendParentRequest(kToRouters);
|
||||
delay = kParentRequestRouterTimeout;
|
||||
SendParentRequest(type);
|
||||
delay = (type == kToRouters) ? kParentRequestRouterTimeout : kParentRequestReedTimeout;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case kAttachStateParentRequestRouter:
|
||||
SetAttachState(kAttachStateParentRequestReed);
|
||||
SendParentRequest(kToRoutersAndReeds);
|
||||
delay = kParentRequestReedTimeout;
|
||||
break;
|
||||
|
||||
case kAttachStateParentRequestReed:
|
||||
shouldAnnounce = PrepareAnnounceState();
|
||||
|
||||
if (shouldAnnounce)
|
||||
|
@ -4199,22 +4237,20 @@ const char *Mle::AttachModeToString(AttachMode aMode)
|
|||
const char *Mle::AttachStateToString(AttachState aState)
|
||||
{
|
||||
static const char *const kAttachStateStrings[] = {
|
||||
"Idle", // (0) kAttachStateIdle
|
||||
"ProcessAnnounce", // (1) kAttachStateProcessAnnounce
|
||||
"Start", // (2) kAttachStateStart
|
||||
"ParentReqRouters", // (3) kAttachStateParentRequestRouter
|
||||
"ParentReqReeds", // (4) kAttachStateParentRequestReed
|
||||
"Announce", // (5) kAttachStateAnnounce
|
||||
"ChildIdReq", // (6) kAttachStateChildIdRequest
|
||||
"Idle", // (0) kAttachStateIdle
|
||||
"ProcessAnnounce", // (1) kAttachStateProcessAnnounce
|
||||
"Start", // (2) kAttachStateStart
|
||||
"ParentReq", // (3) kAttachStateParent
|
||||
"Announce", // (4) kAttachStateAnnounce
|
||||
"ChildIdReq", // (5) kAttachStateChildIdRequest
|
||||
};
|
||||
|
||||
static_assert(kAttachStateIdle == 0, "kAttachStateIdle value is incorrect");
|
||||
static_assert(kAttachStateProcessAnnounce == 1, "kAttachStateProcessAnnounce value is incorrect");
|
||||
static_assert(kAttachStateStart == 2, "kAttachStateStart value is incorrect");
|
||||
static_assert(kAttachStateParentRequestRouter == 3, "kAttachStateParentRequestRouter value is incorrect");
|
||||
static_assert(kAttachStateParentRequestReed == 4, "kAttachStateParentRequestReed value is incorrect");
|
||||
static_assert(kAttachStateAnnounce == 5, "kAttachStateAnnounce value is incorrect");
|
||||
static_assert(kAttachStateChildIdRequest == 6, "kAttachStateChildIdRequest value is incorrect");
|
||||
static_assert(kAttachStateParentRequest == 3, "kAttachStateParentRequest value is incorrect");
|
||||
static_assert(kAttachStateAnnounce == 4, "kAttachStateAnnounce value is incorrect");
|
||||
static_assert(kAttachStateChildIdRequest == 5, "kAttachStateChildIdRequest value is incorrect");
|
||||
|
||||
return kAttachStateStrings[aState];
|
||||
}
|
||||
|
|
|
@ -812,13 +812,12 @@ protected:
|
|||
*/
|
||||
enum AttachState : uint8_t
|
||||
{
|
||||
kAttachStateIdle, ///< Not currently searching for a parent.
|
||||
kAttachStateProcessAnnounce, ///< Waiting to process a received Announce (to switch channel/pan-id).
|
||||
kAttachStateStart, ///< Starting to look for a parent.
|
||||
kAttachStateParentRequestRouter, ///< Searching for a Router to attach to.
|
||||
kAttachStateParentRequestReed, ///< Searching for Routers or REEDs to attach to.
|
||||
kAttachStateAnnounce, ///< Send Announce messages
|
||||
kAttachStateChildIdRequest, ///< Sending a Child ID Request message.
|
||||
kAttachStateIdle, ///< Not currently searching for a parent.
|
||||
kAttachStateProcessAnnounce, ///< Waiting to process a received Announce (to switch channel/pan-id).
|
||||
kAttachStateStart, ///< Starting to look for a parent.
|
||||
kAttachStateParentRequest, ///< Send Parent Request (current number tracked by `mParentRequestCounter`).
|
||||
kAttachStateAnnounce, ///< Send Announce messages
|
||||
kAttachStateChildIdRequest, ///< Sending a Child ID Request message.
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1698,7 +1697,8 @@ protected:
|
|||
Router mParentCandidate; ///< Parent candidate information.
|
||||
NeighborTable mNeighborTable; ///< The neighbor table.
|
||||
DeviceMode mDeviceMode; ///< Device mode setting.
|
||||
AttachState mAttachState; ///< The parent request state.
|
||||
AttachState mAttachState; ///< The attach state.
|
||||
uint8_t mParentRequestCounter; ///< Number of parent requests while in `kAttachStateParentRequest`.
|
||||
ReattachState mReattachState; ///< Reattach state
|
||||
uint16_t mAttachCounter; ///< Attach attempt counter.
|
||||
uint16_t mAnnounceDelay; ///< Delay in between sending Announce messages during attach.
|
||||
|
@ -1731,6 +1731,20 @@ private:
|
|||
static constexpr uint32_t kAttachBackoffDelayToResetCounter =
|
||||
OPENTHREAD_CONFIG_MLE_ATTACH_BACKOFF_DELAY_TO_RESET_BACKOFF_INTERVAL;
|
||||
|
||||
#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_3
|
||||
// First attach cycle includes two Parent Requests to routers, followed by four to routers and REEDs.
|
||||
static constexpr uint8_t kFirstAttachCycleTotalParentRequests = 6;
|
||||
static constexpr uint8_t kFirstAttachCycleNumParentRequestToRouters = 2;
|
||||
#else
|
||||
// First attach cycle in Thread 1.1/1.2 includes a Parent Requests to routers, followed by one to routers and REEDs.
|
||||
static constexpr uint8_t kFirstAttachCycleTotalParentRequests = 2;
|
||||
static constexpr uint8_t kFirstAttachCycleNumParentRequestToRouters = 1;
|
||||
#endif
|
||||
|
||||
// Next attach cycles includes one Parent Request to routers, followed by one to routers and REEDs.
|
||||
static constexpr uint8_t kNextAttachCycleTotalParentRequests = 2;
|
||||
static constexpr uint8_t kNextAttachCycleNumParentRequestToRouters = 1;
|
||||
|
||||
enum StartMode : uint8_t // Used in `Start()`.
|
||||
{
|
||||
kNormalAttach,
|
||||
|
@ -1887,6 +1901,7 @@ private:
|
|||
#endif
|
||||
uint32_t Reattach(void);
|
||||
bool HasAcceptableParentCandidate(void) const;
|
||||
Error DetermineParentRequestType(ParentRequestType &aType) const;
|
||||
|
||||
bool IsBetterParent(uint16_t aRloc16,
|
||||
LinkQuality aLinkQuality,
|
||||
|
|
|
@ -38,7 +38,7 @@ setup_leader
|
|||
setup_node 3 "rdn" "router"
|
||||
setup_node 2 "rdn" "router"
|
||||
|
||||
sleep 2
|
||||
sleep 15
|
||||
|
||||
###########################################
|
||||
# Verify topology and commissioners
|
||||
|
|
|
@ -38,7 +38,7 @@ expect_line "Done"
|
|||
send "thread start\n"
|
||||
expect_line "Done"
|
||||
|
||||
sleep 3
|
||||
sleep 10
|
||||
|
||||
send "reset\n"
|
||||
sleep 3
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_5_1_01_RouterAttach(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -93,7 +93,7 @@ class Cert_5_1_02_ChildAddressTimeout(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -81,7 +81,7 @@ class Cert_5_1_03_RouterAddressReallocation(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -83,7 +83,7 @@ class Cert_5_1_04_RouterAddressReallocation(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -79,7 +79,7 @@ class Cert_5_1_05_RouterAddressTimeout(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_5_1_06_RemoveRouterId(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -152,7 +152,7 @@ class Cert_5_1_07_MaxChildCount(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -93,7 +93,7 @@ class Cert_5_1_08_RouterAttachConnectivity(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 5):
|
||||
|
|
|
@ -95,7 +95,7 @@ class Cert_5_1_09_REEDAttachConnectivity(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 5):
|
||||
|
|
|
@ -87,7 +87,7 @@ class Cert_5_1_10_RouterAttachLinkQuality(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -89,7 +89,7 @@ class Cert_5_1_11_REEDAttachLinkQuality(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[REED].start()
|
||||
|
|
|
@ -78,7 +78,7 @@ class Cert_5_1_12_NewRouterSync(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -80,7 +80,7 @@ class Cert_5_1_13_RouterReset(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -92,7 +92,7 @@ class Cert_5_2_01_REEDAttach(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
|
|
|
@ -311,7 +311,7 @@ class Cert_5_2_3_LeaderReject2Hops(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 32):
|
||||
|
|
|
@ -169,7 +169,7 @@ class Cert_5_2_4_REEDUpgrade(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 17):
|
||||
|
|
|
@ -177,7 +177,7 @@ class Cert_5_2_5_AddressQuery(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1. LEADER: DHCPv6 Server for prefix 2001::/64.
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
self.nodes[LEADER].add_prefix('2001::/64', 'pdros')
|
||||
self.nodes[LEADER].register_netdata()
|
||||
|
|
|
@ -211,7 +211,7 @@ class Cert_5_2_06_RouterDowngrade(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1 Ensure topology is formed correctly without ROUTER23.
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 24):
|
||||
|
|
|
@ -146,7 +146,7 @@ class Cert_5_2_7_REEDSynchronization_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 17):
|
||||
|
|
|
@ -71,7 +71,7 @@ class Cert_5_3_1_LinkLocal(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
|
|
|
@ -89,7 +89,7 @@ class Cert_5_3_2_RealmLocal(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -96,7 +96,7 @@ class Cert_5_3_3_AddressQuery(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -113,7 +113,7 @@ class Cert_5_3_4_AddressMapCache(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
|
|
|
@ -86,7 +86,7 @@ class Cert_5_3_5_RoutingLinkQuality(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for router in range(DUT_ROUTER1, ROUTER3 + 1):
|
||||
|
|
|
@ -86,7 +86,7 @@ class Cert_5_3_6_RouterIdMask(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -111,7 +111,7 @@ class Cert_5_3_7_DuplicateAddress(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(ROUTER1, MED2 + 1):
|
||||
|
|
|
@ -96,7 +96,7 @@ class Cert_5_3_8_ChildAddressSet(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[BR].start()
|
||||
|
|
|
@ -109,7 +109,7 @@ class Cert_5_3_09_AddressQuery(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1 & 2 ALL: Build and verify the topology
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
# Configure the LEADER to be a DHCPv6 Border Router for prefixes
|
||||
|
|
|
@ -109,7 +109,7 @@ class Cert_5_3_10_AddressQuery(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1 & 2
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[BR].start()
|
||||
|
|
|
@ -85,7 +85,7 @@ class Cert_5_3_11_AddressQueryTimeoutIntervals(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
|
|
|
@ -79,7 +79,7 @@ class Cert_5_5_1_LeaderReboot(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[DUT_LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[DUT_ROUTER1].start()
|
||||
|
@ -97,7 +97,7 @@ class Cert_5_5_1_LeaderReboot(thread_cert.TestCase):
|
|||
|
||||
self.nodes[DUT_LEADER].start()
|
||||
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[DUT_LEADER].get_addr16(), leader_rloc16)
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ class Cert_5_5_2_LeaderReboot(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
@ -80,7 +80,7 @@ class Cert_5_5_2_LeaderReboot(thread_cert.TestCase):
|
|||
|
||||
self.nodes[LEADER].reset()
|
||||
self._setUpLeader()
|
||||
self.simulator.go(140)
|
||||
self.simulator.go(150)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].start()
|
||||
|
|
|
@ -85,7 +85,7 @@ class Cert_5_5_3_SplitMergeChildren(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
@ -108,7 +108,7 @@ class Cert_5_5_3_SplitMergeChildren(thread_cert.TestCase):
|
|||
self._setUpLeader()
|
||||
self.nodes[ROUTER2].set_preferred_partition_id(0xffffffff)
|
||||
|
||||
self.simulator.go(140)
|
||||
self.simulator.go(150)
|
||||
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER2].get_state(), 'leader')
|
||||
|
|
|
@ -78,7 +78,7 @@ class Cert_5_5_4_SplitMergeRouters(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -121,7 +121,7 @@ class Cert_5_5_5_SplitMergeREED(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(ROUTER2, ROUTER15 + 1):
|
||||
|
|
|
@ -73,7 +73,7 @@ class Cert_5_5_7_SplitMergeThreeWay(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER1].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_5_6_1_NetworkDataLeaderAsBr(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_prefix('2001:2:0:1::/64', 'paros')
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_5_6_2_NetworkDataRouterAsBr(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_5_6_3_NetworkDataRegisterAfterAttachLeader(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_5_6_4_NetworkDataRegisterAfterAttachRouter(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_5_6_5_NetworkDataRegisterAfterAttachRouter(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_5_6_6_NetworkDataExpiration(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -120,7 +120,7 @@ class Cert_5_6_7_NetworkDataRequestREED(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(ROUTER1, ROUTER15 + 1):
|
||||
|
|
|
@ -78,7 +78,7 @@ class Cert_5_6_9_NetworkDataForwarding(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -110,7 +110,7 @@ class Cert_5_7_01_CoapDiagCommands_Base(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1 - Form topology
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -159,7 +159,7 @@ class Cert_5_7_02_CoapDiagCommands(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1 - Form topology
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 17):
|
||||
|
|
|
@ -104,7 +104,7 @@ class Cert_5_7_03_CoapDiagCommands_Base(thread_cert.TestCase):
|
|||
def test(self):
|
||||
# 1 - Form topology
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -56,7 +56,7 @@ class Cert_5_8_2_KeyIncrement(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), "leader")
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -57,7 +57,7 @@ class Cert_5_8_3_KeyIncrementRollOver(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(4)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -112,7 +112,7 @@ class Cert_5_8_04_SecurityPolicyTLV(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER_1].start()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_6_1_1_RouterAttach_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
|
|
|
@ -84,7 +84,7 @@ class Cert_6_1_2_REEDAttach_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[REED].start()
|
||||
|
|
|
@ -73,7 +73,7 @@ class Cert_6_1_3_RouterAttachConnectivity(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in range(2, 5):
|
||||
|
|
|
@ -96,7 +96,7 @@ class Cert_6_1_4_REEDAttachConnectivity_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_6_1_5_REEDAttachConnectivity(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
@ -95,6 +95,8 @@ class Cert_6_1_5_REEDAttachConnectivity(thread_cert.TestCase):
|
|||
self.assertEqual(self.nodes[ED].get_state(), 'child')
|
||||
self.assertEqual(self.nodes[REED1].get_state(), 'router')
|
||||
|
||||
self.num_parent_requests = 1 if self.nodes[ED].version in ['1.1', '1.2'] else 2
|
||||
|
||||
self.collect_ipaddrs()
|
||||
addrs = self.nodes[ED].get_addrs()
|
||||
for addr in addrs:
|
||||
|
@ -109,12 +111,14 @@ class Cert_6_1_5_REEDAttachConnectivity(thread_cert.TestCase):
|
|||
_reed1_pkts = pkts.filter_wpan_src64(REED_1)
|
||||
_ed_pkts = pkts.filter_wpan_src64(ED)
|
||||
|
||||
# Step 2: The DUT MUST send a MLE Parent Request to the
|
||||
# Step 2: The DUT MUST send MLE Parent Requests to the
|
||||
# All-Routers multicast address
|
||||
_ed_pkts.filter_mle_cmd(MLE_PARENT_REQUEST).filter_ipv6_dst(
|
||||
LINK_LOCAL_ALL_ROUTERS_MULTICAST_ADDRESS).must_next().must_verify(
|
||||
lambda p: {MODE_TLV, CHALLENGE_TLV, SCAN_MASK_TLV, VERSION_TLV} == set(p.mle.tlv.type
|
||||
) and p.mle.tlv.scan_mask.r == 1)
|
||||
|
||||
for num in range(self.num_parent_requests):
|
||||
_ed_pkts.filter_mle_cmd(MLE_PARENT_REQUEST).filter_ipv6_dst(
|
||||
LINK_LOCAL_ALL_ROUTERS_MULTICAST_ADDRESS).must_next().must_verify(
|
||||
lambda p: {MODE_TLV, CHALLENGE_TLV, SCAN_MASK_TLV, VERSION_TLV} == set(
|
||||
p.mle.tlv.type) and p.mle.tlv.scan_mask.r == 1)
|
||||
|
||||
# Step 3: REED_1 and REED_2 No response to Parent Request
|
||||
# Step 4: DUT Send MLE Parent Request with Scan Mask set to Routers AND REEDs
|
||||
|
|
|
@ -91,7 +91,7 @@ class Cert_6_1_6_REEDAttachLinkQuality_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[REED].start()
|
||||
|
|
|
@ -67,7 +67,7 @@ class Cert_6_1_7_RouterAttachLinkQuality(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -83,7 +83,7 @@ class Cert_6_2_1_NewPartition_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
@ -95,7 +95,7 @@ class Cert_6_2_1_NewPartition_Base(thread_cert.TestCase):
|
|||
self.assertEqual(self.nodes[MTD].get_state(), 'child')
|
||||
|
||||
self.nodes[LEADER].stop()
|
||||
self.simulator.go(140)
|
||||
self.simulator.go(150)
|
||||
self.assertEqual(self.nodes[ROUTER1].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[MTD].get_state(), 'child')
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ class Cert_6_2_2_NewPartition(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER1].start()
|
||||
|
|
|
@ -62,7 +62,7 @@ class Cert_6_3_1_OrphanReattach(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -56,7 +56,7 @@ class Cert_6_3_2_NetworkDataUpdate(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_6_4_1_LinkLocal_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[MTD].start()
|
||||
|
|
|
@ -80,7 +80,7 @@ class Cert_6_4_2_RealmLocal_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -59,7 +59,7 @@ class Cert_6_5_1_ChildResetReattach(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
|
|
|
@ -91,7 +91,7 @@ class Cert_6_5_2_ChildResetReattach_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -60,7 +60,7 @@ class Cert_6_5_3_ChildResetSynchronize(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
|
|
|
@ -57,7 +57,7 @@ class Cert_6_6_1_KeyIncrement(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), "leader")
|
||||
|
||||
self.nodes[ED].start()
|
||||
|
|
|
@ -58,7 +58,7 @@ class Cert_6_6_2_KeyIncrement1(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ED].start()
|
||||
|
|
|
@ -98,7 +98,7 @@ class Cert_7_1_1_BorderRouterAsLeader(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_prefix(PREFIX_2001, 'paros')
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_7_1_2_BorderRouterAsRouter(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -99,7 +99,7 @@ class Cert_7_1_3_BorderRouterAsLeader(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -72,7 +72,7 @@ class Cert_7_1_4_BorderRouterAsRouter(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -97,7 +97,7 @@ class Cert_7_1_5_BorderRouterAsRouter(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -113,7 +113,7 @@ class Cert_7_1_6_BorderRouterAsLeader(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in (2, 3):
|
||||
|
|
|
@ -113,7 +113,7 @@ class Cert_7_1_7_BorderRouterAsLeader(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
for i in (2, 3):
|
||||
|
@ -146,7 +146,7 @@ class Cert_7_1_7_BorderRouterAsLeader(thread_cert.TestCase):
|
|||
|
||||
# Wait for NETWORK_ID_TIMEOUT taking effect
|
||||
# Router_2 creates a new partition
|
||||
self.simulator.go(60)
|
||||
self.simulator.go(80)
|
||||
self.assertEqual(self.nodes[ROUTER_2].get_state(), 'leader')
|
||||
self.nodes[ROUTER_2].remove_domain_prefix(PREFIX_1)
|
||||
self.nodes[ROUTER_2].add_prefix(PREFIX_2, 'paros')
|
||||
|
|
|
@ -92,7 +92,7 @@ class Cert_7_1_8_BorderRouterAsFED(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -78,7 +78,7 @@ class Cert_8_1_01_Commissioning(thread_cert.TestCase):
|
|||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
self.simulator.go(3)
|
||||
|
|
|
@ -57,7 +57,7 @@ class Cert_8_1_02_Commissioning(thread_cert.TestCase):
|
|||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
self.simulator.go(3)
|
||||
|
|
|
@ -77,7 +77,7 @@ class Cert_8_1_06_Commissioning(thread_cert.TestCase):
|
|||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
self.nodes[COMMISSIONER].commissioner_set_provisioning_url(URL_1)
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
|
|
|
@ -63,7 +63,7 @@ class Cert_8_2_01_JoinerRouter(thread_cert.TestCase):
|
|||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
|
|
|
@ -63,7 +63,7 @@ class Cert_8_2_02_JoinerRouter(thread_cert.TestCase):
|
|||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_start()
|
||||
|
|
|
@ -89,7 +89,7 @@ class Cert_8_2_05_JoinerRouter(thread_cert.TestCase):
|
|||
def test(self):
|
||||
self.nodes[COMMISSIONER].interface_up()
|
||||
self.nodes[COMMISSIONER].thread_start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].commissioner_set_provisioning_url(URL_1)
|
||||
|
|
|
@ -78,7 +78,7 @@ class Cert_8_3_01_CommissionerPetition(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
self.nodes[COMMISSIONER].start()
|
||||
self.simulator.go(config.ROUTER_STARTUP_DELAY)
|
||||
|
|
|
@ -74,7 +74,7 @@ class Cert_9_2_01_MGMTCommissionerGet(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_9_2_02_MGMTCommissionerSet(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Cert_9_2_03_ActiveDatasetGet(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -65,7 +65,7 @@ class Cert_9_2_04_ActiveDataset(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -76,7 +76,7 @@ class Cert_9_2_05_ActiveDataset(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
|
|
|
@ -143,7 +143,7 @@ class Cert_9_2_06_DatasetDissemination(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -77,7 +77,7 @@ class Cert_9_2_7_DelayTimer(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
@ -90,12 +90,12 @@ class Cert_9_2_7_DelayTimer(thread_cert.TestCase):
|
|||
self.simulator.go(5)
|
||||
|
||||
self.nodes[ROUTER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'leader')
|
||||
|
||||
self.nodes[LEADER].add_allowlist(self.nodes[ROUTER].get_addr64())
|
||||
self.nodes[ROUTER].add_allowlist(self.nodes[LEADER].get_addr64())
|
||||
self.simulator.go(20)
|
||||
self.simulator.go(35)
|
||||
self.assertEqual(self.nodes[COMMISSIONER].get_state(), 'router')
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
|
||||
|
|
|
@ -111,7 +111,7 @@ class Cert_9_2_8_PersistentDatasets_Base(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -131,7 +131,7 @@ class Cert_9_2_09_PendingPartition(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -100,7 +100,7 @@ class Cert_9_2_10_PendingPartition(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
|
@ -135,7 +135,7 @@ class Cert_9_2_11_NetworkKey(thread_cert.TestCase):
|
|||
|
||||
def test(self):
|
||||
self.nodes[LEADER].start()
|
||||
self.simulator.go(5)
|
||||
self.simulator.go(config.LEADER_STARTUP_DELAY)
|
||||
self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
|
||||
|
||||
self.nodes[COMMISSIONER].start()
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue