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