@@ -79,6 +79,10 @@ class ScopedFabricTable
79
79
chip::Credentials::PersistentStorageOpCertStore mOpCertStore ;
80
80
};
81
81
82
+ constexpr FabricId kNode01_01_FabricId = 0xFAB000000000001D ;
83
+
84
+ constexpr FabricId kNode02_01_FabricId = 0xFAB000000000001D ;
85
+
82
86
/* *
83
87
* Load a single test fabric with with the Root01:ICA01:Node01_01 identity.
84
88
*/
@@ -183,6 +187,18 @@ static CHIP_ERROR LoadTestFabric_Node02_01(FabricTable & fabricTable, bool doCom
183
187
return err;
184
188
}
185
189
190
+ const FabricInfo * FindFabric (FabricTable & fabricTable, ByteSpan rootPublicKey, FabricId fabricId)
191
+ {
192
+ Crypto::P256PublicKey key;
193
+ EXPECT_GE (key.Length (), rootPublicKey.size ());
194
+ if (key.Length () < rootPublicKey.size ())
195
+ {
196
+ return nullptr ;
197
+ }
198
+ memcpy (key.Bytes (), rootPublicKey.data (), rootPublicKey.size ());
199
+ return fabricTable.FindFabric (key, fabricId);
200
+ }
201
+
186
202
struct TestFabricTable : public ::testing::Test
187
203
{
188
204
@@ -2281,14 +2297,7 @@ TEST_F(TestFabricTable, TestFabricLookup)
2281
2297
2282
2298
// Attempt lookup of the Root01 fabric.
2283
2299
{
2284
- Crypto::P256PublicKey key;
2285
- EXPECT_GE (key.Length (), TestCerts::sTestCert_Root01_PublicKey .size ());
2286
- if (key.Length () < TestCerts::sTestCert_Root01_PublicKey .size ())
2287
- {
2288
- return ;
2289
- }
2290
- memcpy (key.Bytes (), TestCerts::sTestCert_Root01_PublicKey .data (), TestCerts::sTestCert_Root01_PublicKey .size ());
2291
- auto fabricInfo = fabricTable.FindFabric (key, 0xFAB000000000001D );
2300
+ auto fabricInfo = FindFabric (fabricTable, TestCerts::sTestCert_Root01_PublicKey , kNode01_01_FabricId );
2292
2301
ASSERT_NE (fabricInfo, nullptr );
2293
2302
2294
2303
EXPECT_EQ (fabricInfo->GetFabricIndex (), 1 );
@@ -2297,14 +2306,7 @@ TEST_F(TestFabricTable, TestFabricLookup)
2297
2306
2298
2307
// Attempt lookup of the Root02 fabric.
2299
2308
{
2300
- Crypto::P256PublicKey key;
2301
- EXPECT_GE (key.Length (), TestCerts::sTestCert_Root02_PublicKey .size ());
2302
- if (key.Length () < TestCerts::sTestCert_Root02_PublicKey .size ())
2303
- {
2304
- return ;
2305
- }
2306
- memcpy (key.Bytes (), TestCerts::sTestCert_Root02_PublicKey .data (), TestCerts::sTestCert_Root02_PublicKey .size ());
2307
- auto fabricInfo = fabricTable.FindFabric (key, 0xFAB000000000001D );
2309
+ auto fabricInfo = FindFabric (fabricTable, TestCerts::sTestCert_Root02_PublicKey , kNode02_01_FabricId );
2308
2310
ASSERT_NE (fabricInfo, nullptr );
2309
2311
2310
2312
EXPECT_EQ (fabricInfo->GetFabricIndex (), 2 );
@@ -2317,6 +2319,65 @@ TEST_F(TestFabricTable, TestFabricLookup)
2317
2319
}
2318
2320
}
2319
2321
2322
+ TEST_F (TestFabricTable, ShouldFailSetFabricIndexWithInvalidIndex)
2323
+ {
2324
+ chip::TestPersistentStorageDelegate testStorage;
2325
+ ScopedFabricTable fabricTableHolder;
2326
+ EXPECT_EQ (fabricTableHolder.Init (&testStorage), CHIP_NO_ERROR);
2327
+ FabricTable & fabricTable = fabricTableHolder.GetFabricTable ();
2328
+
2329
+ EXPECT_EQ (fabricTable.SetFabricIndexForNextAddition (kUndefinedFabricIndex ), CHIP_ERROR_INVALID_FABRIC_INDEX);
2330
+ }
2331
+
2332
+ TEST_F (TestFabricTable, ShouldFailSetFabricIndexWithPendingFabric)
2333
+ {
2334
+ chip::TestPersistentStorageDelegate testStorage;
2335
+ ScopedFabricTable fabricTableHolder;
2336
+ EXPECT_EQ (fabricTableHolder.Init (&testStorage), CHIP_NO_ERROR);
2337
+ FabricTable & fabricTable = fabricTableHolder.GetFabricTable ();
2338
+
2339
+ EXPECT_EQ (fabricTable.AddNewPendingTrustedRootCert (ByteSpan (TestCerts::sTestCert_Root01_Chip )), CHIP_NO_ERROR);
2340
+
2341
+ EXPECT_EQ (fabricTable.SetFabricIndexForNextAddition (1 ), CHIP_ERROR_INCORRECT_STATE);
2342
+ }
2343
+
2344
+ TEST_F (TestFabricTable, ShouldFailSetFabricIndexWhenInUse)
2345
+ {
2346
+ chip::TestPersistentStorageDelegate testStorage;
2347
+ ScopedFabricTable fabricTableHolder;
2348
+ EXPECT_EQ (fabricTableHolder.Init (&testStorage), CHIP_NO_ERROR);
2349
+ FabricTable & fabricTable = fabricTableHolder.GetFabricTable ();
2350
+
2351
+ EXPECT_EQ (LoadTestFabric_Node01_01 (fabricTable, /* doCommit = */ true ), CHIP_NO_ERROR);
2352
+ EXPECT_EQ (fabricTable.SetFabricIndexForNextAddition (1 ), CHIP_ERROR_FABRIC_EXISTS);
2353
+ }
2354
+
2355
+ TEST_F (TestFabricTable, ShouldAddFabricAtRequestedIndex)
2356
+ {
2357
+ chip::TestPersistentStorageDelegate testStorage;
2358
+ ScopedFabricTable fabricTableHolder;
2359
+ EXPECT_EQ (fabricTableHolder.Init (&testStorage), CHIP_NO_ERROR);
2360
+ FabricTable & fabricTable = fabricTableHolder.GetFabricTable ();
2361
+
2362
+ EXPECT_EQ (fabricTable.SetFabricIndexForNextAddition (2 ), CHIP_NO_ERROR);
2363
+ EXPECT_EQ (LoadTestFabric_Node02_01 (fabricTable, /* doCommit = */ true ), CHIP_NO_ERROR);
2364
+
2365
+ EXPECT_EQ (fabricTable.SetFabricIndexForNextAddition (1 ), CHIP_NO_ERROR);
2366
+ EXPECT_EQ (LoadTestFabric_Node01_01 (fabricTable, /* doCommit = */ true ), CHIP_NO_ERROR);
2367
+
2368
+ {
2369
+ auto fabricInfo = FindFabric (fabricTable, TestCerts::sTestCert_Root01_PublicKey , kNode01_01_FabricId );
2370
+ ASSERT_NE (fabricInfo, nullptr );
2371
+ EXPECT_EQ (fabricInfo->GetFabricIndex (), 1 );
2372
+ }
2373
+
2374
+ {
2375
+ auto fabricInfo = FindFabric (fabricTable, TestCerts::sTestCert_Root02_PublicKey , kNode02_01_FabricId );
2376
+ ASSERT_NE (fabricInfo, nullptr );
2377
+ EXPECT_EQ (fabricInfo->GetFabricIndex (), 2 );
2378
+ }
2379
+ }
2380
+
2320
2381
TEST_F (TestFabricTable, TestFetchCATs)
2321
2382
{
2322
2383
// Initialize a fabric table.
0 commit comments