@@ -68,35 +68,42 @@ void LinkManagerStateMachineTest::runIoService(uint32_t count)
68
68
}
69
69
}
70
70
71
- void LinkManagerStateMachineTest::postLinkProberEvent (link_prober::LinkProberState::Label label, uint32_t count)
71
+ void LinkManagerStateMachineTest::postLinkProberEvent (link_prober::LinkProberState::Label label, uint32_t count, uint32_t detect_multiplier )
72
72
{
73
73
switch (label) {
74
- case link_prober::LinkProberState::Active:
75
- for (uint8_t i = 0 ; i < mMuxConfig .getPositiveStateChangeRetryCount (); i++) {
76
- mFakeMuxPort .mFakeLinkProber ->postLinkProberEvent <link_prober::IcmpSelfEvent&>(
77
- link_prober::LinkProberStateMachineBase::getIcmpSelfEvent ()
78
- );
79
- runIoService (count);
74
+ case link_prober::LinkProberState::Active: {
75
+ detect_multiplier = (detect_multiplier == 0 ? mMuxConfig .getPositiveStateChangeRetryCount () : detect_multiplier);
76
+ for (uint8_t i = 0 ; i < detect_multiplier; i++) {
77
+ mFakeMuxPort .mFakeLinkProber ->postLinkProberEvent <link_prober::IcmpSelfEvent&>(
78
+ link_prober::LinkProberStateMachineBase::getIcmpSelfEvent ()
79
+ );
80
+ runIoService (count);
81
+ }
82
+ break ;
83
+ }
84
+ case link_prober::LinkProberState::Standby: {
85
+ detect_multiplier = (detect_multiplier == 0 ? mMuxConfig .getPositiveStateChangeRetryCount () : detect_multiplier);
86
+ for (uint8_t i = 0 ; i < detect_multiplier; i++) {
87
+ mFakeMuxPort .mFakeLinkProber ->postLinkProberEvent <link_prober::IcmpPeerEvent&>(
88
+ link_prober::LinkProberStateMachineBase::getIcmpPeerEvent ()
89
+ );
90
+ runIoService (count);
91
+ }
92
+ break ;
80
93
}
81
- break ;
82
- case link_prober::LinkProberState::Standby:
83
- for (uint8_t i = 0 ; i < mMuxConfig .getPositiveStateChangeRetryCount (); i++) {
84
- mFakeMuxPort .mFakeLinkProber ->postLinkProberEvent <link_prober::IcmpPeerEvent&>(
85
- link_prober::LinkProberStateMachineBase::getIcmpPeerEvent ()
86
- );
87
- runIoService (count);
94
+ case link_prober::LinkProberState::Unknown: {
95
+ detect_multiplier = (detect_multiplier == 0 ? mMuxConfig .getNegativeStateChangeRetryCount () : detect_multiplier);
96
+ for (uint8_t i = 0 ; i < detect_multiplier; i++) {
97
+ mFakeMuxPort .mFakeLinkProber ->postLinkProberEvent <link_prober::IcmpUnknownEvent&>(
98
+ link_prober::LinkProberStateMachineBase::getIcmpUnknownEvent ()
99
+ );
100
+ runIoService (count);
101
+ }
102
+ break ;
88
103
}
89
- break ;
90
- case link_prober::LinkProberState::Unknown:
91
- for (uint8_t i = 0 ; i < mMuxConfig .getNegativeStateChangeRetryCount (); i++) {
92
- mFakeMuxPort .mFakeLinkProber ->postLinkProberEvent <link_prober::IcmpUnknownEvent&>(
93
- link_prober::LinkProberStateMachineBase::getIcmpUnknownEvent ()
94
- );
95
- runIoService (count);
104
+ default : {
105
+ break ;
96
106
}
97
- break ;
98
- default :
99
- break ;
100
107
}
101
108
}
102
109
@@ -196,7 +203,7 @@ void LinkManagerStateMachineTest::setMuxActive()
196
203
VALIDATE_STATE (Unknown, Wait, Down);
197
204
198
205
postLinkEvent (link_state::LinkState::Up);
199
- VALIDATE_STATE (Unknown , Wait, Up);
206
+ VALIDATE_STATE (Wait , Wait, Up);
200
207
201
208
// change state to active
202
209
postLinkProberEvent (link_prober::LinkProberState::Active);
@@ -220,7 +227,7 @@ void LinkManagerStateMachineTest::setMuxStandby()
220
227
VALIDATE_STATE (Unknown, Wait, Down);
221
228
222
229
postLinkEvent (link_state::LinkState::Up);
223
- VALIDATE_STATE (Unknown , Wait, Up);
230
+ VALIDATE_STATE (Wait , Wait, Up);
224
231
225
232
// change state to active
226
233
postLinkProberEvent (link_prober::LinkProberState::Standby);
@@ -543,12 +550,14 @@ TEST_F(LinkManagerStateMachineTest, MuxActiveLinkDown)
543
550
{
544
551
setMuxActive ();
545
552
553
+ int postLinkProberMetricsInvokeCountBefore = mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount ;
554
+
546
555
EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
547
556
handleLinkState (" down" , 3 );
548
557
549
558
VALIDATE_STATE (Active, Wait, Down);
550
559
EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 1 );
551
- EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , 1 );
560
+ EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , postLinkProberMetricsInvokeCountBefore );
552
561
EXPECT_EQ (mDbInterfacePtr ->mLastPostedSwitchCause , link_manager::ActiveStandbyStateMachine::SwitchCause::LinkDown);
553
562
554
563
// swss notification
@@ -1228,14 +1237,19 @@ TEST_F(LinkManagerStateMachineTest, MuxActivePeerLinkStateUp)
1228
1237
TEST_F (LinkManagerStateMachineTest, PostPckLossMetricsEvent)
1229
1238
{
1230
1239
setMuxStandby ();
1231
-
1232
- EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , 1 ); // post link_prober_standby_start
1240
+
1241
+ int postLinkProberMetricsInvokeCountBefore = mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount ;
1242
+
1243
+ // post link_prober_standby_start
1244
+ EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , postLinkProberMetricsInvokeCountBefore);
1233
1245
postLinkProberEvent (link_prober::LinkProberState::Unknown, 3 );
1234
1246
1235
- EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , 3 ); // post link_prober_unknown_start, link_prober_wait_start
1247
+ // post link_prober_unknown_start, link_prober_wait_start
1248
+ EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , postLinkProberMetricsInvokeCountBefore + 2 );
1236
1249
postLinkProberEvent (link_prober::LinkProberState::Active, 3 );
1237
-
1238
- EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , 4 ); // post link_prober_unknown_start, post link_prober_active_start
1250
+
1251
+ // post link_prober_unknown_start, post link_prober_active_start
1252
+ EXPECT_EQ (mDbInterfacePtr ->mPostLinkProberMetricsInvokeCount , postLinkProberMetricsInvokeCountBefore + 3 );
1239
1253
}
1240
1254
1241
1255
TEST_F (LinkManagerStateMachineTest, PostPckLossUpdateAndResetEvent)
@@ -1345,4 +1359,81 @@ TEST_F(LinkManagerStateMachineTest, MuxStandbyLinkProberUnknownDefaultRouteNA)
1345
1359
VALIDATE_STATE (Wait, Wait, Up);
1346
1360
}
1347
1361
1362
+ TEST_F (LinkManagerStateMachineTest, MuxStandbyLinkProberStandbyLinkDownMuxWaitLinkUp)
1363
+ {
1364
+ setMuxStandby ();
1365
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1366
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1367
+ VALIDATE_STATE (Standby, Standby, Up);
1368
+
1369
+ handleLinkState (" down" , 3 );
1370
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1371
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1372
+ VALIDATE_STATE (Standby, Standby, Down);
1373
+
1374
+ postLinkProberEvent (link_prober::LinkProberState::Unknown, 2 );
1375
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1376
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1377
+ VALIDATE_STATE (Unknown, Standby, Down);
1378
+
1379
+ runIoService (1 );
1380
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 1 );
1381
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1382
+ VALIDATE_STATE (Unknown, Wait, Down);
1383
+
1384
+ handleLinkState (" up" );
1385
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 1 );
1386
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1387
+ VALIDATE_STATE (Wait, Wait, Up);
1388
+
1389
+ handleProbeMuxState (" standby" , 3 );
1390
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 1 );
1391
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1392
+ VALIDATE_STATE (Wait, Standby, Up);
1393
+
1394
+ runIoService (1 );
1395
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 2 );
1396
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1397
+ VALIDATE_STATE (Wait, Wait, Up);
1398
+
1399
+ postLinkProberEvent (link_prober::LinkProberState::Standby);
1400
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 2 );
1401
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1402
+ VALIDATE_STATE (Standby, Wait, Up);
1403
+
1404
+ handleProbeMuxState (" standby" , 3 );
1405
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 2 );
1406
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1407
+ VALIDATE_STATE (Standby, Standby, Up);
1408
+ }
1409
+
1410
+ TEST_F (LinkManagerStateMachineTest, MuxStandbyLinkProberStandbyLinkDownLinkUpResetLinkProberState)
1411
+ {
1412
+ setMuxStandby ();
1413
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1414
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1415
+ VALIDATE_STATE (Standby, Standby, Up);
1416
+
1417
+ handleLinkState (" down" , 3 );
1418
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1419
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1420
+ VALIDATE_STATE (Standby, Standby, Down);
1421
+
1422
+ postLinkProberEvent (link_prober::LinkProberState::Unknown, 2 , 2 );
1423
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1424
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1425
+ VALIDATE_STATE (Standby, Standby, Down);
1426
+
1427
+ handleLinkState (" up" );
1428
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1429
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1430
+ VALIDATE_STATE (Standby, Standby, Up);
1431
+
1432
+ postLinkProberEvent (link_prober::LinkProberState::Unknown, 2 , 1 );
1433
+ EXPECT_EQ (mDbInterfacePtr ->mProbeMuxStateInvokeCount , 0 );
1434
+ EXPECT_EQ (mDbInterfacePtr ->mSetMuxStateInvokeCount , 0 );
1435
+ VALIDATE_STATE (Standby, Standby, Up);
1436
+ }
1437
+
1438
+
1348
1439
} /* namespace test */
0 commit comments