@@ -122,7 +122,14 @@ CHIP_ERROR InitFabricTable(chip::FabricTable & fabricTable, chip::TestPersistent
122
122
class TestCASESecurePairingDelegate : public SessionEstablishmentDelegate
123
123
{
124
124
public:
125
- void OnSessionEstablishmentError (CHIP_ERROR error) override { mNumPairingErrors ++; }
125
+ void OnSessionEstablishmentError (CHIP_ERROR error) override
126
+ {
127
+ mNumPairingErrors ++;
128
+ if (error == CHIP_ERROR_BUSY)
129
+ {
130
+ mNumBusyResponses ++;
131
+ }
132
+ }
126
133
127
134
void OnSessionEstablished (const SessionHandle & session) override
128
135
{
@@ -137,6 +144,7 @@ class TestCASESecurePairingDelegate : public SessionEstablishmentDelegate
137
144
// TODO: Rename mNumPairing* to mNumEstablishment*
138
145
uint32_t mNumPairingErrors = 0 ;
139
146
uint32_t mNumPairingComplete = 0 ;
147
+ uint32_t mNumBusyResponses = 0 ;
140
148
};
141
149
142
150
class TestOperationalKeystore : public chip ::Crypto::OperationalKeystore
@@ -314,6 +322,7 @@ class TestCASESession
314
322
static void SecurePairingStartTest (nlTestSuite * inSuite, void * inContext);
315
323
static void SecurePairingHandshakeTest (nlTestSuite * inSuite, void * inContext);
316
324
static void SecurePairingHandshakeServerTest (nlTestSuite * inSuite, void * inContext);
325
+ static void ClientReceivesBusyTest (nlTestSuite * inSuite, void * inContext);
317
326
static void Sigma1ParsingTest (nlTestSuite * inSuite, void * inContext);
318
327
static void DestinationIdTest (nlTestSuite * inSuite, void * inContext);
319
328
static void SessionResumptionStorage (nlTestSuite * inSuite, void * inContext);
@@ -536,6 +545,58 @@ void TestCASESession::SecurePairingHandshakeServerTest(nlTestSuite * inSuite, vo
536
545
537
546
chip::Platform::Delete (pairingCommissioner);
538
547
chip::Platform::Delete (pairingCommissioner1);
548
+
549
+ gPairingServer .Shutdown ();
550
+ }
551
+
552
+ void TestCASESession::ClientReceivesBusyTest (nlTestSuite * inSuite, void * inContext)
553
+ {
554
+ TestContext & ctx = *reinterpret_cast <TestContext *>(inContext);
555
+ TemporarySessionManager sessionManager (inSuite, ctx);
556
+
557
+ TestCASESecurePairingDelegate delegateCommissioner1, delegateCommissioner2;
558
+ CASESession pairingCommissioner1, pairingCommissioner2;
559
+
560
+ pairingCommissioner1.SetGroupDataProvider (&gCommissionerGroupDataProvider );
561
+ pairingCommissioner2.SetGroupDataProvider (&gCommissionerGroupDataProvider );
562
+
563
+ auto & loopback = ctx.GetLoopback ();
564
+ loopback.mSentMessageCount = 0 ;
565
+
566
+ NL_TEST_ASSERT (inSuite,
567
+ gPairingServer .ListenForSessionEstablishment (&ctx.GetExchangeManager (), &ctx.GetSecureSessionManager (),
568
+ &gDeviceFabrics , nullptr , nullptr ,
569
+ &gDeviceGroupDataProvider ) == CHIP_NO_ERROR);
570
+
571
+ ExchangeContext * contextCommissioner1 = ctx.NewUnauthenticatedExchangeToBob (&pairingCommissioner1);
572
+ ExchangeContext * contextCommissioner2 = ctx.NewUnauthenticatedExchangeToBob (&pairingCommissioner2);
573
+
574
+ NL_TEST_ASSERT (inSuite,
575
+ pairingCommissioner1.EstablishSession (sessionManager, &gCommissionerFabrics ,
576
+ ScopedNodeId{ Node01_01, gCommissionerFabricIndex }, contextCommissioner1,
577
+ nullptr , nullptr , &delegateCommissioner1, NullOptional) == CHIP_NO_ERROR);
578
+ NL_TEST_ASSERT (inSuite,
579
+ pairingCommissioner2.EstablishSession (sessionManager, &gCommissionerFabrics ,
580
+ ScopedNodeId{ Node01_01, gCommissionerFabricIndex }, contextCommissioner2,
581
+ nullptr , nullptr , &delegateCommissioner2, NullOptional) == CHIP_NO_ERROR);
582
+
583
+ ServiceEvents (ctx);
584
+
585
+ // We should have one full handshake and one Sigma1 + Busy + ack. If that
586
+ // ever changes (e.g. because our server starts supporting multiple parallel
587
+ // handshakes), this test needs to be fixed so that the server is still
588
+ // responding BUSY to the client.
589
+ NL_TEST_ASSERT (inSuite, loopback.mSentMessageCount == sTestCaseMessageCount + 3 );
590
+ NL_TEST_ASSERT (inSuite, delegateCommissioner1.mNumPairingComplete == 1 );
591
+ NL_TEST_ASSERT (inSuite, delegateCommissioner2.mNumPairingComplete == 0 );
592
+
593
+ NL_TEST_ASSERT (inSuite, delegateCommissioner1.mNumPairingErrors == 0 );
594
+ NL_TEST_ASSERT (inSuite, delegateCommissioner2.mNumPairingErrors == 1 );
595
+
596
+ NL_TEST_ASSERT (inSuite, delegateCommissioner1.mNumBusyResponses == 0 );
597
+ NL_TEST_ASSERT (inSuite, delegateCommissioner2.mNumBusyResponses == 1 );
598
+
599
+ gPairingServer .Shutdown ();
539
600
}
540
601
541
602
struct Sigma1Params
@@ -1115,6 +1176,7 @@ static const nlTest sTests[] =
1115
1176
NL_TEST_DEF (" Start" , chip::TestCASESession::SecurePairingStartTest),
1116
1177
NL_TEST_DEF (" Handshake" , chip::TestCASESession::SecurePairingHandshakeTest),
1117
1178
NL_TEST_DEF (" ServerHandshake" , chip::TestCASESession::SecurePairingHandshakeServerTest),
1179
+ NL_TEST_DEF (" ClientReceivesBusy" , chip::TestCASESession::ClientReceivesBusyTest),
1118
1180
NL_TEST_DEF (" Sigma1Parsing" , chip::TestCASESession::Sigma1ParsingTest),
1119
1181
NL_TEST_DEF (" DestinationId" , chip::TestCASESession::DestinationIdTest),
1120
1182
NL_TEST_DEF (" SessionResumptionStorage" , chip::TestCASESession::SessionResumptionStorage),
0 commit comments