@@ -183,6 +183,18 @@ static CHIP_ERROR LoadTestFabric_Node02_01(FabricTable & fabricTable, bool doCom
183
183
return err;
184
184
}
185
185
186
+ const FabricInfo * FindFabric (FabricTable & fabricTable, ByteSpan rootPublicKey, FabricId fabricId)
187
+ {
188
+ Crypto::P256PublicKey key;
189
+ EXPECT_GE (key.Length (), rootPublicKey.size ());
190
+ if (key.Length () < rootPublicKey.size ())
191
+ {
192
+ return nullptr ;
193
+ }
194
+ memcpy (key.Bytes (), rootPublicKey.data (), rootPublicKey.size ());
195
+ return fabricTable.FindFabric (key, fabricId);
196
+ }
197
+
186
198
struct TestFabricTable : public ::testing::Test
187
199
{
188
200
@@ -2279,16 +2291,13 @@ TEST_F(TestFabricTable, TestFabricLookup)
2279
2291
EXPECT_EQ (LoadTestFabric_Node01_01 (fabricTable, /* doCommit = */ true ), CHIP_NO_ERROR);
2280
2292
EXPECT_EQ (LoadTestFabric_Node02_01 (fabricTable, /* doCommit = */ true , FabricTable::AdvertiseIdentity::No), CHIP_NO_ERROR);
2281
2293
2294
+ // These two NOCs have the same fabric id on purpose; only the trust root is
2295
+ // different.
2296
+ constexpr FabricId kNode01_01_and_02_01_FabricId = 0xFAB000000000001D ;
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_and_02_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 , kNode01_01_and_02_01_FabricId );
2308
2310
ASSERT_NE (fabricInfo, nullptr );
2309
2311
2310
2312
EXPECT_EQ (fabricInfo->GetFabricIndex (), 2 );
@@ -2317,6 +2319,69 @@ 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 , TestCerts::kTestCert_Node01_01_FabricId );
2370
+ ASSERT_NE (fabricInfo, nullptr );
2371
+ EXPECT_EQ (fabricInfo->GetFabricIndex (), 1 );
2372
+ EXPECT_EQ (fabricInfo->GetNodeId (), TestCerts::kTestCert_Node01_01_NodeId );
2373
+ EXPECT_EQ (fabricInfo->GetFabricId (), TestCerts::kTestCert_Node01_01_FabricId );
2374
+ }
2375
+
2376
+ {
2377
+ auto fabricInfo = FindFabric (fabricTable, TestCerts::sTestCert_Root02_PublicKey , TestCerts::kTestCert_Node02_01_FabricId );
2378
+ ASSERT_NE (fabricInfo, nullptr );
2379
+ EXPECT_EQ (fabricInfo->GetFabricIndex (), 2 );
2380
+ EXPECT_EQ (fabricInfo->GetNodeId (), TestCerts::kTestCert_Node02_01_NodeId );
2381
+ EXPECT_EQ (fabricInfo->GetFabricId (), TestCerts::kTestCert_Node02_01_FabricId );
2382
+ }
2383
+ }
2384
+
2320
2385
TEST_F (TestFabricTable, TestFetchCATs)
2321
2386
{
2322
2387
// Initialize a fabric table.
0 commit comments