credentials to pigweed (#33044)

diff --git a/src/credentials/tests/BUILD.gn b/src/credentials/tests/BUILD.gn
index 2de5d99..766557d 100644
--- a/src/credentials/tests/BUILD.gn
+++ b/src/credentials/tests/BUILD.gn
@@ -14,7 +14,6 @@
 
 import("//build_overrides/build.gni")
 import("//build_overrides/chip.gni")
-import("//build_overrides/nlunit_test.gni")
 
 import("${chip_root}/build/chip/chip_test_suite.gni")
 import("${chip_root}/build/chip/fuzz_test.gni")
@@ -42,7 +41,7 @@
   ]
 }
 
-chip_test_suite_using_nltest("tests") {
+chip_test_suite("tests") {
   output_name = "libCredentialsTest"
   output_dir = "${root_out_dir}/lib"
 
@@ -71,8 +70,6 @@
     "${chip_root}/src/credentials:default_attestation_verifier",
     "${chip_root}/src/lib/core",
     "${chip_root}/src/lib/support:testing",
-    "${chip_root}/src/lib/support:testing_nlunit",
-    "${nlunit_test_root}:nlunit-test",
   ]
 }
 
diff --git a/src/credentials/tests/TestCertificationDeclaration.cpp b/src/credentials/tests/TestCertificationDeclaration.cpp
index 4500354..45c8d50 100644
--- a/src/credentials/tests/TestCertificationDeclaration.cpp
+++ b/src/credentials/tests/TestCertificationDeclaration.cpp
@@ -30,10 +30,8 @@
 #include <credentials/attestation_verifier/DefaultDeviceAttestationVerifier.h>
 #include <crypto/CHIPCryptoPAL.h>
 #include <lib/support/Span.h>
-#include <lib/support/UnitTestExtendedAssertions.h>
-#include <lib/support/UnitTestRegistration.h>
 
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 using namespace chip;
 using namespace chip::ASN1;
@@ -263,59 +261,57 @@
       ByteSpan(sTestCMS_CDContent02), ByteSpan(sTestCMS_SignedMessage02) },
 };
 
-static void TestCD_EncodeDecode(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_EncodeDecode)
 {
     for (const auto & testCase : sTestCases)
     {
         uint8_t encodedCertElemBuf[kCertificationElements_TLVEncodedMaxLength];
         MutableByteSpan encodedCDPayload(encodedCertElemBuf);
 
-        NL_TEST_ASSERT(inSuite, EncodeCertificationElements(testCase.cdElements, encodedCDPayload) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(encodedCDPayload));
+        EXPECT_EQ(EncodeCertificationElements(testCase.cdElements, encodedCDPayload), CHIP_NO_ERROR);
+        EXPECT_TRUE(testCase.cdContent.data_equal(encodedCDPayload));
 
         CertificationElements decodedElements;
-        NL_TEST_ASSERT(inSuite, DecodeCertificationElements(encodedCDPayload, decodedElements) == CHIP_NO_ERROR);
+        EXPECT_EQ(DecodeCertificationElements(encodedCDPayload, decodedElements), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT(inSuite, decodedElements.FormatVersion == testCase.cdElements.FormatVersion);
-        NL_TEST_ASSERT(inSuite, decodedElements.VendorId == testCase.cdElements.VendorId);
-        NL_TEST_ASSERT(inSuite, decodedElements.ProductIdsCount == testCase.cdElements.ProductIdsCount);
+        EXPECT_EQ(decodedElements.FormatVersion, testCase.cdElements.FormatVersion);
+        EXPECT_EQ(decodedElements.VendorId, testCase.cdElements.VendorId);
+        EXPECT_EQ(decodedElements.ProductIdsCount, testCase.cdElements.ProductIdsCount);
         for (uint8_t j = 0; j < decodedElements.ProductIdsCount; j++)
         {
-            NL_TEST_ASSERT(inSuite, decodedElements.ProductIds[j] == testCase.cdElements.ProductIds[j]);
+            EXPECT_EQ(decodedElements.ProductIds[j], testCase.cdElements.ProductIds[j]);
         }
-        NL_TEST_ASSERT(inSuite, decodedElements.DeviceTypeId == testCase.cdElements.DeviceTypeId);
-        NL_TEST_ASSERT(inSuite,
-                       memcmp(decodedElements.CertificateId, testCase.cdElements.CertificateId, kCertificateIdLength) == 0);
-        NL_TEST_ASSERT(inSuite, decodedElements.SecurityLevel == testCase.cdElements.SecurityLevel);
-        NL_TEST_ASSERT(inSuite, decodedElements.SecurityInformation == testCase.cdElements.SecurityInformation);
-        NL_TEST_ASSERT(inSuite, decodedElements.VersionNumber == testCase.cdElements.VersionNumber);
-        NL_TEST_ASSERT(inSuite, decodedElements.CertificationType == testCase.cdElements.CertificationType);
-        NL_TEST_ASSERT(inSuite, decodedElements.DACOriginVIDandPIDPresent == testCase.cdElements.DACOriginVIDandPIDPresent);
+        EXPECT_EQ(decodedElements.DeviceTypeId, testCase.cdElements.DeviceTypeId);
+        EXPECT_EQ(memcmp(decodedElements.CertificateId, testCase.cdElements.CertificateId, kCertificateIdLength), 0);
+        EXPECT_EQ(decodedElements.SecurityLevel, testCase.cdElements.SecurityLevel);
+        EXPECT_EQ(decodedElements.SecurityInformation, testCase.cdElements.SecurityInformation);
+        EXPECT_EQ(decodedElements.VersionNumber, testCase.cdElements.VersionNumber);
+        EXPECT_EQ(decodedElements.CertificationType, testCase.cdElements.CertificationType);
+        EXPECT_EQ(decodedElements.DACOriginVIDandPIDPresent, testCase.cdElements.DACOriginVIDandPIDPresent);
         if (decodedElements.DACOriginVIDandPIDPresent)
         {
-            NL_TEST_ASSERT(inSuite, decodedElements.DACOriginVendorId == testCase.cdElements.DACOriginVendorId);
-            NL_TEST_ASSERT(inSuite, decodedElements.DACOriginProductId == testCase.cdElements.DACOriginProductId);
+            EXPECT_EQ(decodedElements.DACOriginVendorId, testCase.cdElements.DACOriginVendorId);
+            EXPECT_EQ(decodedElements.DACOriginProductId, testCase.cdElements.DACOriginProductId);
         }
-        NL_TEST_ASSERT(inSuite, decodedElements.AuthorizedPAAListCount == testCase.cdElements.AuthorizedPAAListCount);
+        EXPECT_EQ(decodedElements.AuthorizedPAAListCount, testCase.cdElements.AuthorizedPAAListCount);
         for (uint8_t j = 0; j < decodedElements.AuthorizedPAAListCount; j++)
         {
-            NL_TEST_ASSERT(
-                inSuite,
-                memcmp(decodedElements.AuthorizedPAAList[j], testCase.cdElements.AuthorizedPAAList[j], kKeyIdentifierLength) == 0);
+            EXPECT_EQ(memcmp(decodedElements.AuthorizedPAAList[j], testCase.cdElements.AuthorizedPAAList[j], kKeyIdentifierLength),
+                      0);
         }
     }
 }
 
-static void TestCD_EncodeDecode_Errors(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_EncodeDecode_Errors)
 {
     uint8_t encodedCertElemBuf[kCertificationElements_TLVEncodedMaxLength];
     MutableByteSpan encodedCDPayload(encodedCertElemBuf);
-    NL_TEST_ASSERT(inSuite, EncodeCertificationElements(sTestCMS_CertElements01, encodedCDPayload) == CHIP_NO_ERROR);
+    EXPECT_EQ(EncodeCertificationElements(sTestCMS_CertElements01, encodedCDPayload), CHIP_NO_ERROR);
 
     // Test Encode Error: CHIP_ERROR_BUFFER_TOO_SMALL
     // Provide a smaller buffer as an input.
     encodedCDPayload.reduce_size(encodedCDPayload.size() - 4);
-    NL_TEST_ASSERT(inSuite, EncodeCertificationElements(sTestCMS_CertElements01, encodedCDPayload) == CHIP_ERROR_BUFFER_TOO_SMALL);
+    EXPECT_EQ(EncodeCertificationElements(sTestCMS_CertElements01, encodedCDPayload), CHIP_ERROR_BUFFER_TOO_SMALL);
 
     // Test Decode Error: CHIP_ERROR_INVALID_INTEGER_VALUE
     // Manually modified sTestCMS_CDContent01[]: updated VendorId element to 4-octet
@@ -327,9 +323,7 @@
     };
 
     CertificationElements certElementsOut;
-    NL_TEST_ASSERT(inSuite,
-                   DecodeCertificationElements(ByteSpan(sTestCMS_CDContent01_Err01), certElementsOut) ==
-                       CHIP_ERROR_INVALID_INTEGER_VALUE);
+    EXPECT_EQ(DecodeCertificationElements(ByteSpan(sTestCMS_CDContent01_Err01), certElementsOut), CHIP_ERROR_INVALID_INTEGER_VALUE);
 
     // Test Decode Error: CHIP_ERROR_UNEXPECTED_TLV_ELEMENT
     // Manually modified sTestCMS_CDContent01[]: switched ProductIds and DeviceTypeId elements tag (0x02 <--> 0x03)
@@ -338,12 +332,11 @@
                                                               0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31, 0x5a, 0x42, 0x33, 0x33,
                                                               0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24, 0x05, 0x00, 0x24,
                                                               0x06, 0x00, 0x25, 0x07, 0x94, 0x26, 0x24, 0x08, 0x00, 0x18 };
-    NL_TEST_ASSERT(inSuite,
-                   DecodeCertificationElements(ByteSpan(sTestCMS_CDContent01_Err02), certElementsOut) ==
-                       CHIP_ERROR_UNEXPECTED_TLV_ELEMENT);
+    EXPECT_EQ(DecodeCertificationElements(ByteSpan(sTestCMS_CDContent01_Err02), certElementsOut),
+              CHIP_ERROR_UNEXPECTED_TLV_ELEMENT);
 }
 
-static void TestCD_CMSSignAndVerify(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_CMSSignAndVerify)
 {
     ByteSpan cdContentIn(sTestCMS_CDContent01);
     ByteSpan cdContentOut;
@@ -352,14 +345,14 @@
     uint8_t signedMessageBuf[kMaxCMSSignedCDMessage];
     MutableByteSpan signedMessage(signedMessageBuf);
 
-    NL_TEST_ASSERT(inSuite, ExtractSKIDFromX509Cert(ByteSpan(sTestCMS_SignerCert), signerKeyId) == CHIP_NO_ERROR);
+    EXPECT_EQ(ExtractSKIDFromX509Cert(ByteSpan(sTestCMS_SignerCert), signerKeyId), CHIP_NO_ERROR);
 
     // Test with random key
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, CMS_Sign(cdContentIn, signerKeyId, keypair, signedMessage) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, CMS_Verify(signedMessage, keypair.Pubkey(), cdContentOut) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, cdContentIn.data_equal(cdContentOut));
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
+    EXPECT_EQ(CMS_Sign(cdContentIn, signerKeyId, keypair, signedMessage), CHIP_NO_ERROR);
+    EXPECT_EQ(CMS_Verify(signedMessage, keypair.Pubkey(), cdContentOut), CHIP_NO_ERROR);
+    EXPECT_TRUE(cdContentIn.data_equal(cdContentOut));
 
     // Test with known key
     P256Keypair keypair2;
@@ -368,93 +361,89 @@
     serializedKeypair.SetLength(sizeof(sTestCMS_SignerSerializedKeypair));
     cdContentIn   = ByteSpan(sTestCMS_CDContent02);
     signedMessage = MutableByteSpan(signedMessageBuf);
-    NL_TEST_ASSERT(inSuite, keypair2.Deserialize(serializedKeypair) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, CMS_Sign(cdContentIn, signerKeyId, keypair2, signedMessage) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, CMS_Verify(signedMessage, keypair2.Pubkey(), cdContentOut) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, cdContentIn.data_equal(cdContentOut));
+    EXPECT_EQ(keypair2.Deserialize(serializedKeypair), CHIP_NO_ERROR);
+    EXPECT_EQ(CMS_Sign(cdContentIn, signerKeyId, keypair2, signedMessage), CHIP_NO_ERROR);
+    EXPECT_EQ(CMS_Verify(signedMessage, keypair2.Pubkey(), cdContentOut), CHIP_NO_ERROR);
+    EXPECT_TRUE(cdContentIn.data_equal(cdContentOut));
 }
 
-static void TestCD_CMSVerifyAndExtract(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_CMSVerifyAndExtract)
 {
     for (const auto & testCase : sTestCases)
     {
         // Verify using signer P256PublicKey
         ByteSpan cdContentOut;
-        NL_TEST_ASSERT(inSuite,
-                       CMS_Verify(testCase.cdCMSSigned, P256PublicKey(testCase.signerPubkey), cdContentOut) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(cdContentOut));
+        EXPECT_EQ(CMS_Verify(testCase.cdCMSSigned, P256PublicKey(testCase.signerPubkey), cdContentOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(testCase.cdContent.data_equal(cdContentOut));
 
         // Verify using signer X509 Certificate
         cdContentOut = ByteSpan();
-        NL_TEST_ASSERT(inSuite, CMS_Verify(testCase.cdCMSSigned, testCase.signerCert, cdContentOut) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(cdContentOut));
+        EXPECT_EQ(CMS_Verify(testCase.cdCMSSigned, testCase.signerCert, cdContentOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(testCase.cdContent.data_equal(cdContentOut));
 
         // Test CMS_ExtractCDContent()
         cdContentOut = ByteSpan();
-        NL_TEST_ASSERT(inSuite, CMS_ExtractCDContent(testCase.cdCMSSigned, cdContentOut) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(cdContentOut));
+        EXPECT_EQ(CMS_ExtractCDContent(testCase.cdCMSSigned, cdContentOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(testCase.cdContent.data_equal(cdContentOut));
 
         // Test CMS_ExtractKeyId()
         uint8_t signerKeyIdBuf[Crypto::kSubjectKeyIdentifierLength];
         MutableByteSpan signerKeyId(signerKeyIdBuf);
-        NL_TEST_ASSERT(inSuite, ExtractSKIDFromX509Cert(testCase.signerCert, signerKeyId) == CHIP_NO_ERROR);
+        EXPECT_EQ(ExtractSKIDFromX509Cert(testCase.signerCert, signerKeyId), CHIP_NO_ERROR);
 
         ByteSpan signerKeyIdOut;
-        NL_TEST_ASSERT(inSuite, CMS_ExtractKeyId(testCase.cdCMSSigned, signerKeyIdOut) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, signerKeyId.data_equal(signerKeyIdOut));
+        EXPECT_EQ(CMS_ExtractKeyId(testCase.cdCMSSigned, signerKeyIdOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(signerKeyId.data_equal(signerKeyIdOut));
     }
 }
 
-static void TestCD_CertificationElementsDecoder(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_CertificationElementsDecoder)
 {
     for (const auto & testCase : sTestCases)
     {
         uint8_t encodedCertElemBuf[kCertificationElements_TLVEncodedMaxLength];
         MutableByteSpan encodedCDPayload(encodedCertElemBuf);
 
-        NL_TEST_ASSERT(inSuite, EncodeCertificationElements(testCase.cdElements, encodedCDPayload) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(encodedCDPayload));
+        EXPECT_EQ(EncodeCertificationElements(testCase.cdElements, encodedCDPayload), CHIP_NO_ERROR);
+        EXPECT_TRUE(testCase.cdContent.data_equal(encodedCDPayload));
 
         CertificationElementsWithoutPIDs certificationDeclarationContent;
         CertificationElementsDecoder certificationElementsDecoder;
-        NL_TEST_ASSERT(inSuite, DecodeCertificationElements(encodedCDPayload, certificationDeclarationContent) == CHIP_NO_ERROR);
+        EXPECT_EQ(DecodeCertificationElements(encodedCDPayload, certificationDeclarationContent), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.formatVersion == testCase.cdElements.FormatVersion);
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.vendorId == testCase.cdElements.VendorId);
+        EXPECT_EQ(certificationDeclarationContent.formatVersion, testCase.cdElements.FormatVersion);
+        EXPECT_EQ(certificationDeclarationContent.vendorId, testCase.cdElements.VendorId);
         for (uint8_t j = 0; j < testCase.cdElements.ProductIdsCount; j++)
         {
-            NL_TEST_ASSERT(inSuite,
-                           certificationElementsDecoder.IsProductIdIn(encodedCDPayload, testCase.cdElements.ProductIds[j]));
+            EXPECT_TRUE(certificationElementsDecoder.IsProductIdIn(encodedCDPayload, testCase.cdElements.ProductIds[j]));
             // now test for an unexistent ProductId
-            NL_TEST_ASSERT(inSuite, certificationElementsDecoder.IsProductIdIn(encodedCDPayload, 0x9000) == false);
+            EXPECT_FALSE(certificationElementsDecoder.IsProductIdIn(encodedCDPayload, 0x9000));
         }
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.deviceTypeId == testCase.cdElements.DeviceTypeId);
-        NL_TEST_ASSERT(
-            inSuite,
-            memcmp(certificationDeclarationContent.certificateId, testCase.cdElements.CertificateId, kCertificateIdLength) == 0);
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.securityLevel == testCase.cdElements.SecurityLevel);
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.securityInformation == testCase.cdElements.SecurityInformation);
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.versionNumber == testCase.cdElements.VersionNumber);
-        NL_TEST_ASSERT(inSuite, certificationDeclarationContent.certificationType == testCase.cdElements.CertificationType);
-        NL_TEST_ASSERT(inSuite,
-                       certificationDeclarationContent.dacOriginVIDandPIDPresent == testCase.cdElements.DACOriginVIDandPIDPresent);
+        EXPECT_EQ(certificationDeclarationContent.deviceTypeId, testCase.cdElements.DeviceTypeId);
+        EXPECT_EQ(memcmp(certificationDeclarationContent.certificateId, testCase.cdElements.CertificateId, kCertificateIdLength),
+                  0);
+        EXPECT_EQ(certificationDeclarationContent.securityLevel, testCase.cdElements.SecurityLevel);
+        EXPECT_EQ(certificationDeclarationContent.securityInformation, testCase.cdElements.SecurityInformation);
+        EXPECT_EQ(certificationDeclarationContent.versionNumber, testCase.cdElements.VersionNumber);
+        EXPECT_EQ(certificationDeclarationContent.certificationType, testCase.cdElements.CertificationType);
+        EXPECT_EQ(certificationDeclarationContent.dacOriginVIDandPIDPresent, testCase.cdElements.DACOriginVIDandPIDPresent);
         if (certificationDeclarationContent.dacOriginVIDandPIDPresent)
         {
-            NL_TEST_ASSERT(inSuite, certificationDeclarationContent.dacOriginVendorId == testCase.cdElements.DACOriginVendorId);
-            NL_TEST_ASSERT(inSuite, certificationDeclarationContent.dacOriginProductId == testCase.cdElements.DACOriginProductId);
+            EXPECT_EQ(certificationDeclarationContent.dacOriginVendorId, testCase.cdElements.DACOriginVendorId);
+            EXPECT_EQ(certificationDeclarationContent.dacOriginProductId, testCase.cdElements.DACOriginProductId);
         }
         if (testCase.cdElements.AuthorizedPAAListCount > 0)
         {
-            NL_TEST_ASSERT(inSuite, certificationDeclarationContent.authorizedPAAListPresent);
+            EXPECT_TRUE(certificationDeclarationContent.authorizedPAAListPresent);
         }
         else
         {
-            NL_TEST_ASSERT(inSuite, !certificationDeclarationContent.authorizedPAAListPresent);
+            EXPECT_FALSE(certificationDeclarationContent.authorizedPAAListPresent);
         }
     }
 }
 
-static void TestCD_EncodeDecode_Random(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_EncodeDecode_Random)
 {
     CertificationElements randomElements = { .FormatVersion             = 0x6F,
                                              .VendorId                  = 0x88EA,
@@ -489,97 +478,95 @@
     MutableByteSpan encodedCDPayload(encodedCertElemBuf);
     CertificationElements decodedElements;
 
-    NL_TEST_ASSERT(inSuite, EncodeCertificationElements(randomElements, encodedCDPayload) == CHIP_NO_ERROR);
+    EXPECT_EQ(EncodeCertificationElements(randomElements, encodedCDPayload), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, DecodeCertificationElements(encodedCDPayload, decodedElements) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, decodedElements.FormatVersion == randomElements.FormatVersion);
-    NL_TEST_ASSERT(inSuite, decodedElements.VendorId == randomElements.VendorId);
-    NL_TEST_ASSERT(inSuite, decodedElements.ProductIdsCount == randomElements.ProductIdsCount);
+    EXPECT_EQ(DecodeCertificationElements(encodedCDPayload, decodedElements), CHIP_NO_ERROR);
+    EXPECT_EQ(decodedElements.FormatVersion, randomElements.FormatVersion);
+    EXPECT_EQ(decodedElements.VendorId, randomElements.VendorId);
+    EXPECT_EQ(decodedElements.ProductIdsCount, randomElements.ProductIdsCount);
     for (uint8_t j = 0; j < decodedElements.ProductIdsCount; j++)
     {
-        NL_TEST_ASSERT(inSuite, decodedElements.ProductIds[j] == randomElements.ProductIds[j]);
+        EXPECT_EQ(decodedElements.ProductIds[j], randomElements.ProductIds[j]);
     }
-    NL_TEST_ASSERT(inSuite, decodedElements.DeviceTypeId == randomElements.DeviceTypeId);
-    NL_TEST_ASSERT(inSuite, memcmp(decodedElements.CertificateId, randomElements.CertificateId, kCertificateIdLength) == 0);
-    NL_TEST_ASSERT(inSuite, decodedElements.SecurityLevel == randomElements.SecurityLevel);
-    NL_TEST_ASSERT(inSuite, decodedElements.SecurityInformation == randomElements.SecurityInformation);
-    NL_TEST_ASSERT(inSuite, decodedElements.VersionNumber == randomElements.VersionNumber);
-    NL_TEST_ASSERT(inSuite, decodedElements.CertificationType == randomElements.CertificationType);
-    NL_TEST_ASSERT(inSuite, decodedElements.DACOriginVIDandPIDPresent == randomElements.DACOriginVIDandPIDPresent);
+    EXPECT_EQ(decodedElements.DeviceTypeId, randomElements.DeviceTypeId);
+    EXPECT_EQ(memcmp(decodedElements.CertificateId, randomElements.CertificateId, kCertificateIdLength), 0);
+    EXPECT_EQ(decodedElements.SecurityLevel, randomElements.SecurityLevel);
+    EXPECT_EQ(decodedElements.SecurityInformation, randomElements.SecurityInformation);
+    EXPECT_EQ(decodedElements.VersionNumber, randomElements.VersionNumber);
+    EXPECT_EQ(decodedElements.CertificationType, randomElements.CertificationType);
+    EXPECT_EQ(decodedElements.DACOriginVIDandPIDPresent, randomElements.DACOriginVIDandPIDPresent);
     if (decodedElements.DACOriginVIDandPIDPresent)
     {
-        NL_TEST_ASSERT(inSuite, decodedElements.DACOriginVendorId == randomElements.DACOriginVendorId);
-        NL_TEST_ASSERT(inSuite, decodedElements.DACOriginProductId == randomElements.DACOriginProductId);
+        EXPECT_EQ(decodedElements.DACOriginVendorId, randomElements.DACOriginVendorId);
+        EXPECT_EQ(decodedElements.DACOriginProductId, randomElements.DACOriginProductId);
     }
-    NL_TEST_ASSERT(inSuite, decodedElements.AuthorizedPAAListCount == randomElements.AuthorizedPAAListCount);
+    EXPECT_EQ(decodedElements.AuthorizedPAAListCount, randomElements.AuthorizedPAAListCount);
     for (uint8_t j = 0; j < decodedElements.AuthorizedPAAListCount; j++)
     {
-        NL_TEST_ASSERT(
-            inSuite, memcmp(decodedElements.AuthorizedPAAList[j], randomElements.AuthorizedPAAList[j], kKeyIdentifierLength) == 0);
+        EXPECT_EQ(memcmp(decodedElements.AuthorizedPAAList[j], randomElements.AuthorizedPAAList[j], kKeyIdentifierLength), 0);
     }
 
     CertificationElementsWithoutPIDs decodedElements2;
     CertificationElementsDecoder cdElementsDecoder;
-    NL_TEST_ASSERT(inSuite, DecodeCertificationElements(encodedCDPayload, decodedElements2) == CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeCertificationElements(encodedCDPayload, decodedElements2), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, decodedElements2.formatVersion == randomElements.FormatVersion);
-    NL_TEST_ASSERT(inSuite, decodedElements2.vendorId == randomElements.VendorId);
+    EXPECT_EQ(decodedElements2.formatVersion, randomElements.FormatVersion);
+    EXPECT_EQ(decodedElements2.vendorId, randomElements.VendorId);
     for (uint8_t j = 0; j < randomElements.ProductIdsCount; j++)
     {
-        NL_TEST_ASSERT(inSuite, cdElementsDecoder.IsProductIdIn(encodedCDPayload, randomElements.ProductIds[j]));
+        EXPECT_TRUE(cdElementsDecoder.IsProductIdIn(encodedCDPayload, randomElements.ProductIds[j]));
         // now test for an unexistent ProductId
-        NL_TEST_ASSERT(inSuite, cdElementsDecoder.IsProductIdIn(encodedCDPayload, pid++) == false);
+        EXPECT_FALSE(cdElementsDecoder.IsProductIdIn(encodedCDPayload, pid++));
     }
-    NL_TEST_ASSERT(inSuite, decodedElements2.deviceTypeId == randomElements.DeviceTypeId);
-    NL_TEST_ASSERT(inSuite, memcmp(decodedElements2.certificateId, randomElements.CertificateId, kCertificateIdLength) == 0);
-    NL_TEST_ASSERT(inSuite, decodedElements2.securityLevel == randomElements.SecurityLevel);
-    NL_TEST_ASSERT(inSuite, decodedElements2.securityInformation == randomElements.SecurityInformation);
-    NL_TEST_ASSERT(inSuite, decodedElements2.versionNumber == randomElements.VersionNumber);
-    NL_TEST_ASSERT(inSuite, decodedElements2.certificationType == randomElements.CertificationType);
-    NL_TEST_ASSERT(inSuite, decodedElements2.dacOriginVIDandPIDPresent == randomElements.DACOriginVIDandPIDPresent);
+    EXPECT_EQ(decodedElements2.deviceTypeId, randomElements.DeviceTypeId);
+    EXPECT_EQ(memcmp(decodedElements2.certificateId, randomElements.CertificateId, kCertificateIdLength), 0);
+    EXPECT_EQ(decodedElements2.securityLevel, randomElements.SecurityLevel);
+    EXPECT_EQ(decodedElements2.securityInformation, randomElements.SecurityInformation);
+    EXPECT_EQ(decodedElements2.versionNumber, randomElements.VersionNumber);
+    EXPECT_EQ(decodedElements2.certificationType, randomElements.CertificationType);
+    EXPECT_EQ(decodedElements2.dacOriginVIDandPIDPresent, randomElements.DACOriginVIDandPIDPresent);
     if (decodedElements2.dacOriginVIDandPIDPresent)
     {
-        NL_TEST_ASSERT(inSuite, decodedElements2.dacOriginVendorId == randomElements.DACOriginVendorId);
-        NL_TEST_ASSERT(inSuite, decodedElements2.dacOriginProductId == randomElements.DACOriginProductId);
+        EXPECT_EQ(decodedElements2.dacOriginVendorId, randomElements.DACOriginVendorId);
+        EXPECT_EQ(decodedElements2.dacOriginProductId, randomElements.DACOriginProductId);
     }
-    NL_TEST_ASSERT(inSuite, decodedElements2.authorizedPAAListPresent);
+    EXPECT_TRUE(decodedElements2.authorizedPAAListPresent);
     for (uint8_t j = 0; j < randomElements.AuthorizedPAAListCount; j++)
     {
-        NL_TEST_ASSERT(inSuite,
-                       cdElementsDecoder.HasAuthorizedPAA(encodedCDPayload, ByteSpan(randomElements.AuthorizedPAAList[j])));
+        EXPECT_TRUE(cdElementsDecoder.HasAuthorizedPAA(encodedCDPayload, ByteSpan(randomElements.AuthorizedPAAList[j])));
         // now test for an unexistent PAA
         kid[(kKeyIdentifierLength - 1 - j) % kKeyIdentifierLength] ^= 0x5A;
-        NL_TEST_ASSERT(inSuite, cdElementsDecoder.HasAuthorizedPAA(encodedCDPayload, ByteSpan(kid)) == false);
+        EXPECT_FALSE(cdElementsDecoder.HasAuthorizedPAA(encodedCDPayload, ByteSpan(kid)));
     }
 }
 
-static void TestCD_DefaultCdTrustStore(nlTestSuite * inSuite, void * inContext)
+TEST(TestCertificationDeclaration, TestCD_DefaultCdTrustStore)
 {
     chip::Credentials::CsaCdKeysTrustStore trustStore;
 
     // Make sure that for an untrusted CD, whose key is not in truststore, we cannot find the key.
     {
         ByteSpan signerKeyIdOut;
-        NL_TEST_ASSERT_SUCCESS(inSuite, CMS_ExtractKeyId(ByteSpan(gUntrustedCd), signerKeyIdOut));
-        NL_TEST_ASSERT(inSuite, !trustStore.IsCdTestKey(signerKeyIdOut));
+        EXPECT_EQ(CMS_ExtractKeyId(ByteSpan(gUntrustedCd), signerKeyIdOut), CHIP_NO_ERROR);
+        EXPECT_FALSE(trustStore.IsCdTestKey(signerKeyIdOut));
 
         P256PublicKey pubKey;
-        NL_TEST_ASSERT(inSuite, CHIP_ERROR_KEY_NOT_FOUND == trustStore.LookupVerifyingKey(signerKeyIdOut, pubKey));
+        EXPECT_EQ(CHIP_ERROR_KEY_NOT_FOUND, trustStore.LookupVerifyingKey(signerKeyIdOut, pubKey));
     }
 
     // Verify that a payload known to use the test key passes verification w/ default truststore
     {
         const auto & testCase = sTestCases[0];
         ByteSpan signerKeyIdOut;
-        NL_TEST_ASSERT_SUCCESS(inSuite, CMS_ExtractKeyId(testCase.cdCMSSigned, signerKeyIdOut));
-        NL_TEST_ASSERT(inSuite, trustStore.IsCdTestKey(signerKeyIdOut));
+        EXPECT_EQ(CMS_ExtractKeyId(testCase.cdCMSSigned, signerKeyIdOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(trustStore.IsCdTestKey(signerKeyIdOut));
 
         P256PublicKey pubKey;
         ByteSpan cdContentOut;
-        NL_TEST_ASSERT_SUCCESS(inSuite, trustStore.LookupVerifyingKey(signerKeyIdOut, pubKey));
+        EXPECT_EQ(trustStore.LookupVerifyingKey(signerKeyIdOut, pubKey), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT(inSuite, CMS_Verify(testCase.cdCMSSigned, pubKey, cdContentOut) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(cdContentOut));
+        EXPECT_EQ(CMS_Verify(testCase.cdCMSSigned, pubKey, cdContentOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(testCase.cdContent.data_equal(cdContentOut));
     }
 
     // Verify that after adding the verifying key to the trust store, it is now possible to
@@ -587,49 +574,25 @@
     {
         P256PublicKey pubKey;
         ByteSpan cdContentOut;
-        NL_TEST_ASSERT_SUCCESS(inSuite, trustStore.AddTrustedKey(ByteSpan(gUntrustedCdKid), gUntrustedCdVerifyingKey));
+        EXPECT_EQ(trustStore.AddTrustedKey(ByteSpan(gUntrustedCdKid), gUntrustedCdVerifyingKey), CHIP_NO_ERROR);
 
         ByteSpan signerKeyIdOut;
-        NL_TEST_ASSERT_SUCCESS(inSuite, CMS_ExtractKeyId(ByteSpan(gUntrustedCd), signerKeyIdOut));
-        NL_TEST_ASSERT(inSuite, signerKeyIdOut.data_equal(ByteSpan(gUntrustedCdKid)));
+        EXPECT_EQ(CMS_ExtractKeyId(ByteSpan(gUntrustedCd), signerKeyIdOut), CHIP_NO_ERROR);
+        EXPECT_TRUE(signerKeyIdOut.data_equal(ByteSpan(gUntrustedCdKid)));
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, trustStore.LookupVerifyingKey(signerKeyIdOut, pubKey));
-        NL_TEST_ASSERT(inSuite, pubKey.Matches(gUntrustedCdVerifyingKey));
+        EXPECT_EQ(trustStore.LookupVerifyingKey(signerKeyIdOut, pubKey), CHIP_NO_ERROR);
+        EXPECT_TRUE(pubKey.Matches(gUntrustedCdVerifyingKey));
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, CMS_Verify(ByteSpan(gUntrustedCd), pubKey, cdContentOut));
+        EXPECT_EQ(CMS_Verify(ByteSpan(gUntrustedCd), pubKey, cdContentOut), CHIP_NO_ERROR);
     }
 
     // Verify that untrusted certificate key cannot be added to the trust store.
     {
-        NL_TEST_ASSERT(inSuite, CHIP_ERROR_INVALID_ARGUMENT == trustStore.AddTrustedKey(ByteSpan(gUntrustedCdCert)));
+        EXPECT_EQ(CHIP_ERROR_INVALID_ARGUMENT, trustStore.AddTrustedKey(ByteSpan(gUntrustedCdCert)));
     }
 
     // Verify that trusted certificate key can be added to the trust store.
     {
-        NL_TEST_ASSERT_SUCCESS(inSuite, trustStore.AddTrustedKey(ByteSpan(gCdSigningCert001)));
+        EXPECT_EQ(trustStore.AddTrustedKey(ByteSpan(gCdSigningCert001)), CHIP_NO_ERROR);
     }
 }
-
-#define NL_TEST_DEF_FN(fn) NL_TEST_DEF("Test " #fn, fn)
-/**
- *   Test Suite. It lists all the test functions.
- */
-static const nlTest sTests[] = { NL_TEST_DEF_FN(TestCD_EncodeDecode),
-                                 NL_TEST_DEF_FN(TestCD_EncodeDecode_Errors),
-                                 NL_TEST_DEF_FN(TestCD_CMSSignAndVerify),
-                                 NL_TEST_DEF_FN(TestCD_CMSVerifyAndExtract),
-                                 NL_TEST_DEF_FN(TestCD_CertificationElementsDecoder),
-                                 NL_TEST_DEF_FN(TestCD_EncodeDecode_Random),
-                                 NL_TEST_DEF_FN(TestCD_DefaultCdTrustStore),
-                                 NL_TEST_SENTINEL() };
-
-int TestCertificationDeclaration()
-{
-    nlTestSuite theSuite = { "CHIP Certification Declaration tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestCertificationDeclaration);
diff --git a/src/credentials/tests/TestChipCert.cpp b/src/credentials/tests/TestChipCert.cpp
index 2b0319f..9a6e50b 100644
--- a/src/credentials/tests/TestChipCert.cpp
+++ b/src/credentials/tests/TestChipCert.cpp
@@ -33,10 +33,8 @@
 #include <lib/core/TLV.h>
 #include <lib/support/CHIPMem.h>
 #include <lib/support/CodeUtils.h>
-#include <lib/support/UnitTestExtendedAssertions.h>
-#include <lib/support/UnitTestRegistration.h>
 
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 #include "CHIPCert_error_test_vectors.h"
 #include "CHIPCert_test_vectors.h"
@@ -163,7 +161,13 @@
     validContext.mEffectiveTime = EffectiveTime{};
 }
 
-static void TestChipCert_ChipToX509(nlTestSuite * inSuite, void * inContext)
+struct TestChipCert : public ::testing::Test
+{
+    static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
+    static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
+};
+
+TEST_F(TestChipCert, TestChipCert_ChipToX509)
 {
     CHIP_ERROR err;
     ByteSpan inCert;
@@ -175,23 +179,23 @@
         TestCert certType = gTestCerts[i];
 
         err = GetTestCert(certType, sNullLoadFlag, inCert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
         err = GetTestCert(certType, sDerFormFlag, expectedOutCert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         MutableByteSpan outCert(outCertBuf);
         err = ConvertChipCertToX509Cert(inCert, outCert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, expectedOutCert.data_equal(outCert));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(expectedOutCert.data_equal(outCert));
     }
 
     // Error Case:
     MutableByteSpan outCert(outCertBuf);
     err = ConvertChipCertToX509Cert(sTestCert_Node01_01_Err01_Chip, outCert);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_TLV_TAG);
+    EXPECT_EQ(err, CHIP_ERROR_INVALID_TLV_TAG);
 }
 
-static void TestChipCert_ChipToX509_ErrorCases(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ChipToX509_ErrorCases)
 {
     CHIP_ERROR err;
     uint8_t outCertBuf[kMaxDERCertLength];
@@ -201,22 +205,22 @@
         MutableByteSpan outCert(outCertBuf);
 
         err = ConvertChipCertToX509Cert(chipCert, outCert);
-        NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+        EXPECT_NE(err, CHIP_NO_ERROR);
     }
 }
 
-static void TestChipCert_ChipCertLoad_ErrorCases(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ChipCertLoad_ErrorCases)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
 
     err = certSet.Init(1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     for (auto chipCert : gTestCert_ChipCertLoad_ErrorCases)
     {
         err = certSet.LoadCert(chipCert, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+        EXPECT_NE(err, CHIP_NO_ERROR);
 
         certSet.Clear();
     }
@@ -224,34 +228,34 @@
     certSet.Release();
 }
 
-static void TestChipCert_ValidateChipRCAC_ErrorCases(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ValidateChipRCAC_ErrorCases)
 {
     CHIP_ERROR err;
 
     for (auto chipCert : gTestCert_ValidateChipRCAC_ErrorCases)
     {
         err = ValidateChipRCAC(chipCert);
-        NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+        EXPECT_NE(err, CHIP_NO_ERROR);
     }
 }
 
-static void TestChipCert_GetCertType_ErrorCases(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_GetCertType_ErrorCases)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
 
     err = certSet.Init(1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     for (auto chipCert : gTestCert_GetCertType_ErrorCases)
     {
         CertType certType;
 
         err = certSet.LoadCert(chipCert, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = certSet.GetCertSet()->mSubjectDN.GetCertType(certType);
-        NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR || certType == CertType::kNotSpecified);
+        EXPECT_TRUE(err != CHIP_NO_ERROR || certType == CertType::kNotSpecified);
 
         certSet.Clear();
     }
@@ -259,7 +263,7 @@
     certSet.Release();
 }
 
-static void TestChipCert_X509ToChip(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_X509ToChip)
 {
     CHIP_ERROR err;
     ByteSpan inCert;
@@ -271,18 +275,18 @@
         TestCert certType = gTestCerts[i];
 
         err = GetTestCert(certType, sDerFormFlag, inCert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
         err = GetTestCert(certType, sNullLoadFlag, expectedOutCert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         MutableByteSpan outCert(outCertBuf);
         err = ConvertX509CertToChipCert(inCert, outCert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, expectedOutCert.data_equal(outCert));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(expectedOutCert.data_equal(outCert));
     }
 }
 
-static void TestChipCert_X509ToChip_ErrorCases(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_X509ToChip_ErrorCases)
 {
     CHIP_ERROR err;
     uint8_t outCertBuf[kMaxCHIPCertLength];
@@ -292,11 +296,11 @@
         MutableByteSpan outCert(outCertBuf);
 
         err = ConvertX509CertToChipCert(derCert, outCert);
-        NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+        EXPECT_NE(err, CHIP_NO_ERROR);
     }
 }
 
-static void TestChipCert_ChipDN(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ChipDN)
 {
     const static char noc_rdn[]     = "Test NOC";
     const static char noc_rdn2[]    = "John";
@@ -305,51 +309,51 @@
     ChipDN chip_dn;
     CertType certType = CertType::kFirmwareSigning; // Start with non-default value
 
-    NL_TEST_ASSERT(inSuite, chip_dn.IsEmpty());
-    NL_TEST_ASSERT(inSuite, chip_dn.RDNCount() == 0);
-    NL_TEST_ASSERT(inSuite, chip_dn.GetCertType(certType) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.IsEmpty() == true);
-    NL_TEST_ASSERT(inSuite, certType == CertType::kNotSpecified);
+    EXPECT_TRUE(chip_dn.IsEmpty());
+    EXPECT_EQ(chip_dn.RDNCount(), 0);
+    EXPECT_EQ(chip_dn.GetCertType(certType), CHIP_NO_ERROR);
+    EXPECT_TRUE(chip_dn.IsEmpty());
+    EXPECT_EQ(certType, CertType::kNotSpecified);
 
-    NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_CommonName(CharSpan(noc_rdn, strlen(noc_rdn)), false) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_MatterNodeId(0xAAAABBBBCCCCDDDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_GivenName(CharSpan(noc_rdn2, strlen(noc_rdn2)), true) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.AddCATs(noc_cats) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.RDNCount() == 5);
+    EXPECT_EQ(chip_dn.AddAttribute_CommonName(CharSpan(noc_rdn, strlen(noc_rdn)), false), CHIP_NO_ERROR);
+    EXPECT_EQ(chip_dn.AddAttribute_MatterNodeId(0xAAAABBBBCCCCDDDD), CHIP_NO_ERROR);
+    EXPECT_EQ(chip_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
+    EXPECT_EQ(chip_dn.AddAttribute_GivenName(CharSpan(noc_rdn2, strlen(noc_rdn2)), true), CHIP_NO_ERROR);
+    EXPECT_EQ(chip_dn.AddCATs(noc_cats), CHIP_NO_ERROR);
+    EXPECT_EQ(chip_dn.RDNCount(), 5);
 
-    NL_TEST_ASSERT(inSuite, chip_dn.AddAttribute_GivenName(CharSpan(noc_rdn2, strlen(noc_rdn2)), true) == CHIP_ERROR_NO_MEMORY);
-    NL_TEST_ASSERT(inSuite, chip_dn.RDNCount() == 5);
+    EXPECT_EQ(chip_dn.AddAttribute_GivenName(CharSpan(noc_rdn2, strlen(noc_rdn2)), true), CHIP_ERROR_NO_MEMORY);
+    EXPECT_EQ(chip_dn.RDNCount(), 5);
 
-    NL_TEST_ASSERT(inSuite, chip_dn.GetCertType(certType) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certType == CertType::kNode);
+    EXPECT_EQ(chip_dn.GetCertType(certType), CHIP_NO_ERROR);
+    EXPECT_EQ(certType, CertType::kNode);
 
     uint64_t certId;
-    NL_TEST_ASSERT(inSuite, chip_dn.GetCertChipId(certId) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certId == 0xAAAABBBBCCCCDDDD);
+    EXPECT_EQ(chip_dn.GetCertChipId(certId), CHIP_NO_ERROR);
+    EXPECT_EQ(certId, 0xAAAABBBBCCCCDDDD);
 
     uint64_t fabricId;
-    NL_TEST_ASSERT(inSuite, chip_dn.GetCertFabricId(fabricId) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, fabricId == 0xFAB00000FAB00001);
+    EXPECT_EQ(chip_dn.GetCertFabricId(fabricId), CHIP_NO_ERROR);
+    EXPECT_EQ(fabricId, 0xFAB00000FAB00001);
 
     chip_dn.Clear();
-    NL_TEST_ASSERT(inSuite, chip_dn.GetCertType(certType) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, chip_dn.IsEmpty() == true);
-    NL_TEST_ASSERT(inSuite, certType == CertType::kNotSpecified);
+    EXPECT_EQ(chip_dn.GetCertType(certType), CHIP_NO_ERROR);
+    EXPECT_TRUE(chip_dn.IsEmpty());
+    EXPECT_EQ(certType, CertType::kNotSpecified);
 
     CATValues noc_cats2;
     chip::CATValues::Serialized serializedCATs;
-    NL_TEST_ASSERT(inSuite, noc_cats.Serialize(serializedCATs) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_cats2.Deserialize(serializedCATs) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, memcmp(&noc_cats, &noc_cats2, chip::CATValues::kSerializedLength) == 0);
+    EXPECT_EQ(noc_cats.Serialize(serializedCATs), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_cats2.Deserialize(serializedCATs), CHIP_NO_ERROR);
+    EXPECT_EQ(memcmp(&noc_cats, &noc_cats2, chip::CATValues::kSerializedLength), 0);
 
     CATValues noc_cats3 = { { 0xABCD0001, 0xFFEEAA00, 0x0001F012 } };
-    NL_TEST_ASSERT(inSuite, noc_cats3.Serialize(serializedCATs) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_cats2.Deserialize(serializedCATs) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, memcmp(&noc_cats3, &noc_cats2, chip::CATValues::kSerializedLength) == 0);
+    EXPECT_EQ(noc_cats3.Serialize(serializedCATs), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_cats2.Deserialize(serializedCATs), CHIP_NO_ERROR);
+    EXPECT_EQ(memcmp(&noc_cats3, &noc_cats2, chip::CATValues::kSerializedLength), 0);
 }
 
-static void TestChipCert_CertValidation(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_CertValidation)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
@@ -512,29 +516,28 @@
     {
         const ChipCertificateData * resultCert = nullptr;
         err                                    = certSet.Init(kMaxCertsPerTestCase);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         for (auto inputCert : testCase.InputCerts)
         {
             if (inputCert.Type != TestCert::kNone)
             {
                 err = LoadTestCert(certSet, inputCert.Type, inputCert.LoadFlags, inputCert.DecodeFlags);
-                NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+                EXPECT_EQ(err, CHIP_NO_ERROR);
             }
         }
         // Make sure the test case is valid.
-        NL_TEST_ASSERT(inSuite, testCase.mSubjectCertIndex >= 0 && testCase.mSubjectCertIndex < certSet.GetCertCount());
+        EXPECT_TRUE(testCase.mSubjectCertIndex >= 0 && testCase.mSubjectCertIndex < certSet.GetCertCount());
         if (testCase.mExpectedResult == CHIP_NO_ERROR)
         {
-            NL_TEST_ASSERT(inSuite, testCase.mExpectedCertIndex >= 0 && testCase.mExpectedCertIndex < certSet.GetCertCount());
-            NL_TEST_ASSERT(inSuite,
-                           testCase.mExpectedTrustAnchorIndex >= 0 && testCase.mExpectedTrustAnchorIndex < certSet.GetCertCount());
+            EXPECT_TRUE(testCase.mExpectedCertIndex >= 0 && testCase.mExpectedCertIndex < certSet.GetCertCount());
+            EXPECT_TRUE(testCase.mExpectedTrustAnchorIndex >= 0 && testCase.mExpectedTrustAnchorIndex < certSet.GetCertCount());
         }
 
         // Initialize the validation context.
         validContext.Reset();
         err = SetCurrentTime(validContext, 2021, 1, 1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
         validContext.mRequiredKeyUsages.Set(KeyUsageFlags::kDigitalSignature);
         validContext.mRequiredKeyPurposes.Set(KeyPurposeFlags::kServerAuth);
         validContext.mRequiredKeyPurposes.Set(KeyPurposeFlags::kClientAuth);
@@ -546,16 +549,16 @@
 
         // Invoke the FindValidCert() method (the method being tested).
         err = certSet.FindValidCert(subjectDN, subjectKeyId, validContext, &resultCert);
-        NL_TEST_ASSERT(inSuite, err == testCase.mExpectedResult);
+        EXPECT_EQ(err, testCase.mExpectedResult);
 
         // If the test case is expected to be successful...
         if (err == CHIP_NO_ERROR)
         {
             // Verify that the method found the correct certificate.
-            NL_TEST_ASSERT(inSuite, resultCert == &certSet.GetCertSet()[testCase.mExpectedCertIndex]);
+            EXPECT_EQ(resultCert, &certSet.GetCertSet()[testCase.mExpectedCertIndex]);
 
             // Verify that the method selected the correct trust anchor.
-            NL_TEST_ASSERT(inSuite, validContext.mTrustAnchor == &certSet.GetCertSet()[testCase.mExpectedTrustAnchorIndex]);
+            EXPECT_EQ(validContext.mTrustAnchor, &certSet.GetCertSet()[testCase.mExpectedTrustAnchorIndex]);
         }
 
         // Clear the certificate set.
@@ -563,17 +566,17 @@
     }
 }
 
-static void TestChipCert_CertValidTime(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_CertValidTime)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
     ValidationContext validContext;
 
     err = certSet.Init(kStandardCertsCount);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     err = LoadTestCertSet01(certSet);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     validContext.Reset();
     validContext.mRequiredKeyUsages.Set(KeyUsageFlags::kDigitalSignature);
@@ -588,248 +591,248 @@
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Current time before certificate validity period.
     err = SetCurrentTime(validContext, 2020, 1, 3);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
 
     // Current time 1 second before validity period.
     err = SetCurrentTime(validContext, 2020, 10, 15, 14, 23, 42);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
 
     // Current time 1st second of validity period.
     err = SetCurrentTime(validContext, 2020, 10, 15, 14, 23, 43);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Current time within validity period.
     err = SetCurrentTime(validContext, 2022, 02, 23, 12, 30, 01);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Current time at last second of validity period.
     err = SetCurrentTime(validContext, 2040, 10, 15, 14, 23, 42);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Current time at 1 second after end of certificate validity period.
     err = SetCurrentTime(validContext, 2040, 10, 15, 14, 23, 43);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
 
     // Current time after end of certificate validity period.
     err = SetCurrentTime(validContext, 2042, 4, 25, 0, 0, 0);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
 
     // Last known good time before certificate validity period.
     // We can't invalidate based on NotBefore with Last Known Good Time.
     // Hence, we expect CHIP_NO_ERROR.
     err = SetLastKnownGoodTime(validContext, 2020, 1, 3);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Last known good time 1 second before certificate validity period.
     // We can't invalidate based on NotBefore with Last Known Good Time.
     // Hence, we expect CHIP_NO_ERROR.
     err = SetLastKnownGoodTime(validContext, 2020, 10, 15, 14, 23, 42);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Last Known Good Time 1st second of validity period.
     err = SetLastKnownGoodTime(validContext, 2020, 10, 15, 14, 23, 43);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Last Known Good Time within validity period.
     err = SetLastKnownGoodTime(validContext, 2022, 02, 23, 12, 30, 01);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Last Known Good Time at last second of validity period.
     err = SetLastKnownGoodTime(validContext, 2040, 10, 15, 14, 23, 42);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Last Known Good Time at 1 second after end of certificate validity period.
     err = SetLastKnownGoodTime(validContext, 2040, 10, 15, 14, 23, 43);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
 
     // Last Known Good Time after end of certificate validity period.
     err = SetLastKnownGoodTime(validContext, 2042, 4, 25, 0, 0, 0);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictCertificateValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimeValidityPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
 
     certSet.Release();
 }
 
-static void TestChipCert_ValidateChipRCAC(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ValidateChipRCAC)
 {
     struct RCACTestCase
     {
@@ -855,8 +858,8 @@
     for (auto & testCase : sRCACTestCases)
     {
         ByteSpan cert;
-        NL_TEST_ASSERT(inSuite, GetTestCert(testCase.Cert, sNullLoadFlag, cert) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, ValidateChipRCAC(cert) == testCase.mExpectedResult);
+        EXPECT_EQ(GetTestCert(testCase.Cert, sNullLoadFlag, cert), CHIP_NO_ERROR);
+        EXPECT_EQ(ValidateChipRCAC(cert), testCase.mExpectedResult);
     }
 }
 
@@ -884,7 +887,7 @@
     }
 };
 
-static void TestChipCert_CertValidityPolicyInjection(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_CertValidityPolicyInjection)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
@@ -895,10 +898,10 @@
     AlwaysRejectValidityPolicy alwaysRejectPolicy;
 
     err = certSet.Init(kStandardCertsCount);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     err = LoadTestCertSet01(certSet);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     validContext.Reset();
     validContext.mRequiredKeyUsages.Set(KeyUsageFlags::kDigitalSignature);
@@ -910,170 +913,170 @@
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimePolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     // Curent time before certificate validity period.
     err = SetCurrentTime(validContext, 2020, 1, 3);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimePolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_NOT_VALID_YET);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_NOT_VALID_YET);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     // Last known good time before certificate validity period.
     err = SetLastKnownGoodTime(validContext, 2020, 1, 3);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     // Current time during validity period
     err = SetCurrentTime(validContext, 2022, 02, 23, 12, 30, 01);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     // Last Known Good Time during validity period
     err = SetLastKnownGoodTime(validContext, 2022, 02, 23, 12, 30, 01);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimePolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     // Current time after end of certificate validity period.
     err = SetCurrentTime(validContext, 2042, 4, 25, 0, 0, 0);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimePolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     // Last Known Good Time after end of certificate validity period.
     err = SetLastKnownGoodTime(validContext, 2042, 4, 25, 0, 0, 0);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Default policy
     validContext.mValidityPolicy = nullptr;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Strict policy
     validContext.mValidityPolicy = &strictPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Last Known Good Time policy
     validContext.mValidityPolicy = &lastKnownGoodTimePolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_CERT_EXPIRED);
+    EXPECT_EQ(err, CHIP_ERROR_CERT_EXPIRED);
     // Always accept policy
     validContext.mValidityPolicy = &alwaysAcceptPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     // Always reject policy
     validContext.mValidityPolicy = &alwaysRejectPolicy;
     err                          = certSet.ValidateCert(certSet.GetLastCert(), validContext);
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 
     certSet.Release();
 }
 
-static void TestChipCert_CertUsage(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_CertUsage)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
@@ -1164,10 +1167,10 @@
     size_t sNumUsageTestCases = ArraySize(sUsageTestCases);
 
     err = certSet.Init(certDataArray, ArraySize(certDataArray));
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     err = LoadTestCertSet01(certSet);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     for (size_t i = 0; i < sNumUsageTestCases; i++)
     {
@@ -1176,16 +1179,16 @@
         validContext.mRequiredKeyPurposes = sUsageTestCases[i].mRequiredKeyPurposes;
 
         err = SetCurrentTime(validContext, 2020, 10, 16);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = certSet.ValidateCert(&certSet.GetCertSet()[sUsageTestCases[i].mCertIndex], validContext);
-        NL_TEST_ASSERT(inSuite, err == sUsageTestCases[i].mExpectedResult);
+        EXPECT_EQ(err, sUsageTestCases[i].mExpectedResult);
     }
 
     certSet.Release();
 }
 
-static void TestChipCert_CertType(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_CertType)
 {
     CHIP_ERROR err;
     ChipCertificateData certData;
@@ -1218,16 +1221,16 @@
         CertType certType;
 
         err = DecodeTestCert(certData, testCase.Cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = certData.mSubjectDN.GetCertType(certType);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT(inSuite, certType == testCase.ExpectedCertType);
+        EXPECT_EQ(certType, testCase.ExpectedCertType);
     }
 }
 
-static void TestChipCert_CertId(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_CertId)
 {
     CHIP_ERROR err;
     ChipCertificateData certData;
@@ -1260,114 +1263,114 @@
         uint64_t chipId;
 
         err = DecodeTestCert(certData, testCase.Cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = certData.mSubjectDN.GetCertChipId(chipId);
         if (testCase.ExpectedCertId != 0)
         {
-            NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, chipId == testCase.ExpectedCertId);
+            EXPECT_EQ(err, CHIP_NO_ERROR);
+            EXPECT_EQ(chipId, testCase.ExpectedCertId);
         }
         else
         {
-            NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_WRONG_CERT_DN);
+            EXPECT_EQ(err, CHIP_ERROR_WRONG_CERT_DN);
         }
     }
 }
 
-static void TestChipCert_DecodingOptions(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_DecodingOptions)
 {
     CHIP_ERROR err;
     ByteSpan cert;
     ChipCertificateData certData;
 
     err = GetTestCert(TestCert::kRoot01, sNullLoadFlag, cert);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Decode with default (null) options
     err = DecodeChipCert(cert, certData);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !certData.mCertFlags.Has(CertFlags::kIsTrustAnchor));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(certData.mCertFlags.Has(CertFlags::kIsTrustAnchor));
 
     // Decode as trust anchor
     err = DecodeChipCert(cert, certData, CertDecodeFlags::kIsTrustAnchor);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certData.mCertFlags.Has(CertFlags::kIsTrustAnchor));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(certData.mCertFlags.Has(CertFlags::kIsTrustAnchor));
 
     // Decode with TBS Hash calculation
     err = DecodeChipCert(cert, certData, CertDecodeFlags::kGenerateTBSHash);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certData.mCertFlags.Has(CertFlags::kTBSHashPresent));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(certData.mCertFlags.Has(CertFlags::kTBSHashPresent));
     // When the TBS hash is available signature verification should work
     err = VerifyCertSignature(certData, certData); // test cert is a self-signed root
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 }
 
-static void TestChipCert_LoadDuplicateCerts(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_LoadDuplicateCerts)
 {
     CHIP_ERROR err;
     ChipCertificateSet certSet;
     ValidationContext validContext;
 
     err = certSet.Init(kStandardCertsCount);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Let's load two distinct certificates, and make sure cert count is 2
     err = LoadTestCert(certSet, TestCert::kRoot01, sNullLoadFlag, sTrustAnchorFlag);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     err = LoadTestCert(certSet, TestCert::kICA01, sNullLoadFlag, sGenTBSHashFlag);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.GetCertCount() == 2);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.GetCertCount(), 2);
 
     // Let's load a previously loaded cert and make sure cert count is still 2
     err = LoadTestCert(certSet, TestCert::kRoot01, sNullLoadFlag, sTrustAnchorFlag);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.GetCertCount() == 2);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.GetCertCount(), 2);
 
     // Let's load the other previously loaded cert and make sure cert count is still 2
     err = LoadTestCert(certSet, TestCert::kICA01, sNullLoadFlag, sGenTBSHashFlag);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.GetCertCount() == 2);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.GetCertCount(), 2);
 
     // Let's load a new cert and make sure cert count updates to 3
     err = LoadTestCert(certSet, TestCert::kNode01_01, sNullLoadFlag, sGenTBSHashFlag);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.GetCertCount() == 3);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.GetCertCount(), 3);
 }
 
-static void TestChipCert_GenerateRootCert(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_GenerateRootCert)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     uint8_t signed_cert[kMaxDERCertLength];
 
     ChipCertificateData certData;
 
     ChipDN root_dn;
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterRCACId(0xabcdabcd) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterRCACId(0xabcdabcd), CHIP_NO_ERROR);
 
     X509CertRequestParams root_params = { 1234, 631161876, 729942000, root_dn, root_dn };
     MutableByteSpan signed_cert_span(signed_cert);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params, keypair, signed_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewRootX509Cert(root_params, keypair, signed_cert_span), CHIP_NO_ERROR);
 
     uint8_t outCertBuf[kMaxCHIPCertLength];
     MutableByteSpan outCert(outCertBuf);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span, outCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span, outCert), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 
     // Test with FutureExtension
     X509CertRequestParams root_params2 = { 1234, 631161876, 729942000, root_dn, root_dn, kSubjectAltNameAsFutureExt };
     MutableByteSpan signed_cert_span2(signed_cert);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params2, keypair, signed_cert_span2) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewRootX509Cert(root_params2, keypair, signed_cert_span2), CHIP_NO_ERROR);
     outCert = MutableByteSpan(outCertBuf);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span2, outCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span2, outCert), CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 
     // Test with no defined notAfter time.
     {
@@ -1378,41 +1381,41 @@
                                                .IssuerDN      = root_dn };
         MutableByteSpan signed_cert_span_no_expiry(signed_cert);
 
-        NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params3, keypair, signed_cert_span_no_expiry) == CHIP_NO_ERROR);
+        EXPECT_EQ(NewRootX509Cert(root_params3, keypair, signed_cert_span_no_expiry), CHIP_NO_ERROR);
         outCert = MutableByteSpan(outCertBuf);
 
-        NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span_no_expiry, outCert) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, certData.mNotAfterTime == kNullCertTime);
+        EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span_no_expiry, outCert), CHIP_NO_ERROR);
+        EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
+        EXPECT_EQ(certData.mNotAfterTime, kNullCertTime);
     }
 
     // Test error case: root cert subject provided ICA OID Attribute.
     root_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, root_params.SubjectDN.AddAttribute_MatterICACId(0xabcdabcd) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_params.SubjectDN.AddAttribute_MatterICACId(0xabcdabcd), CHIP_NO_ERROR);
     root_params.IssuerDN.Clear();
-    NL_TEST_ASSERT(inSuite, root_params.IssuerDN.AddAttribute_MatterICACId(0xabcdabcd) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_params.IssuerDN.AddAttribute_MatterICACId(0xabcdabcd), CHIP_NO_ERROR);
     MutableByteSpan signed_cert_span1(signed_cert);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params, keypair, signed_cert_span1) == CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(NewRootX509Cert(root_params, keypair, signed_cert_span1), CHIP_ERROR_INVALID_ARGUMENT);
 
     // Test error case: root cert provided different subject and issuer DNs.
     root_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, root_params.SubjectDN.AddAttribute_MatterRCACId(0xabcdabcd) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_params.SubjectDN.AddAttribute_MatterRCACId(0xabcdabcd), CHIP_NO_ERROR);
     root_params.IssuerDN.Clear();
-    NL_TEST_ASSERT(inSuite, root_params.IssuerDN.AddAttribute_MatterRCACId(0xffffeeee) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params, keypair, signed_cert_span1) == CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(root_params.IssuerDN.AddAttribute_MatterRCACId(0xffffeeee), CHIP_NO_ERROR);
+    EXPECT_EQ(NewRootX509Cert(root_params, keypair, signed_cert_span1), CHIP_ERROR_INVALID_ARGUMENT);
 
     // Test that serial number cannot be negative
     root_params.IssuerDN.Clear();
-    NL_TEST_ASSERT(inSuite, root_params.IssuerDN.AddAttribute_MatterRCACId(0xabcdabcd) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_params.IssuerDN.AddAttribute_MatterRCACId(0xabcdabcd), CHIP_NO_ERROR);
     root_params.SerialNumber = -1;
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params, keypair, signed_cert_span1) == CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(NewRootX509Cert(root_params, keypair, signed_cert_span1), CHIP_ERROR_INVALID_ARGUMENT);
 }
 
-static void TestChipCert_GenerateRootFabCert(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_GenerateRootFabCert)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     uint8_t signed_cert[kMaxDERCertLength];
 
@@ -1422,24 +1425,24 @@
     MutableByteSpan outCert(outCertBuf);
 
     ChipDN root_dn;
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterRCACId(0xabcdabcd) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterFabricId(0xabcd) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterRCACId(0xabcdabcd), CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterFabricId(0xabcd), CHIP_NO_ERROR);
 
     X509CertRequestParams root_params_fabric = { 1234, 631161876, 729942000, root_dn, root_dn };
 
     MutableByteSpan signed_cert_span(signed_cert);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params_fabric, keypair, signed_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewRootX509Cert(root_params_fabric, keypair, signed_cert_span), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span, outCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span, outCert), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 }
 
-static void TestChipCert_GenerateICACert(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_GenerateICACert)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     uint8_t signed_cert[kMaxDERCertLength];
 
@@ -1449,51 +1452,49 @@
     ChipCertificateData certData;
 
     ChipDN ica_dn;
-    NL_TEST_ASSERT(inSuite, ica_dn.AddAttribute_MatterICACId(0xABCDABCDABCDABCD) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_dn.AddAttribute_MatterICACId(0xABCDABCDABCDABCD), CHIP_NO_ERROR);
     ChipDN issuer_dn;
-    NL_TEST_ASSERT(inSuite, issuer_dn.AddAttribute_MatterRCACId(0x43215678FEDCABCD) == CHIP_NO_ERROR);
+    EXPECT_EQ(issuer_dn.AddAttribute_MatterRCACId(0x43215678FEDCABCD), CHIP_NO_ERROR);
 
     X509CertRequestParams ica_params = { 1234, 631161876, 729942000, ica_dn, issuer_dn };
     P256Keypair ica_keypair;
-    NL_TEST_ASSERT(inSuite, ica_keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     MutableByteSpan signed_cert_span(signed_cert);
-    NL_TEST_ASSERT(inSuite, NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, signed_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, signed_cert_span), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span, outCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span, outCert), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 
     // Test with FutureExtension
     X509CertRequestParams ica_params2 = { 1234, 631161876, 729942000, ica_dn, issuer_dn, kSubjectAltNameAsFutureExt };
     MutableByteSpan signed_cert_span2(signed_cert);
-    NL_TEST_ASSERT(inSuite, NewICAX509Cert(ica_params2, ica_keypair.Pubkey(), keypair, signed_cert_span2) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewICAX509Cert(ica_params2, ica_keypair.Pubkey(), keypair, signed_cert_span2), CHIP_NO_ERROR);
     outCert = MutableByteSpan(outCertBuf);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span2, outCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span2, outCert), CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 
     // Test error case: ICA cert subject provided a node ID attribute
     ica_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, ica_params.SubjectDN.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, ica_params.SubjectDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_params.SubjectDN.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD), CHIP_NO_ERROR);
+    EXPECT_EQ(ica_params.SubjectDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
     MutableByteSpan signed_cert_span1(signed_cert);
-    NL_TEST_ASSERT(inSuite,
-                   NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, signed_cert_span1) == CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, signed_cert_span1), CHIP_ERROR_INVALID_ARGUMENT);
 
     // Test that serial number cannot be negative
     ica_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, ica_params.SubjectDN.AddAttribute_MatterICACId(0xABCDABCDABCDABCD) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_params.SubjectDN.AddAttribute_MatterICACId(0xABCDABCDABCDABCD), CHIP_NO_ERROR);
     ica_params.SerialNumber = -1;
-    NL_TEST_ASSERT(inSuite,
-                   NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, signed_cert_span1) == CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, signed_cert_span1), CHIP_ERROR_INVALID_ARGUMENT);
 }
 
-static void TestChipCert_GenerateNOCRoot(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_GenerateNOCRoot)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     uint8_t signed_cert[kMaxDERCertLength];
 
@@ -1503,68 +1504,62 @@
     ChipCertificateData certData;
 
     ChipDN noc_dn;
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
     ChipDN issuer_dn;
-    NL_TEST_ASSERT(inSuite, issuer_dn.AddAttribute_MatterRCACId(0x8888999944442222) == CHIP_NO_ERROR);
+    EXPECT_EQ(issuer_dn.AddAttribute_MatterRCACId(0x8888999944442222), CHIP_NO_ERROR);
 
     X509CertRequestParams noc_params = { 123456, 631161876, 729942000, noc_dn, issuer_dn };
     P256Keypair noc_keypair;
-    NL_TEST_ASSERT(inSuite, noc_keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     MutableByteSpan signed_cert_span(signed_cert, sizeof(signed_cert));
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span, outCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span, outCert), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 
     // Test with FutureExtension
     X509CertRequestParams noc_params2 = { 123456, 631161876, 729942000, noc_dn, issuer_dn, kSubjectAltNameAsFutureExt };
     MutableByteSpan signed_cert_span2(signed_cert);
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params2, noc_keypair.Pubkey(), keypair, signed_cert_span2) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params2, noc_keypair.Pubkey(), keypair, signed_cert_span2), CHIP_NO_ERROR);
     outCert = MutableByteSpan(outCertBuf);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span2, outCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span2, outCert), CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 
     // Test error case: NOC cert subject doesn't have NodeId attribute
     noc_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, noc_params.SubjectDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_params.SubjectDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
 
     MutableByteSpan signed_cert_span1(signed_cert, sizeof(signed_cert));
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span1) ==
-                       CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span1),
+              CHIP_ERROR_INVALID_ARGUMENT);
 
     // Test error case: NOC cert subject doesn't have fabric ID attribute
     noc_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, noc_params.SubjectDN.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_params.SubjectDN.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span1) ==
-                       CHIP_ERROR_WRONG_CERT_DN);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span1), CHIP_ERROR_WRONG_CERT_DN);
 
     // Test error case: issuer cert DN type is Node certificate
     noc_params.SubjectDN.Clear();
-    NL_TEST_ASSERT(inSuite, noc_params.SubjectDN.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_params.SubjectDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_params.SubjectDN.AddAttribute_MatterNodeId(0xABCDABCDABCDABCD), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_params.SubjectDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
     noc_params.IssuerDN.Clear();
-    NL_TEST_ASSERT(inSuite, noc_params.IssuerDN.AddAttribute_MatterNodeId(0x8888999944442222) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_params.IssuerDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_params.IssuerDN.AddAttribute_MatterNodeId(0x8888999944442222), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_params.IssuerDN.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span1) ==
-                       CHIP_ERROR_INVALID_ARGUMENT);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span1),
+              CHIP_ERROR_INVALID_ARGUMENT);
 }
 
-static void TestChipCert_GenerateNOCICA(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_GenerateNOCICA)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     uint8_t signed_cert[kMaxDERCertLength];
 
@@ -1581,78 +1576,75 @@
     const static char noc_name_rdn[]      = "Smith";
 
     ChipDN noc_dn;
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_CommonName(CharSpan(noc_cn_rdn, strlen(noc_cn_rdn)), false) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterNodeId(0xAAAABBBBCCCCDDDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite,
-                   noc_dn.AddAttribute_GivenName(CharSpan(noc_givenname_rdn, strlen(noc_givenname_rdn)), true) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_Name(CharSpan(noc_name_rdn, strlen(noc_name_rdn)), true) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_CommonName(CharSpan(noc_cn_rdn, strlen(noc_cn_rdn)), false), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterNodeId(0xAAAABBBBCCCCDDDD), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_GivenName(CharSpan(noc_givenname_rdn, strlen(noc_givenname_rdn)), true), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_Name(CharSpan(noc_name_rdn, strlen(noc_name_rdn)), true), CHIP_NO_ERROR);
 
     ChipDN ica_dn;
-    NL_TEST_ASSERT(inSuite, ica_dn.AddAttribute_MatterICACId(0x8888999944442222) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, ica_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_dn.AddAttribute_MatterICACId(0x8888999944442222), CHIP_NO_ERROR);
+    EXPECT_EQ(ica_dn.AddAttribute_MatterFabricId(0xFAB00000FAB00001), CHIP_NO_ERROR);
 
     X509CertRequestParams noc_params = { 12348765, 631161876, 729942000, noc_dn, ica_dn };
     P256Keypair noc_keypair;
-    NL_TEST_ASSERT(inSuite, noc_keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     MutableByteSpan signed_cert_span(signed_cert);
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, signed_cert_span), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(signed_cert_span, outCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(signed_cert_span, outCert), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertChipCertToX509Cert(outCert, outCertDER) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, signed_cert_span.data_equal(outCertDER));
+    EXPECT_EQ(ConvertChipCertToX509Cert(outCert, outCertDER), CHIP_NO_ERROR);
+    EXPECT_TRUE(signed_cert_span.data_equal(outCertDER));
 
-    NL_TEST_ASSERT(inSuite, DecodeChipCert(outCert, certData) == CHIP_NO_ERROR);
+    EXPECT_EQ(DecodeChipCert(outCert, certData), CHIP_NO_ERROR);
 }
 
-static void TestChipCert_VerifyGeneratedCerts(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_VerifyGeneratedCerts)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     static uint8_t root_cert[kMaxDERCertLength];
 
     ChipDN root_dn;
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterRCACId(0xAAAABBBBCCCCDDDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterFabricId(0xFAB0000000008888) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterRCACId(0xAAAABBBBCCCCDDDD), CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterFabricId(0xFAB0000000008888), CHIP_NO_ERROR);
 
     X509CertRequestParams root_params = { 1234, 631161876, 729942000, root_dn, root_dn };
     MutableByteSpan root_cert_span(root_cert);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params, keypair, root_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewRootX509Cert(root_params, keypair, root_cert_span), CHIP_NO_ERROR);
 
     static uint8_t ica_cert[kMaxDERCertLength];
 
     ChipDN ica_dn;
-    NL_TEST_ASSERT(inSuite, ica_dn.AddAttribute_MatterICACId(0xAABBCCDDAABBCCDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, ica_dn.AddAttribute_MatterFabricId(0xFAB0000000008888) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_dn.AddAttribute_MatterICACId(0xAABBCCDDAABBCCDD), CHIP_NO_ERROR);
+    EXPECT_EQ(ica_dn.AddAttribute_MatterFabricId(0xFAB0000000008888), CHIP_NO_ERROR);
 
     X509CertRequestParams ica_params = { 12345, 631161876, 729942000, ica_dn, root_dn };
     P256Keypair ica_keypair;
-    NL_TEST_ASSERT(inSuite, ica_keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(ica_keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     MutableByteSpan ica_cert_span(ica_cert);
-    NL_TEST_ASSERT(inSuite, NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, ica_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewICAX509Cert(ica_params, ica_keypair.Pubkey(), keypair, ica_cert_span), CHIP_NO_ERROR);
 
     static uint8_t noc_cert[kMaxDERCertLength];
 
     ChipDN noc_dn;
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterNodeId(0xAABBCCDDAABBCCDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterFabricId(0xFAB0000000008888) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterNodeId(0xAABBCCDDAABBCCDD), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterFabricId(0xFAB0000000008888), CHIP_NO_ERROR);
 
     X509CertRequestParams noc_params = { 123456, 631161876, 729942000, noc_dn, ica_dn };
     P256Keypair noc_keypair;
-    NL_TEST_ASSERT(inSuite, noc_keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     MutableByteSpan noc_cert_span(noc_cert, sizeof(noc_cert));
-    NL_TEST_ASSERT(inSuite,
-                   NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), ica_keypair, noc_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), ica_keypair, noc_cert_span), CHIP_NO_ERROR);
 
     ChipCertificateSet certSet;
-    NL_TEST_ASSERT(inSuite, certSet.Init(3) == CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.Init(3), CHIP_NO_ERROR);
 
     static uint8_t chipRootCertBuf[kMaxCHIPCertLength];
     static uint8_t chipICACertBuf[kMaxCHIPCertLength];
@@ -1661,19 +1653,19 @@
     MutableByteSpan chipICACert(chipICACertBuf);
     MutableByteSpan chipNOCCert(chipNOCCertBuf);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(root_cert_span, chipRootCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.LoadCert(chipRootCert, sTrustAnchorFlag) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(root_cert_span, chipRootCert), CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.LoadCert(chipRootCert, sTrustAnchorFlag), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(ica_cert_span, chipICACert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.LoadCert(chipICACert, sGenTBSHashFlag) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(ica_cert_span, chipICACert), CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.LoadCert(chipICACert, sGenTBSHashFlag), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(noc_cert_span, chipNOCCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.LoadCert(chipNOCCert, sGenTBSHashFlag) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(noc_cert_span, chipNOCCert), CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.LoadCert(chipNOCCert, sGenTBSHashFlag), CHIP_NO_ERROR);
 
     ValidationContext validContext;
 
     validContext.Reset();
-    NL_TEST_ASSERT(inSuite, SetCurrentTime(validContext, 2022, 1, 1) == CHIP_NO_ERROR);
+    EXPECT_EQ(SetCurrentTime(validContext, 2022, 1, 1), CHIP_NO_ERROR);
     validContext.mRequiredKeyUsages.Set(KeyUsageFlags::kDigitalSignature);
     validContext.mRequiredKeyPurposes.Set(KeyPurposeFlags::kServerAuth);
     validContext.mRequiredKeyPurposes.Set(KeyPurposeFlags::kClientAuth);
@@ -1683,63 +1675,63 @@
     const CertificateKeyId & subjectKeyId = certSet.GetCertSet()[2].mSubjectKeyId;
 
     const ChipCertificateData * resultCert = nullptr;
-    NL_TEST_ASSERT(inSuite, certSet.FindValidCert(subjectDN, subjectKeyId, validContext, &resultCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.FindValidCert(subjectDN, subjectKeyId, validContext, &resultCert), CHIP_NO_ERROR);
 }
 
-static void TestChipCert_VerifyGeneratedCertsNoICA(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_VerifyGeneratedCertsNoICA)
 {
     // Generate a new keypair for cert signing
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     static uint8_t root_cert[kMaxDERCertLength];
 
     const static char root_cn_rdn[] = "Test Root Operational Cert";
 
     ChipDN root_dn;
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_CommonName(CharSpan(root_cn_rdn, strlen(root_cn_rdn)), false) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterRCACId(0xAAAABBBBCCCCDDDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, root_dn.AddAttribute_MatterFabricId(0xFAB0000000008888) == CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_CommonName(CharSpan(root_cn_rdn, strlen(root_cn_rdn)), false), CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterRCACId(0xAAAABBBBCCCCDDDD), CHIP_NO_ERROR);
+    EXPECT_EQ(root_dn.AddAttribute_MatterFabricId(0xFAB0000000008888), CHIP_NO_ERROR);
 
     X509CertRequestParams root_params = { 1234, 631161876, 729942000, root_dn, root_dn };
     MutableByteSpan root_cert_span(root_cert);
-    NL_TEST_ASSERT(inSuite, NewRootX509Cert(root_params, keypair, root_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewRootX509Cert(root_params, keypair, root_cert_span), CHIP_NO_ERROR);
 
     static uint8_t noc_cert[kMaxDERCertLength];
 
     const static char noc_cn_rdn[] = "Test NOC";
 
     ChipDN noc_dn;
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_CommonName(CharSpan(noc_cn_rdn, strlen(noc_cn_rdn)), true) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterNodeId(0xAABBCCDDAABBCCDD) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterFabricId(0xFAB0000000008888) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, noc_dn.AddAttribute_MatterCASEAuthTag(0xABCD0010) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_CommonName(CharSpan(noc_cn_rdn, strlen(noc_cn_rdn)), true), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterNodeId(0xAABBCCDDAABBCCDD), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterFabricId(0xFAB0000000008888), CHIP_NO_ERROR);
+    EXPECT_EQ(noc_dn.AddAttribute_MatterCASEAuthTag(0xABCD0010), CHIP_NO_ERROR);
 
     X509CertRequestParams noc_params = { 1234, 631161876, 729942000, noc_dn, root_dn };
     P256Keypair noc_keypair;
-    NL_TEST_ASSERT(inSuite, noc_keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(noc_keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     MutableByteSpan noc_cert_span(noc_cert);
-    NL_TEST_ASSERT(inSuite, NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, noc_cert_span) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewNodeOperationalX509Cert(noc_params, noc_keypair.Pubkey(), keypair, noc_cert_span), CHIP_NO_ERROR);
 
     ChipCertificateSet certSet;
-    NL_TEST_ASSERT(inSuite, certSet.Init(2) == CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.Init(2), CHIP_NO_ERROR);
 
     static uint8_t chipRootCertBuf[kMaxCHIPCertLength];
     static uint8_t chipNOCCertBuf[kMaxCHIPCertLength];
     MutableByteSpan chipRootCert(chipRootCertBuf);
     MutableByteSpan chipNOCCert(chipNOCCertBuf);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(root_cert_span, chipRootCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.LoadCert(chipRootCert, sTrustAnchorFlag) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(root_cert_span, chipRootCert), CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.LoadCert(chipRootCert, sTrustAnchorFlag), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(noc_cert_span, chipNOCCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certSet.LoadCert(chipNOCCert, sGenTBSHashFlag) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(noc_cert_span, chipNOCCert), CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.LoadCert(chipNOCCert, sGenTBSHashFlag), CHIP_NO_ERROR);
 
     ValidationContext validContext;
 
     validContext.Reset();
-    NL_TEST_ASSERT(inSuite, SetCurrentTime(validContext, 2022, 1, 1) == CHIP_NO_ERROR);
+    EXPECT_EQ(SetCurrentTime(validContext, 2022, 1, 1), CHIP_NO_ERROR);
     validContext.mRequiredKeyUsages.Set(KeyUsageFlags::kDigitalSignature);
     validContext.mRequiredKeyPurposes.Set(KeyPurposeFlags::kServerAuth);
     validContext.mRequiredKeyPurposes.Set(KeyPurposeFlags::kClientAuth);
@@ -1749,10 +1741,10 @@
     const CertificateKeyId & subjectKeyId = certSet.GetCertSet()[1].mSubjectKeyId;
 
     const ChipCertificateData * resultCert = nullptr;
-    NL_TEST_ASSERT(inSuite, certSet.FindValidCert(subjectDN, subjectKeyId, validContext, &resultCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(certSet.FindValidCert(subjectDN, subjectKeyId, validContext, &resultCert), CHIP_NO_ERROR);
 }
 
-static void TestChipCert_ExtractNodeIdFabricId(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ExtractNodeIdFabricId)
 {
     struct TestCase
     {
@@ -1784,14 +1776,14 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(testCase.Cert, sNullLoadFlag, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         NodeId nodeId;
         FabricId fabricId;
         err = ExtractNodeIdFabricIdFromOpCert(cert, &nodeId, &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, nodeId == testCase.ExpectedNodeId);
-        NL_TEST_ASSERT(inSuite, fabricId == testCase.ExpectedFabricId);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(nodeId, testCase.ExpectedNodeId);
+        EXPECT_EQ(fabricId, testCase.ExpectedFabricId);
     }
 
     // Test node ID and fabric ID extraction from the parsed form.
@@ -1799,17 +1791,17 @@
     for (auto & testCase : sTestCases)
     {
         CHIP_ERROR err = certSet.Init(1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = LoadTestCert(certSet, testCase.Cert, sNullLoadFlag, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         NodeId nodeId;
         FabricId fabricId;
         err = ExtractNodeIdFabricIdFromOpCert(certSet.GetCertSet()[0], &nodeId, &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, nodeId == testCase.ExpectedNodeId);
-        NL_TEST_ASSERT(inSuite, fabricId == testCase.ExpectedFabricId);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(nodeId, testCase.ExpectedNodeId);
+        EXPECT_EQ(fabricId, testCase.ExpectedFabricId);
         certSet.Release();
     }
 
@@ -1818,27 +1810,27 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(testCase.Cert, sNullLoadFlag, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         FabricId fabricId;
         err = ExtractFabricIdFromCert(cert, &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, fabricId == testCase.ExpectedFabricId);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(fabricId, testCase.ExpectedFabricId);
     }
 
     // Test fabric ID extraction from the parsed form.
     for (auto & testCase : sTestCases)
     {
         CHIP_ERROR err = certSet.Init(1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = LoadTestCert(certSet, testCase.Cert, sNullLoadFlag, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         FabricId fabricId;
         err = ExtractFabricIdFromCert(certSet.GetCertSet()[0], &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, fabricId == testCase.ExpectedFabricId);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(fabricId, testCase.ExpectedFabricId);
         certSet.Release();
     }
 
@@ -1846,29 +1838,29 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(TestCert::kICA01, sNullLoadFlag, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         FabricId fabricId;
         err = ExtractFabricIdFromCert(cert, &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
     }
 
     // Test extraction from the parsed form of ICA Cert that doesn't have FabricId.
     {
         CHIP_ERROR err = certSet.Init(1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = LoadTestCert(certSet, TestCert::kICA01, sNullLoadFlag, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         FabricId fabricId;
         err = ExtractFabricIdFromCert(certSet.GetCertSet()[0], &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
         certSet.Release();
     }
 }
 
-static void TestChipCert_ExtractOperationalDiscoveryId(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ExtractOperationalDiscoveryId)
 {
     struct TestCase
     {
@@ -1901,30 +1893,30 @@
         ByteSpan noc;
         ByteSpan rcac;
         CHIP_ERROR err = GetTestCert(testCase.Noc, sNullLoadFlag, noc);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
         err = GetTestCert(testCase.Rcac, sNullLoadFlag, rcac);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         // Extract Node ID and Fabric ID from the leaf node certificate.
         NodeId nodeId;
         FabricId fabricId;
         err = ExtractNodeIdFabricIdFromOpCert(noc, &nodeId, &fabricId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, nodeId == testCase.ExpectedNodeId);
-        NL_TEST_ASSERT(inSuite, fabricId == testCase.ExpectedFabricId);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(nodeId, testCase.ExpectedNodeId);
+        EXPECT_EQ(fabricId, testCase.ExpectedFabricId);
 
         // Extract Node ID, Fabric ID and Compressed Fabric ID from the
         // NOC and root certificate.
         CompressedFabricId compressedFabricId;
         err = ExtractNodeIdFabricIdCompressedFabricIdFromOpCerts(rcac, noc, compressedFabricId, fabricId, nodeId);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, compressedFabricId == testCase.ExpectedCompressedFabricId);
-        NL_TEST_ASSERT(inSuite, fabricId == testCase.ExpectedFabricId);
-        NL_TEST_ASSERT(inSuite, nodeId == testCase.ExpectedNodeId);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(compressedFabricId, testCase.ExpectedCompressedFabricId);
+        EXPECT_EQ(fabricId, testCase.ExpectedFabricId);
+        EXPECT_EQ(nodeId, testCase.ExpectedNodeId);
     }
 }
 
-static void TestChipCert_ExtractAndValidateCATsFromOpCert(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ExtractAndValidateCATsFromOpCert)
 {
     struct TestCase
     {
@@ -1954,12 +1946,12 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(testCase.Cert, sNullLoadFlag, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         CATValues cats;
         err = ExtractCATsFromOpCert(cert, cats);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, memcmp(&cats, &testCase.ExpectedCATs, sizeof(cats)) == 0);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(memcmp(&cats, &testCase.ExpectedCATs, sizeof(cats)), 0);
     }
 
     // Test extraction from the parsed form.
@@ -1967,15 +1959,15 @@
     for (auto & testCase : sTestCases)
     {
         CHIP_ERROR err = certSet.Init(1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = LoadTestCert(certSet, testCase.Cert, sNullLoadFlag, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         CATValues cats;
         err = ExtractCATsFromOpCert(certSet.GetCertSet()[0], cats);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, memcmp(&cats, &testCase.ExpectedCATs, sizeof(cats)) == 0);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(memcmp(&cats, &testCase.ExpectedCATs, sizeof(cats)), 0);
 
         certSet.Release();
     }
@@ -1983,14 +1975,14 @@
     // Error case: trying to extract CAT from Root Cert.
     {
         CHIP_ERROR err = certSet.Init(1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         err = LoadTestCert(certSet, TestCert::kRoot01, sNullLoadFlag, sNullDecodeFlag);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         CATValues cats;
         err = ExtractCATsFromOpCert(certSet.GetCertSet()[0], cats);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
+        EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
 
         certSet.Release();
     }
@@ -1999,18 +1991,18 @@
     {
         CATValues cats;
         CHIP_ERROR err = ExtractCATsFromOpCert(ByteSpan(sChipTest_NOC_Subject_CAT_Invalid_Cert_CHIP), cats);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
+        EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
     }
 
     // Error case: NOC with multiple versions of the same CAT tag.
     {
         CATValues cats;
         CHIP_ERROR err = ExtractCATsFromOpCert(ByteSpan(sChipTest_NOC_Subject_CAT_Twice_Cert_CHIP), cats);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_WRONG_CERT_DN);
+        EXPECT_EQ(err, CHIP_ERROR_WRONG_CERT_DN);
     }
 }
 
-static void TestChipCert_ExtractSubjectDNFromChipCert(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ExtractSubjectDNFromChipCert)
 {
     struct TestCase
     {
@@ -2019,29 +2011,28 @@
     };
 
     ChipDN expectedSubjectDN_Root01;
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Root01.AddAttribute_MatterRCACId(0xCACACACA00000001) == CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Root01.AddAttribute_MatterRCACId(0xCACACACA00000001), CHIP_NO_ERROR);
 
     ChipDN expectedSubjectDN_Root02;
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Root02.AddAttribute_MatterRCACId(0xCACACACA00000002) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Root02.AddAttribute_MatterFabricId(0xFAB000000000001D) == CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Root02.AddAttribute_MatterRCACId(0xCACACACA00000002), CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Root02.AddAttribute_MatterFabricId(0xFAB000000000001D), CHIP_NO_ERROR);
 
     ChipDN expectedSubjectDN_ICA02;
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_ICA02.AddAttribute_MatterICACId(0xCACACACA00000004) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_ICA02.AddAttribute_MatterFabricId(0xFAB000000000001D) == CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_ICA02.AddAttribute_MatterICACId(0xCACACACA00000004), CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_ICA02.AddAttribute_MatterFabricId(0xFAB000000000001D), CHIP_NO_ERROR);
 
     ChipDN expectedSubjectDN_Node01_01;
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Node01_01.AddAttribute_MatterNodeId(0xDEDEDEDE00010001) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Node01_01.AddAttribute_MatterFabricId(0xFAB000000000001D) == CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Node01_01.AddAttribute_MatterNodeId(0xDEDEDEDE00010001), CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Node01_01.AddAttribute_MatterFabricId(0xFAB000000000001D), CHIP_NO_ERROR);
 
     const static char commonName_RDN[] = "TestCert02_03";
 
     ChipDN expectedSubjectDN_Node02_03;
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Node02_03.AddAttribute_MatterNodeId(0xDEDEDEDE00020003) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Node02_03.AddAttribute_MatterFabricId(0xFAB000000000001D) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite,
-                   expectedSubjectDN_Node02_03.AddAttribute_CommonName(CharSpan(commonName_RDN, strlen(commonName_RDN)), false) ==
-                       CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, expectedSubjectDN_Node02_03.AddAttribute_MatterCASEAuthTag(0xABCD0001) == CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Node02_03.AddAttribute_MatterNodeId(0xDEDEDEDE00020003), CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Node02_03.AddAttribute_MatterFabricId(0xFAB000000000001D), CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Node02_03.AddAttribute_CommonName(CharSpan(commonName_RDN, strlen(commonName_RDN)), false),
+              CHIP_NO_ERROR);
+    EXPECT_EQ(expectedSubjectDN_Node02_03.AddAttribute_MatterCASEAuthTag(0xABCD0001), CHIP_NO_ERROR);
 
     // clang-format off
     TestCase sTestCases[] = {
@@ -2061,15 +2052,15 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(testCase.Cert, sNullLoadFlag, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         ChipDN subjectDN;
         err = ExtractSubjectDNFromChipCert(cert, subjectDN);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         if (!testCase.ExpectedSubjectDN.IsEmpty())
         {
-            NL_TEST_ASSERT(inSuite, subjectDN.IsEqual(testCase.ExpectedSubjectDN));
+            EXPECT_TRUE(subjectDN.IsEqual(testCase.ExpectedSubjectDN));
         }
     }
 
@@ -2078,20 +2069,20 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(testCase.Cert, TestCertLoadFlags::kDERForm, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         ChipDN subjectDN;
         err = ExtractSubjectDNFromX509Cert(cert, subjectDN);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         if (!testCase.ExpectedSubjectDN.IsEmpty())
         {
-            NL_TEST_ASSERT(inSuite, subjectDN.IsEqual(testCase.ExpectedSubjectDN));
+            EXPECT_TRUE(subjectDN.IsEqual(testCase.ExpectedSubjectDN));
         }
     }
 }
 
-static void TestChipCert_ExtractPublicKeyAndSKID(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_ExtractPublicKeyAndSKID)
 {
     struct TestCase
     {
@@ -2127,28 +2118,28 @@
     {
         ByteSpan cert;
         CHIP_ERROR err = GetTestCert(testCase.Cert, sNullLoadFlag, cert);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
         P256PublicKeySpan publicKey;
         err = ExtractPublicKeyFromChipCert(cert, publicKey);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, publicKey.data_equal(testCase.ExpectedPublicKey));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(publicKey.data_equal(testCase.ExpectedPublicKey));
 
         CertificateKeyId skid;
         err = ExtractSKIDFromChipCert(cert, skid);
         if (!testCase.ExpectedSKID.empty())
         {
-            NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, skid.data_equal(testCase.ExpectedSKID));
+            EXPECT_EQ(err, CHIP_NO_ERROR);
+            EXPECT_TRUE(skid.data_equal(testCase.ExpectedSKID));
         }
         else
         {
-            NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+            EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
         }
     }
 }
 
-static void TestChipCert_PDCIdentityValidation(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_PDCIdentityValidation)
 {
     CertificateKeyIdStorage keyId;
 
@@ -2156,134 +2147,52 @@
     for (auto && cert : { sTestCert_PDCID01_Chip, sTestCert_PDCID01_ChipCompact })
     {
         // Validate only
-        NL_TEST_ASSERT(inSuite, ValidateChipNetworkIdentity(cert) == CHIP_NO_ERROR);
+        EXPECT_EQ(ValidateChipNetworkIdentity(cert), CHIP_NO_ERROR);
 
         // Validate and calculate identifier
         keyId.fill(0xaa);
-        NL_TEST_ASSERT(inSuite, ValidateChipNetworkIdentity(cert, keyId) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, CertificateKeyId(keyId).data_equal(sTestCert_PDCID01_KeyId));
+        EXPECT_EQ(ValidateChipNetworkIdentity(cert, keyId), CHIP_NO_ERROR);
+        EXPECT_TRUE(CertificateKeyId(keyId).data_equal(sTestCert_PDCID01_KeyId));
 
         // Extract identifier only
         keyId.fill(0xaa);
-        NL_TEST_ASSERT(inSuite, ExtractIdentifierFromChipNetworkIdentity(cert, keyId) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, CertificateKeyId(keyId).data_equal(sTestCert_PDCID01_KeyId));
+        EXPECT_EQ(ExtractIdentifierFromChipNetworkIdentity(cert, keyId), CHIP_NO_ERROR);
+        EXPECT_TRUE(CertificateKeyId(keyId).data_equal(sTestCert_PDCID01_KeyId));
     }
 }
 
-static void TestChipCert_PDCIdentityGeneration(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_PDCIdentityGeneration)
 {
     // Generate a new keypair
     P256Keypair keypair;
-    NL_TEST_ASSERT(inSuite, keypair.Initialize(ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(keypair.Initialize(ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     // Generate an identity certificate based on the keypair
     uint8_t buffer[kMaxCHIPCompactNetworkIdentityLength];
     MutableByteSpan cert(buffer);
-    NL_TEST_ASSERT(inSuite, NewChipNetworkIdentity(keypair, cert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, ValidateChipNetworkIdentity(cert) == CHIP_NO_ERROR);
+    EXPECT_EQ(NewChipNetworkIdentity(keypair, cert), CHIP_NO_ERROR);
+    EXPECT_EQ(ValidateChipNetworkIdentity(cert), CHIP_NO_ERROR);
 
     // It should round-trip to X.509 DER and back, and remain valid.
     uint8_t derBuffer[kMaxDERCertLength];
     MutableByteSpan derCert(derBuffer);
-    NL_TEST_ASSERT(inSuite, ConvertChipCertToX509Cert(cert, derCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertChipCertToX509Cert(cert, derCert), CHIP_NO_ERROR);
     uint8_t tlvBuffer[kMaxCHIPCertLength];
     MutableByteSpan tlvCert(tlvBuffer); // won't be compact after round-tripping
-    NL_TEST_ASSERT(inSuite, ConvertX509CertToChipCert(derCert, tlvCert) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, ValidateChipNetworkIdentity(tlvCert) == CHIP_NO_ERROR);
+    EXPECT_EQ(ConvertX509CertToChipCert(derCert, tlvCert), CHIP_NO_ERROR);
+    EXPECT_EQ(ValidateChipNetworkIdentity(tlvCert), CHIP_NO_ERROR);
 }
 
-static void TestChipCert_KeypairConversion(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestChipCert, TestChipCert_KeypairConversion)
 {
     P256SerializedKeypair keypair;
-    NL_TEST_ASSERT_SUCCESS(inSuite, GetTestCertKeypair(kPDCID01, keypair));
+    EXPECT_EQ(GetTestCertKeypair(kPDCID01, keypair), CHIP_NO_ERROR);
 
     uint8_t buffer[kP256ECPrivateKeyDERLength];
     MutableByteSpan keypairDer(buffer);
-    NL_TEST_ASSERT_SUCCESS(inSuite, ConvertECDSAKeypairRawToDER(keypair, keypairDer));
+    EXPECT_EQ(ConvertECDSAKeypairRawToDER(keypair, keypairDer), CHIP_NO_ERROR);
 
     // Technically the curve name and public key are optional in the DER format,
     // but both our code and standard tools include them, so we can just compare.
-    NL_TEST_ASSERT(inSuite, keypairDer.data_equal(sTestCert_PDCID01_KeypairDER));
+    EXPECT_TRUE(keypairDer.data_equal(sTestCert_PDCID01_KeypairDER));
 }
-
-/**
- *  Set up the test suite.
- */
-int TestChipCert_Setup(void * inContext)
-{
-    CHIP_ERROR error = chip::Platform::MemoryInit();
-
-    if (error != CHIP_NO_ERROR)
-    {
-        return FAILURE;
-    }
-
-    return SUCCESS;
-}
-
-/**
- *  Tear down the test suite.
- */
-int TestChipCert_Teardown(void * inContext)
-{
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
-/**
- *   Test Suite. It lists all the test functions.
- */
-// clang-format off
-static const nlTest sTests[] = {
-    NL_TEST_DEF("Test CHIP Certificate CHIP to X509 Conversion", TestChipCert_ChipToX509),
-    NL_TEST_DEF("Test CHIP Certificate CHIP to X509 Conversion - Error Cases", TestChipCert_ChipToX509_ErrorCases),
-    NL_TEST_DEF("Test CHIP Certificate Loading - Error Cases", TestChipCert_ChipCertLoad_ErrorCases),
-    NL_TEST_DEF("Test CHIP Certificate Validate RCAC - Error Cases", TestChipCert_ValidateChipRCAC_ErrorCases),
-    NL_TEST_DEF("Test CHIP Certificate Get Cert Type from Subject - Error Cases", TestChipCert_GetCertType_ErrorCases),
-    NL_TEST_DEF("Test CHIP Certificate X509 to CHIP Conversion", TestChipCert_X509ToChip),
-    NL_TEST_DEF("Test CHIP Certificate X509 to CHIP Conversion - Error Cases", TestChipCert_X509ToChip_ErrorCases),
-    NL_TEST_DEF("Test CHIP Certificate Distinguish Name", TestChipCert_ChipDN),
-    NL_TEST_DEF("Test CHIP Certificate Validation", TestChipCert_CertValidation),
-    NL_TEST_DEF("Test CHIP Certificate Validation time", TestChipCert_CertValidTime),
-    NL_TEST_DEF("Test CHIP Root Certificate Validation", TestChipCert_ValidateChipRCAC),
-    NL_TEST_DEF("Test CHIP Certificate Validity Policy injection", TestChipCert_CertValidityPolicyInjection),
-    NL_TEST_DEF("Test CHIP Certificate Usage", TestChipCert_CertUsage),
-    NL_TEST_DEF("Test CHIP Certificate Type", TestChipCert_CertType),
-    NL_TEST_DEF("Test CHIP Certificate ID", TestChipCert_CertId),
-    NL_TEST_DEF("Test CHIP Certificate Decoding Options", TestChipCert_DecodingOptions),
-    NL_TEST_DEF("Test Loading Duplicate Certificates", TestChipCert_LoadDuplicateCerts),
-    NL_TEST_DEF("Test CHIP Generate Root Certificate", TestChipCert_GenerateRootCert),
-    NL_TEST_DEF("Test CHIP Generate Root Certificate with Fabric", TestChipCert_GenerateRootFabCert),
-    NL_TEST_DEF("Test CHIP Generate ICA Certificate", TestChipCert_GenerateICACert),
-    NL_TEST_DEF("Test CHIP Generate NOC using Root", TestChipCert_GenerateNOCRoot),
-    NL_TEST_DEF("Test CHIP Generate NOC using ICA", TestChipCert_GenerateNOCICA),
-    NL_TEST_DEF("Test CHIP Verify Generated Cert Chain", TestChipCert_VerifyGeneratedCerts),
-    NL_TEST_DEF("Test CHIP Verify Generated Cert Chain No ICA", TestChipCert_VerifyGeneratedCertsNoICA),
-    NL_TEST_DEF("Test extracting Node ID and Fabric ID from node certificate", TestChipCert_ExtractNodeIdFabricId),
-    NL_TEST_DEF("Test extracting Operational Discovery ID from node and root certificate", TestChipCert_ExtractOperationalDiscoveryId),
-    NL_TEST_DEF("Test extracting and validating CASE Authenticated Tags from NOC", TestChipCert_ExtractAndValidateCATsFromOpCert),
-    NL_TEST_DEF("Test extracting Subject DN from chip certificate", TestChipCert_ExtractSubjectDNFromChipCert),
-    NL_TEST_DEF("Test extracting PublicKey and SKID from chip certificate", TestChipCert_ExtractPublicKeyAndSKID),
-    NL_TEST_DEF("Test PDC Identity Validation", TestChipCert_PDCIdentityValidation),
-    NL_TEST_DEF("Test PDC Identity Generation", TestChipCert_PDCIdentityGeneration),
-    NL_TEST_DEF("Test keypair conversion", TestChipCert_KeypairConversion),
-    NL_TEST_SENTINEL()
-};
-// clang-format on
-
-int TestChipCert()
-{
-    // clang-format off
-    nlTestSuite theSuite =
-    {
-        "Credentials-CHIP-Certs",
-        &sTests[0],
-        TestChipCert_Setup,
-        TestChipCert_Teardown
-    };
-    // clang-format on
-    nlTestRunner(&theSuite, nullptr);
-    return (nlTestRunnerStats(&theSuite));
-}
-
-CHIP_REGISTER_TEST_SUITE(TestChipCert);
diff --git a/src/credentials/tests/TestCommissionerDUTVectors.cpp b/src/credentials/tests/TestCommissionerDUTVectors.cpp
index 4c7efea..55beafd 100644
--- a/src/credentials/tests/TestCommissionerDUTVectors.cpp
+++ b/src/credentials/tests/TestCommissionerDUTVectors.cpp
@@ -29,10 +29,8 @@
 #include <lib/core/CHIPError.h>
 #include <lib/support/CHIPMem.h>
 #include <lib/support/Span.h>
-#include <lib/support/UnitTestExtendedAssertions.h>
-#include <lib/support/UnitTestRegistration.h>
 
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 #include <dirent.h>
 #include <stdio.h>
@@ -49,10 +47,17 @@
     *pResult                                = result;
 }
 
-static void TestCommissionerDUTVectors(nlTestSuite * inSuite, void * inContext)
+struct TestCommissionerDUTVectors : public ::testing::Test
+{
+    static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
+
+    static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
+};
+
+TEST_F(TestCommissionerDUTVectors, TestCommissionerDUTVectors)
 {
     DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(GetTestAttestationTrustStore());
-    NL_TEST_ASSERT(inSuite, example_dac_verifier != nullptr);
+    ASSERT_NE(example_dac_verifier, nullptr);
 
     std::string dirPath("../../../../../credentials/development/commissioner_dut/");
     DIR * dir = opendir(dirPath.c_str());
@@ -105,14 +110,14 @@
         VendorId vid = TestVendor1;
         uint16_t pid = strstr(entry->d_name, "_vidpid_fallback_encoding_") ? 0x00B1 : 0x8000;
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, dacProvider.GetCertificationDeclaration(certDeclSpan));
-        NL_TEST_ASSERT_SUCCESS(inSuite, dacProvider.GetDeviceAttestationCert(dacCertSpan));
-        NL_TEST_ASSERT_SUCCESS(inSuite, dacProvider.GetProductAttestationIntermediateCert(paiCertSpan));
+        EXPECT_EQ(dacProvider.GetCertificationDeclaration(certDeclSpan), CHIP_NO_ERROR);
+        EXPECT_EQ(dacProvider.GetDeviceAttestationCert(dacCertSpan), CHIP_NO_ERROR);
+        EXPECT_EQ(dacProvider.GetProductAttestationIntermediateCert(paiCertSpan), CHIP_NO_ERROR);
 
         size_t attestationElementsLen =
             TLV::EstimateStructOverhead(certDeclSpan.size(), attestationNonceSpan.size(), sizeof(uint64_t) * 8);
         Platform::ScopedMemoryBuffer<uint8_t> attestationElements;
-        NL_TEST_ASSERT(inSuite, attestationElements.Alloc(attestationElementsLen + attestationChallengeSpan.size()));
+        EXPECT_TRUE(attestationElements.Alloc(attestationElementsLen + attestationChallengeSpan.size()));
         MutableByteSpan attestationElementsSpan(attestationElements.Get(), attestationElementsLen);
 
         // Construct attestation elements
@@ -121,10 +126,9 @@
             Credentials::DeviceAttestationVendorReservedConstructor emptyVendorReserved(nullptr, 0);
             const ByteSpan kEmptyFirmwareInfo;
 
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   Credentials::ConstructAttestationElements(certDeclSpan, attestationNonceSpan, timestamp,
-                                                                             kEmptyFirmwareInfo, emptyVendorReserved,
-                                                                             attestationElementsSpan));
+            EXPECT_EQ(Credentials::ConstructAttestationElements(certDeclSpan, attestationNonceSpan, timestamp, kEmptyFirmwareInfo,
+                                                                emptyVendorReserved, attestationElementsSpan),
+                      CHIP_NO_ERROR);
         }
 
         // Generate attestation signature
@@ -134,8 +138,8 @@
                    attestationChallengeSpan.size());
             ByteSpan tbsSpan(attestationElementsSpan.data(), attestationElementsSpan.size() + attestationChallengeSpan.size());
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, dacProvider.SignWithDeviceAttestationKey(tbsSpan, attestationSignatureSpan));
-            NL_TEST_ASSERT(inSuite, attestationSignatureSpan.size() == signature.Capacity());
+            EXPECT_EQ(dacProvider.SignWithDeviceAttestationKey(tbsSpan, attestationSignatureSpan), CHIP_NO_ERROR);
+            EXPECT_EQ(attestationSignatureSpan.size(), signature.Capacity());
         }
 
         AttestationVerificationResult attestationResult = AttestationVerificationResult::kNotImplemented;
@@ -167,63 +171,12 @@
 
         if (isSuccessCase)
         {
-            NL_TEST_ASSERT(inSuite, attestationResult == AttestationVerificationResult::kSuccess);
+            EXPECT_EQ(attestationResult, AttestationVerificationResult::kSuccess);
         }
         else
         {
-            NL_TEST_ASSERT(inSuite, attestationResult != AttestationVerificationResult::kSuccess);
+            EXPECT_NE(attestationResult, AttestationVerificationResult::kSuccess);
         }
     }
     closedir(dir);
 }
-
-/**
- *  Set up the test suite.
- */
-int TestCommissionerDUT_Setup(void * inContext)
-{
-    CHIP_ERROR error = chip::Platform::MemoryInit();
-
-    if (error != CHIP_NO_ERROR)
-    {
-        return FAILURE;
-    }
-
-    return SUCCESS;
-}
-
-/**
- *  Tear down the test suite.
- */
-int TestCommissionerDUT_Teardown(void * inContext)
-{
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
-/**
- *   Test Suite. It lists all the test functions.
- */
-// clang-format off
-static const nlTest sTests[] = {
-    NL_TEST_DEF("Test Device Attestation Credentials Vectors", TestCommissionerDUTVectors),
-    NL_TEST_SENTINEL()
-};
-// clang-format on
-
-int TestCommissionerDUT()
-{
-    // clang-format off
-    nlTestSuite theSuite =
-    {
-        "Device Attestation Credentials Test Vectors",
-        &sTests[0],
-        TestCommissionerDUT_Setup,
-        TestCommissionerDUT_Teardown
-    };
-    // clang-format on
-    nlTestRunner(&theSuite, nullptr);
-    return (nlTestRunnerStats(&theSuite));
-}
-
-CHIP_REGISTER_TEST_SUITE(TestCommissionerDUT);
diff --git a/src/credentials/tests/TestDeviceAttestationConstruction.cpp b/src/credentials/tests/TestDeviceAttestationConstruction.cpp
index 8d1b017..e624b25 100644
--- a/src/credentials/tests/TestDeviceAttestationConstruction.cpp
+++ b/src/credentials/tests/TestDeviceAttestationConstruction.cpp
@@ -22,15 +22,20 @@
 #include <lib/support/CodeUtils.h>
 #include <lib/support/ScopedBuffer.h>
 #include <lib/support/Span.h>
-#include <lib/support/UnitTestRegistration.h>
 
 #include <cstdio>
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 using namespace chip;
 using namespace chip::Credentials;
 
-static void TestAttestationElements_Roundtrip(nlTestSuite * inSuite, void * inContext)
+struct TestDeviceAttestationConstruction : public ::testing::Test
+{
+    static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
+    static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
+};
+
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_Roundtrip)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
     chip::Platform::ScopedMemoryBuffer<uint8_t> attestationElements;
@@ -67,7 +72,7 @@
     attestationElements.Alloc(attestationElementsLen);
     vendorReservedConstructor.addVendorReservedElement(vendorId, profileNum, 1, ByteSpan(vendorReserved1));
     vendorReservedConstructor.addVendorReservedElement(vendorId, profileNum, 3, ByteSpan(vendorReserved3));
-    NL_TEST_ASSERT(inSuite, attestationElements);
+    EXPECT_TRUE(attestationElements);
 
     {
         MutableByteSpan attestationElementsSpan(attestationElements.Get(), attestationElementsLen);
@@ -76,22 +81,22 @@
         err = ConstructAttestationElements(ByteSpan(certificationDeclaration),
                                            ByteSpan(attestationNonce, sizeof(attestationNonce) - 1), timestamp, ByteSpan(),
                                            vendorReservedConstructor, attestationElementsSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
+        EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
 
         // Test with missing mandatory TLV entries
         err = ConstructAttestationElements(ByteSpan(), ByteSpan(attestationNonce), timestamp, ByteSpan(), vendorReservedConstructor,
                                            attestationElementsSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
+        EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
 
         // Test with missing mandatory TLV entries
         err = ConstructAttestationElements(ByteSpan(certificationDeclaration), ByteSpan(), timestamp, ByteSpan(),
                                            vendorReservedConstructor, attestationElementsSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
+        EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
 
         // Test for success with entirely valid arguments
         err = ConstructAttestationElements(ByteSpan(certificationDeclaration), ByteSpan(attestationNonce), timestamp, ByteSpan(),
                                            vendorReservedConstructor, attestationElementsSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
         attestationElementsLen = attestationElementsSpan.size();
     }
 
@@ -104,13 +109,13 @@
     err =
         DeconstructAttestationElements(ByteSpan(attestationElements.Get(), attestationElementsLen), certificationDeclarationSpan,
                                        attestationNonceSpan, timestampDeconstructed, firmwareInfoSpan, vendorReservedDeconstructor);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, certificationDeclarationSpan.data_equal(ByteSpan(certificationDeclaration)));
-    NL_TEST_ASSERT(inSuite, attestationNonceSpan.data_equal(ByteSpan(attestationNonce)));
-    NL_TEST_ASSERT(inSuite, timestamp == timestampDeconstructed);
-    NL_TEST_ASSERT(inSuite, firmwareInfoSpan.empty());
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(certificationDeclarationSpan.data_equal(ByteSpan(certificationDeclaration)));
+    EXPECT_TRUE(attestationNonceSpan.data_equal(ByteSpan(attestationNonce)));
+    EXPECT_EQ(timestamp, timestampDeconstructed);
+    EXPECT_TRUE(firmwareInfoSpan.empty());
 
-    NL_TEST_ASSERT(inSuite, vendorReservedConstructor.GetNumberOfElements() == vendorReservedDeconstructor.GetNumberOfElements());
+    EXPECT_EQ(vendorReservedConstructor.GetNumberOfElements(), vendorReservedDeconstructor.GetNumberOfElements());
 
     const VendorReservedElement * constructionElement = vendorReservedConstructor.cbegin();
     VendorReservedElement deconstructionElement;
@@ -118,13 +123,13 @@
     while ((constructionElement = vendorReservedConstructor.Next()) != nullptr &&
            vendorReservedDeconstructor.GetNextVendorReservedElement(deconstructionElement) == CHIP_NO_ERROR)
     {
-        NL_TEST_ASSERT(inSuite, constructionElement->vendorId == deconstructionElement.vendorId);
-        NL_TEST_ASSERT(inSuite, constructionElement->profileNum == deconstructionElement.profileNum);
-        NL_TEST_ASSERT(inSuite, constructionElement->vendorReservedData.data_equal(deconstructionElement.vendorReservedData));
+        EXPECT_EQ(constructionElement->vendorId, deconstructionElement.vendorId);
+        EXPECT_EQ(constructionElement->profileNum, deconstructionElement.profileNum);
+        EXPECT_TRUE(constructionElement->vendorReservedData.data_equal(deconstructionElement.vendorReservedData));
     }
 }
 
-static void TestAttestationElements_Construction(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_Construction)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
     Platform::ScopedMemoryBuffer<uint8_t> attestationElements;
@@ -175,21 +180,21 @@
     attestationElementsLen = sizeof(certificationDeclaration) + sizeof(attestationNonce) + sizeof(timestamp) +
         sizeof(vendorReserved1) + sizeof(vendorReserved3) + sizeof(uint64_t) * 5;
     attestationElements.Alloc(attestationElementsLen);
-    NL_TEST_ASSERT(inSuite, attestationElements);
+    EXPECT_TRUE(attestationElements);
 
     {
         MutableByteSpan attestationElementsSpan(attestationElements.Get(), attestationElementsLen);
 
         err = ConstructAttestationElements(ByteSpan(certificationDeclaration), ByteSpan(attestationNonce), timestamp, ByteSpan(),
                                            vendorReserved, attestationElementsSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
         attestationElementsLen = attestationElementsSpan.size();
 
-        NL_TEST_ASSERT(inSuite, attestationElementsSpan.data_equal(ByteSpan(attestationElementsTestVector)));
+        EXPECT_TRUE(attestationElementsSpan.data_equal(ByteSpan(attestationElementsTestVector)));
     }
 }
 
-static void TestAttestationElements_Deconstruction(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_Deconstruction)
 {
     // This is a test case with only the known TLV tags fields
     constexpr uint8_t attestationElementsTestVectorOnlyKnownTags[] = {
@@ -266,36 +271,36 @@
         err = DeconstructAttestationElements(attestationElementsTestCase, certificationDeclarationDeconstructed,
                                              attestationNonceDeconstructed, timestampDeconstructed, firmwareInfoDeconstructed,
                                              vendorReserved);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT(inSuite, certificationDeclarationDeconstructed.data_equal(ByteSpan(certificationDeclarationTestVector)));
-        NL_TEST_ASSERT(inSuite, attestationNonceDeconstructed.data_equal(ByteSpan(attestationNonceTestVector)));
-        NL_TEST_ASSERT(inSuite, timestampTestVector == timestampDeconstructed);
-        NL_TEST_ASSERT(inSuite, firmwareInfoDeconstructed.empty());
-        NL_TEST_ASSERT(inSuite, ArraySize(vendorReservedArrayTestVector) == vendorReserved.GetNumberOfElements());
+        EXPECT_TRUE(certificationDeclarationDeconstructed.data_equal(ByteSpan(certificationDeclarationTestVector)));
+        EXPECT_TRUE(attestationNonceDeconstructed.data_equal(ByteSpan(attestationNonceTestVector)));
+        EXPECT_EQ(timestampTestVector, timestampDeconstructed);
+        EXPECT_TRUE(firmwareInfoDeconstructed.empty());
+        EXPECT_EQ(ArraySize(vendorReservedArrayTestVector), vendorReserved.GetNumberOfElements());
         struct VendorReservedElement element;
 
         while (vendorReserved.GetNextVendorReservedElement(element) == CHIP_NO_ERROR)
         {
-            NL_TEST_ASSERT(inSuite, vendorIdTestVector == element.vendorId);
-            NL_TEST_ASSERT(inSuite, profileNumTestVector == element.profileNum);
+            EXPECT_EQ(vendorIdTestVector, element.vendorId);
+            EXPECT_EQ(profileNumTestVector, element.profileNum);
             switch (element.tagNum)
             {
             case 1:
-                NL_TEST_ASSERT(inSuite, element.vendorReservedData.data_equal(vendorReservedArrayTestVector[0]));
+                EXPECT_TRUE(element.vendorReservedData.data_equal(vendorReservedArrayTestVector[0]));
                 break;
             case 3:
-                NL_TEST_ASSERT(inSuite, element.vendorReservedData.data_equal(vendorReservedArrayTestVector[1]));
+                EXPECT_TRUE(element.vendorReservedData.data_equal(vendorReservedArrayTestVector[1]));
                 break;
             default:
-                NL_TEST_ASSERT(inSuite, 0);
+                EXPECT_TRUE(0);
                 break;
             }
         }
     }
 }
 
-static void TestAttestationElements_DeconstructionNoVendorReserved(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_DeconstructionNoVendorReserved)
 {
     // This is a test case with only the known TLV tags fields
     constexpr uint8_t attestationElementsTestVectorNoVendor[] = {
@@ -333,19 +338,19 @@
     err = DeconstructAttestationElements(ByteSpan{ attestationElementsTestVectorNoVendor }, certificationDeclarationDeconstructed,
                                          attestationNonceDeconstructed, timestampDeconstructed, firmwareInfoDeconstructed,
                                          vendorReserved);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, certificationDeclarationDeconstructed.data_equal(ByteSpan(certificationDeclarationTestVector)));
-    NL_TEST_ASSERT(inSuite, attestationNonceDeconstructed.data_equal(ByteSpan(attestationNonceTestVector)));
-    NL_TEST_ASSERT(inSuite, timestampTestVector == timestampDeconstructed);
-    NL_TEST_ASSERT(inSuite, firmwareInfoDeconstructed.empty());
-    NL_TEST_ASSERT(inSuite, 0 == vendorReserved.GetNumberOfElements());
+    EXPECT_TRUE(certificationDeclarationDeconstructed.data_equal(ByteSpan(certificationDeclarationTestVector)));
+    EXPECT_TRUE(attestationNonceDeconstructed.data_equal(ByteSpan(attestationNonceTestVector)));
+    EXPECT_EQ(timestampTestVector, timestampDeconstructed);
+    EXPECT_TRUE(firmwareInfoDeconstructed.empty());
+    EXPECT_EQ(vendorReserved.GetNumberOfElements(), 0u);
     struct VendorReservedElement element;
 
-    NL_TEST_ASSERT(inSuite, vendorReserved.GetNextVendorReservedElement(element) == CHIP_END_OF_TLV);
+    EXPECT_EQ(vendorReserved.GetNextVendorReservedElement(element), CHIP_END_OF_TLV);
 }
 
-static void TestVendorReservedData(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestVendorReservedData)
 {
 
     struct VendorReservedElement inputArray[] = { { 3000, 100, 10 }, { 2999, 99, 10 },  { 10, 20, 100 },
@@ -363,7 +368,7 @@
             vendorReserved.addVendorReservedElement(inputArray[i].vendorId, inputArray[i].profileNum, inputArray[i].tagNum,
                                                     ByteSpan(strings[i], strlen(reinterpret_cast<char *>(strings[i]))));
 
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
     }
 
     // manually figure out the order these should be read out in when sorted
@@ -372,24 +377,23 @@
     };
 
     const struct VendorReservedElement * element = vendorReserved.cbegin();
-    NL_TEST_ASSERT(inSuite, element);
-    NL_TEST_ASSERT(inSuite, element = vendorReserved.Next());
+    EXPECT_TRUE(element);
+    EXPECT_TRUE(element = vendorReserved.Next());
 
     for (i = 0; element && i < ArraySize(desiredOrder); element = vendorReserved.Next(), i++)
     {
-        NL_TEST_ASSERT(inSuite,
-                       element->vendorId == desiredOrder[i]->vendorId && element->profileNum == desiredOrder[i]->profileNum &&
-                           element->tagNum == desiredOrder[i]->tagNum);
+        EXPECT_TRUE(element->vendorId == desiredOrder[i]->vendorId && element->profileNum == desiredOrder[i]->profileNum &&
+                    element->tagNum == desiredOrder[i]->tagNum);
     }
-    NL_TEST_ASSERT(inSuite, i == ArraySize(desiredOrder)); // check if previous loop matched for every array entry.
+    EXPECT_EQ(i, ArraySize(desiredOrder)); // check if previous loop matched for every array entry.
 
     // add another element, it should fail
     uint8_t testByteSpan[] = { 0x1, 0x2, 0x3 };
     CHIP_ERROR err         = vendorReserved.addVendorReservedElement(5, 10, 20, ByteSpan(testByteSpan));
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NO_MEMORY);
+    EXPECT_EQ(err, CHIP_ERROR_NO_MEMORY);
 }
 
-static void TestAttestationElements_DeconstructionWithFirmwareInfo(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_DeconstructionWithFirmwareInfo)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
 
@@ -456,39 +460,39 @@
     err = DeconstructAttestationElements(ByteSpan(attestationElementsTestVectorWithFirmwareInfo),
                                          certificationDeclarationDeconstructed, attestationNonceDeconstructed,
                                          timestampDeconstructed, firmwareInfoDeconstructed, vendorReserved);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, certificationDeclarationDeconstructed.data_equal(ByteSpan(certificationDeclarationTestVector)));
-    NL_TEST_ASSERT(inSuite, attestationNonceDeconstructed.data_equal(ByteSpan(attestationNonceTestVector)));
-    NL_TEST_ASSERT(inSuite, timestampTestVector == timestampDeconstructed);
-    NL_TEST_ASSERT(inSuite, firmwareInfoDeconstructed.data_equal(ByteSpan(firmwareInfoTestVector)));
-    NL_TEST_ASSERT(inSuite, ArraySize(vendorReservedArrayTestVector) == vendorReserved.GetNumberOfElements());
+    EXPECT_TRUE(certificationDeclarationDeconstructed.data_equal(ByteSpan(certificationDeclarationTestVector)));
+    EXPECT_TRUE(attestationNonceDeconstructed.data_equal(ByteSpan(attestationNonceTestVector)));
+    EXPECT_EQ(timestampTestVector, timestampDeconstructed);
+    EXPECT_TRUE(firmwareInfoDeconstructed.data_equal(ByteSpan(firmwareInfoTestVector)));
+    EXPECT_EQ(ArraySize(vendorReservedArrayTestVector), vendorReserved.GetNumberOfElements());
     struct VendorReservedElement element;
     size_t elementsSeen = 0;
 
     while (vendorReserved.GetNextVendorReservedElement(element) == CHIP_NO_ERROR)
     {
-        NL_TEST_ASSERT(inSuite, vendorIdTestVector == element.vendorId);
-        NL_TEST_ASSERT(inSuite, profileNumTestVector == element.profileNum);
+        EXPECT_EQ(vendorIdTestVector, element.vendorId);
+        EXPECT_EQ(profileNumTestVector, element.profileNum);
         switch (element.tagNum)
         {
         case 1:
-            NL_TEST_ASSERT(inSuite, element.vendorReservedData.data_equal(vendorReservedArrayTestVector[0]));
+            EXPECT_TRUE(element.vendorReservedData.data_equal(vendorReservedArrayTestVector[0]));
             elementsSeen++;
             break;
         case 3:
-            NL_TEST_ASSERT(inSuite, element.vendorReservedData.data_equal(vendorReservedArrayTestVector[1]));
+            EXPECT_TRUE(element.vendorReservedData.data_equal(vendorReservedArrayTestVector[1]));
             elementsSeen++;
             break;
         default:
-            NL_TEST_ASSERT(inSuite, 0);
+            EXPECT_TRUE(0);
             break;
         }
     }
-    NL_TEST_ASSERT(inSuite, elementsSeen == ArraySize(vendorReservedArrayTestVector));
+    EXPECT_EQ(elementsSeen, ArraySize(vendorReservedArrayTestVector));
 }
 
-static void TestAttestationElements_DeconstructionUnordered(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_DeconstructionUnordered)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
 
@@ -516,10 +520,10 @@
     err = DeconstructAttestationElements(ByteSpan(attestationElementsUnorderedTestVector), certificationDeclarationDeconstructed,
                                          attestationNonceDeconstructed, timestampDeconstructed, firmwareInfoDeconstructed,
                                          vendorReserved);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_UNEXPECTED_TLV_ELEMENT);
+    EXPECT_EQ(err, CHIP_ERROR_UNEXPECTED_TLV_ELEMENT);
 }
 
-static void TestAttestationElements_DeconstructionCorruptedTLV(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestAttestationElements_DeconstructionCorruptedTLV)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
     using chip::FormatCHIPError;
@@ -541,10 +545,10 @@
     DeviceAttestationVendorReservedDeconstructor vendorReserved;
     size_t count = 2;
     err          = vendorReserved.PrepareToReadVendorReservedElements(ByteSpan(attestationElementsCorruptedTLVTestVector), count);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_TLV_UNDERRUN);
+    EXPECT_EQ(err, CHIP_ERROR_TLV_UNDERRUN);
 }
 
-static void TestNocsrElements_Construction(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestNocsrElements_Construction)
 {
     static constexpr uint8_t kNocsrNonce[] = {
         0x81, 0x4a, 0x4d, 0x4c, 0x1c, 0x4a, 0x8e, 0xbb, 0xea, 0xdb, 0x0a, 0xe2, 0x82, 0xf9, 0x91, 0xeb,
@@ -600,18 +604,18 @@
         TLV::EstimateStructOverhead(sizeof(kExampleCsr), sizeof(kNocsrNonce), sizeof(kVendorReserved1), sizeof(kVendorReserved3));
 
     nocsrElements.Alloc(nocsrElementsLen);
-    NL_TEST_ASSERT(inSuite, nocsrElements.Get() != nullptr);
+    ASSERT_NE(nocsrElements.Get(), nullptr);
 
     MutableByteSpan nocsrElementsSpan(nocsrElements.Get(), nocsrElementsLen);
 
     CHIP_ERROR err = ConstructNOCSRElements(ByteSpan(kExampleCsr), ByteSpan(kNocsrNonce), ByteSpan{ kVendorReserved1 }, ByteSpan{},
                                             ByteSpan{ kVendorReserved3 }, nocsrElementsSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, nocsrElementsSpan.size() <= nocsrElementsLen);
-    NL_TEST_ASSERT(inSuite, nocsrElementsSpan.data_equal(ByteSpan(kNoCsrElementsVector)));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_LE(nocsrElementsSpan.size(), nocsrElementsLen);
+    EXPECT_TRUE(nocsrElementsSpan.data_equal(ByteSpan(kNoCsrElementsVector)));
 }
 
-static void TestNocsrElements_Deconstruction(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationConstruction, TestNocsrElements_Deconstruction)
 {
     static constexpr uint8_t kNocsrNonce[] = {
         0x81, 0x4a, 0x4d, 0x4c, 0x1c, 0x4a, 0x8e, 0xbb, 0xea, 0xdb, 0x0a, 0xe2, 0x82, 0xf9, 0x91, 0xeb,
@@ -669,66 +673,10 @@
     ByteSpan vendorReserved3Span;
     CHIP_ERROR err = DeconstructNOCSRElements(ByteSpan(kNoCsrElementsVector), csrSpan, csrNonceSpan, vendorReserved1Span,
                                               vendorReserved2Span, vendorReserved3Span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, csrSpan.data_equal(ByteSpan(kExampleCsr)));
-    NL_TEST_ASSERT(inSuite, csrNonceSpan.data_equal(ByteSpan(kNocsrNonce)));
-    NL_TEST_ASSERT(inSuite, vendorReserved1Span.data_equal(ByteSpan(kVendorReserved1)));
-    NL_TEST_ASSERT(inSuite, vendorReserved2Span.empty());
-    NL_TEST_ASSERT(inSuite, vendorReserved3Span.data_equal(ByteSpan(kVendorReserved3)));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(csrSpan.data_equal(ByteSpan(kExampleCsr)));
+    EXPECT_TRUE(csrNonceSpan.data_equal(ByteSpan(kNocsrNonce)));
+    EXPECT_TRUE(vendorReserved1Span.data_equal(ByteSpan(kVendorReserved1)));
+    EXPECT_TRUE(vendorReserved2Span.empty());
+    EXPECT_TRUE(vendorReserved3Span.data_equal(ByteSpan(kVendorReserved3)));
 }
-
-/**
- *   Test Suite. It lists all the test functions.
- */
-// clang-format off
-static const nlTest sTests[] = {
-    NL_TEST_DEF("Test Device Attestation Elements Roundtrip", TestAttestationElements_Roundtrip),
-    NL_TEST_DEF("Test Device Attestation Elements Construction", TestAttestationElements_Construction),
-    NL_TEST_DEF("Test Device Attestation Elements Deconstruction", TestAttestationElements_Deconstruction),
-    NL_TEST_DEF("Test Vendor Reserved Data Ordering", TestVendorReservedData),
-    NL_TEST_DEF("Test Device Attestation Elements Deconstruction with Firmware Information", TestAttestationElements_DeconstructionWithFirmwareInfo),
-    NL_TEST_DEF("Test Device Attestation Elements Deconstruction - Corrupted/Out of Order TLV", TestAttestationElements_DeconstructionUnordered),
-    NL_TEST_DEF("Test Device Attestation Elements Deconstruction - Corrupted TLV -- vendor reserved elements", TestAttestationElements_DeconstructionCorruptedTLV),
-    NL_TEST_DEF("Test Device Attestation Elements Deconstruction - No vendor reserved", TestAttestationElements_DeconstructionNoVendorReserved),
-    NL_TEST_DEF("Test Device NOCSR Elements Construction", TestNocsrElements_Construction),
-    NL_TEST_DEF("Test Device NOCSR Elements Deconstruction", TestNocsrElements_Deconstruction),
-    NL_TEST_SENTINEL()
-};
-// clang-format on
-
-/**
- *  Set up the test suite.
- */
-int TestDeviceAttestationElementsConstruction_Setup(void * inContext)
-{
-    CHIP_ERROR error = chip::Platform::MemoryInit();
-    if (error != CHIP_NO_ERROR)
-        return FAILURE;
-    return SUCCESS;
-}
-
-/**
- *  Tear down the test suite.
- */
-int TestDeviceAttestationElementsConstruction_Teardown(void * inContext)
-{
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
-int TestDeviceAttestationElementsConstruction()
-{
-    // clang-format off
-    nlTestSuite theSuite =
-    {
-        "Device Attestation Elements Construction",
-        &sTests[0],
-        TestDeviceAttestationElementsConstruction_Setup,
-        TestDeviceAttestationElementsConstruction_Teardown
-    };
-    // clang-format on
-    nlTestRunner(&theSuite, nullptr);
-    return (nlTestRunnerStats(&theSuite));
-}
-
-CHIP_REGISTER_TEST_SUITE(TestDeviceAttestationElementsConstruction);
diff --git a/src/credentials/tests/TestDeviceAttestationCredentials.cpp b/src/credentials/tests/TestDeviceAttestationCredentials.cpp
index 4707caa..bf203c8 100644
--- a/src/credentials/tests/TestDeviceAttestationCredentials.cpp
+++ b/src/credentials/tests/TestDeviceAttestationCredentials.cpp
@@ -30,9 +30,8 @@
 #include <lib/core/CHIPError.h>
 #include <lib/support/CHIPMem.h>
 #include <lib/support/Span.h>
-#include <lib/support/UnitTestRegistration.h>
 
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 #include "CHIPAttCert_test_vectors.h"
 
@@ -48,49 +47,55 @@
 
 } // namespace
 
-static void TestDACProvidersExample_Providers(nlTestSuite * inSuite, void * inContext)
+struct TestDeviceAttestationCredentials : public ::testing::Test
+{
+    static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
+    static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
+};
+
+TEST_F(TestDeviceAttestationCredentials, TestDACProvidersExample_Providers)
 {
     uint8_t der_cert_buf[kMaxDERCertLength];
     MutableByteSpan der_cert_span(der_cert_buf);
 
     // Make sure default provider exists and is not implemented on at least one method
     DeviceAttestationCredentialsProvider * default_provider = GetDeviceAttestationCredentialsProvider();
-    NL_TEST_ASSERT(inSuite, default_provider != nullptr);
+    ASSERT_NE(default_provider, nullptr);
 
     CHIP_ERROR err = default_provider->GetDeviceAttestationCert(der_cert_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_IMPLEMENTED);
+    EXPECT_EQ(err, CHIP_ERROR_NOT_IMPLEMENTED);
 
     // Replace default provider with example provider
     DeviceAttestationCredentialsProvider * example_dac_provider = Examples::GetExampleDACProvider();
-    NL_TEST_ASSERT(inSuite, example_dac_provider != nullptr);
-    NL_TEST_ASSERT(inSuite, default_provider != example_dac_provider);
+    ASSERT_NE(example_dac_provider, nullptr);
+    EXPECT_NE(default_provider, example_dac_provider);
 
     SetDeviceAttestationCredentialsProvider(example_dac_provider);
     default_provider = GetDeviceAttestationCredentialsProvider();
-    NL_TEST_ASSERT(inSuite, default_provider == example_dac_provider);
+    EXPECT_EQ(default_provider, example_dac_provider);
 
     // Make sure DAC is what we expect, by validating public key
     memset(der_cert_span.data(), 0, der_cert_span.size());
     err = example_dac_provider->GetDeviceAttestationCert(der_cert_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     P256PublicKey dac_public_key;
     err = ExtractPubkeyFromX509Cert(der_cert_span, dac_public_key);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, dac_public_key.Length() == kExpectedDacPublicKey.size());
-    NL_TEST_ASSERT(inSuite, 0 == memcmp(dac_public_key.ConstBytes(), kExpectedDacPublicKey.data(), kExpectedDacPublicKey.size()));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(dac_public_key.Length(), kExpectedDacPublicKey.size());
+    EXPECT_EQ(0, memcmp(dac_public_key.ConstBytes(), kExpectedDacPublicKey.data(), kExpectedDacPublicKey.size()));
 
     // Make sure PAI is what we expect, by validating public key
     der_cert_span = MutableByteSpan{ der_cert_span };
     memset(der_cert_span.data(), 0, der_cert_span.size());
     err = example_dac_provider->GetProductAttestationIntermediateCert(der_cert_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     P256PublicKey pai_public_key;
     err = ExtractPubkeyFromX509Cert(der_cert_span, pai_public_key);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, pai_public_key.Length() == kExpectedPaiPublicKey.size());
-    NL_TEST_ASSERT(inSuite, 0 == memcmp(pai_public_key.ConstBytes(), kExpectedPaiPublicKey.data(), kExpectedPaiPublicKey.size()));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(pai_public_key.Length(), kExpectedPaiPublicKey.size());
+    EXPECT_EQ(0, memcmp(pai_public_key.ConstBytes(), kExpectedPaiPublicKey.data(), kExpectedPaiPublicKey.size()));
 
     // Check for CD presence
     uint8_t other_data_buf[kMaxCMSSignedCDMessage];
@@ -98,35 +103,35 @@
     memset(other_data_span.data(), 0, other_data_span.size());
 
     err = example_dac_provider->GetCertificationDeclaration(other_data_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, other_data_span.size() > 0);
-    NL_TEST_ASSERT(inSuite, other_data_span.data()[0] != 0);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_GT(other_data_span.size(), 0u);
+    EXPECT_NE(other_data_span.data()[0], 0);
 
     // Check for firmware information presence
     other_data_span = MutableByteSpan{ other_data_buf };
     memset(other_data_span.data(), 0, other_data_span.size());
 
     err = example_dac_provider->GetFirmwareInformation(other_data_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, other_data_span.size() == 0);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(other_data_span.size(), 0u);
 }
 
-static void TestDACProvidersExample_Signature(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationCredentials, TestDACProvidersExample_Signature)
 {
     constexpr uint8_t kExampleMessage[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12,
                                             0x13, 0x14, 0x15, 0x16, 0x17, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
                                             0x26, 0x27, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 };
 
     DeviceAttestationCredentialsProvider * example_dac_provider = Examples::GetExampleDACProvider();
-    NL_TEST_ASSERT(inSuite, example_dac_provider != nullptr);
+    ASSERT_NE(example_dac_provider, nullptr);
 
     // Sign using the example attestation private key
     P256ECDSASignature da_signature;
     MutableByteSpan out_sig_span(da_signature.Bytes(), da_signature.Capacity());
     CHIP_ERROR err = example_dac_provider->SignWithDeviceAttestationKey(ByteSpan{ kExampleMessage }, out_sig_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, out_sig_span.size() == kP256_ECDSA_Signature_Length_Raw);
+    EXPECT_EQ(out_sig_span.size(), kP256_ECDSA_Signature_Length_Raw);
     da_signature.SetLength(out_sig_span.size());
 
     // Get DAC from the provider
@@ -135,18 +140,18 @@
 
     memset(dac_cert_span.data(), 0, dac_cert_span.size());
     err = example_dac_provider->GetDeviceAttestationCert(dac_cert_span);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Extract public key from DAC, prior to signature verification
     P256PublicKey dac_public_key;
     err = ExtractPubkeyFromX509Cert(dac_cert_span, dac_public_key);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, dac_public_key.Length() == kExpectedDacPublicKey.size());
-    NL_TEST_ASSERT(inSuite, 0 == memcmp(dac_public_key.ConstBytes(), kExpectedDacPublicKey.data(), kExpectedDacPublicKey.size()));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(dac_public_key.Length(), kExpectedDacPublicKey.size());
+    EXPECT_EQ(memcmp(dac_public_key.ConstBytes(), kExpectedDacPublicKey.data(), kExpectedDacPublicKey.size()), 0);
 
     // Verify round trip signature
     err = dac_public_key.ECDSA_validate_msg_signature(&kExampleMessage[0], sizeof(kExampleMessage), da_signature);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 }
 
 static void OnAttestationInformationVerificationCallback(void * context, const DeviceAttestationVerifier::AttestationInfo & info,
@@ -156,7 +161,7 @@
     *pResult                                = result;
 }
 
-static void TestDACVerifierExample_AttestationInfoVerification(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationCredentials, TestDACVerifierExample_AttestationInfoVerification)
 {
     uint8_t attestationElementsTestVector[] = {
         0x15, 0x30, 0x01, 0xeb, 0x30, 0x81, 0xe8, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0, 0x81,
@@ -191,20 +196,20 @@
 
     // Make sure default verifier exists and is not implemented on at least one method
     DeviceAttestationVerifier * default_verifier = GetDeviceAttestationVerifier();
-    NL_TEST_ASSERT(inSuite, default_verifier != nullptr);
+    ASSERT_NE(default_verifier, nullptr);
 
     AttestationVerificationResult attestationResult = AttestationVerificationResult::kSuccess;
     ByteSpan emptyByteSpan;
     attestationResult = default_verifier->ValidateCertificationDeclarationSignature(ByteSpan(), emptyByteSpan);
-    NL_TEST_ASSERT(inSuite, attestationResult == AttestationVerificationResult::kNotImplemented);
+    EXPECT_EQ(attestationResult, AttestationVerificationResult::kNotImplemented);
 
     DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(GetTestAttestationTrustStore());
-    NL_TEST_ASSERT(inSuite, example_dac_verifier != nullptr);
-    NL_TEST_ASSERT(inSuite, default_verifier != example_dac_verifier);
+    ASSERT_NE(example_dac_verifier, nullptr);
+    EXPECT_NE(default_verifier, example_dac_verifier);
 
     SetDeviceAttestationVerifier(example_dac_verifier);
     default_verifier = GetDeviceAttestationVerifier();
-    NL_TEST_ASSERT(inSuite, default_verifier == example_dac_verifier);
+    EXPECT_EQ(default_verifier, example_dac_verifier);
 
     attestationResult = AttestationVerificationResult::kNotImplemented;
     Callback::Callback<DeviceAttestationVerifier::OnAttestationInformationVerification> attestationInformationVerificationCallback(
@@ -216,10 +221,10 @@
         static_cast<VendorId>(0xFFF1), 0x8000);
     default_verifier->VerifyAttestationInformation(info, &attestationInformationVerificationCallback);
 
-    NL_TEST_ASSERT(inSuite, attestationResult == AttestationVerificationResult::kSuccess);
+    EXPECT_EQ(attestationResult, AttestationVerificationResult::kSuccess);
 }
 
-static void TestDACVerifierExample_CertDeclarationVerification(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationCredentials, TestDACVerifierExample_CertDeclarationVerification)
 {
     // -> format_version = 1
     // -> vendor_id = 0xFFF1
@@ -258,11 +263,11 @@
 
     // Replace default verifier with example verifier
     DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(GetTestAttestationTrustStore());
-    NL_TEST_ASSERT(inSuite, example_dac_verifier != nullptr);
+    ASSERT_NE(example_dac_verifier, nullptr);
 
     SetDeviceAttestationVerifier(example_dac_verifier);
     DeviceAttestationVerifier * default_verifier = GetDeviceAttestationVerifier();
-    NL_TEST_ASSERT(inSuite, default_verifier == example_dac_verifier);
+    EXPECT_EQ(default_verifier, example_dac_verifier);
 
     // Check for CD presence
     uint8_t cd_data_buf[kMaxCMSSignedCDMessage] = { 0 };
@@ -271,9 +276,9 @@
     ByteSpan cd_payload;
     AttestationVerificationResult attestation_result =
         default_verifier->ValidateCertificationDeclarationSignature(ByteSpan(sTest_CD), cd_payload);
-    NL_TEST_ASSERT(inSuite, attestation_result == AttestationVerificationResult::kSuccess);
+    EXPECT_EQ(attestation_result, AttestationVerificationResult::kSuccess);
 
-    NL_TEST_ASSERT(inSuite, cd_payload.data_equal(ByteSpan(sTestCMS_CDContent)));
+    EXPECT_TRUE(cd_payload.data_equal(ByteSpan(sTestCMS_CDContent)));
 
     DeviceInfoForAttestation deviceInfo{
         .vendorId     = sTestCMS_CertElements.VendorId,
@@ -285,10 +290,10 @@
         .paaVendorId  = sTestCMS_CertElements.VendorId,
     };
     attestation_result = default_verifier->ValidateCertificateDeclarationPayload(cd_payload, ByteSpan(), deviceInfo);
-    NL_TEST_ASSERT(inSuite, attestation_result == AttestationVerificationResult::kSuccess);
+    EXPECT_EQ(attestation_result, AttestationVerificationResult::kSuccess);
 }
 
-static void TestDACVerifierExample_NocsrInformationVerification(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationCredentials, TestDACVerifierExample_NocsrInformationVerification)
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
 
@@ -335,25 +340,25 @@
                                                  0x8d, 0x85, 0xfb, 0xd7, 0xa0, 0x7c, 0x8e, 0x83, 0x7d, 0xa4, 0xd5, 0xa8, 0xb9 };
 
     DeviceAttestationVerifier * exampleDacVerifier = GetDefaultDACVerifier(GetTestAttestationTrustStore());
-    NL_TEST_ASSERT(inSuite, exampleDacVerifier != nullptr);
+    ASSERT_NE(exampleDacVerifier, nullptr);
 
     P256PublicKey dacPubkey;
-    NL_TEST_ASSERT(inSuite, sizeof(attestationPublicKey) == dacPubkey.Length());
+    EXPECT_EQ(sizeof(attestationPublicKey), dacPubkey.Length());
     memcpy(dacPubkey.Bytes(), attestationPublicKey, dacPubkey.Length());
 
     err = exampleDacVerifier->VerifyNodeOperationalCSRInformation(
         ByteSpan(nocsrElementsTestVector), ByteSpan(attestationChallengeTestVector), ByteSpan(attestationSignatureTestVector),
         dacPubkey, ByteSpan(csrNonceTestVector));
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // now test with invalid signature
     err = exampleDacVerifier->VerifyNodeOperationalCSRInformation(
         ByteSpan(nocsrElementsTestVector), ByteSpan(attestationChallengeTestVector), ByteSpan(wrongAttestationSignatureTestVector),
         dacPubkey, ByteSpan(csrNonceTestVector));
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_SIGNATURE);
+    EXPECT_EQ(err, CHIP_ERROR_INVALID_SIGNATURE);
 }
 
-static void TestAttestationTrustStore(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestDeviceAttestationCredentials, TestAttestationTrustStore)
 {
     // SKID to trigger CHIP_ERROR_INVALID_ARGUMENT
     ByteSpan kPaaFFF1BadSkidSpan1{ TestCerts::sTestCert_PAA_FFF1_Cert.data(), TestCerts::sTestCert_PAA_FFF1_Cert.size() - 1 };
@@ -383,7 +388,7 @@
     };
 
     const AttestationTrustStore * testAttestationTrustStore = GetTestAttestationTrustStore();
-    NL_TEST_ASSERT(inSuite, testAttestationTrustStore != nullptr);
+    ASSERT_NE(testAttestationTrustStore, nullptr);
 
     for (const auto & testCase : kTestCases)
     {
@@ -397,68 +402,12 @@
 
         // Try to obtain cert
         CHIP_ERROR result = testAttestationTrustStore->GetProductAttestationAuthorityCert(testCase.skidSpan, paaCertSpan);
-        NL_TEST_ASSERT(inSuite, result == testCase.expectedResult);
+        EXPECT_EQ(result, testCase.expectedResult);
 
         // In success cases, make sure the cert matches expectation.
         if (testCase.expectedResult == CHIP_NO_ERROR)
         {
-            NL_TEST_ASSERT(inSuite, paaCertSpan.data_equal(testCase.expectedCertSpan) == true);
+            EXPECT_TRUE(paaCertSpan.data_equal(testCase.expectedCertSpan));
         }
     }
 }
-
-/**
- *  Set up the test suite.
- */
-int TestDeviceAttestation_Setup(void * inContext)
-{
-    CHIP_ERROR error = chip::Platform::MemoryInit();
-
-    if (error != CHIP_NO_ERROR)
-    {
-        return FAILURE;
-    }
-
-    return SUCCESS;
-}
-
-/**
- *  Tear down the test suite.
- */
-int TestDeviceAttestation_Teardown(void * inContext)
-{
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
-/**
- *   Test Suite. It lists all the test functions.
- */
-// clang-format off
-static const nlTest sTests[] = {
-    NL_TEST_DEF("Test Example Device Attestation Credentials Providers", TestDACProvidersExample_Providers),
-    NL_TEST_DEF("Test Example Device Attestation Signature", TestDACProvidersExample_Signature),
-    NL_TEST_DEF("Test the 'for testing' Paa Root Store", TestAttestationTrustStore),
-    NL_TEST_DEF("Test Example Device Attestation Information Verification", TestDACVerifierExample_AttestationInfoVerification),
-    NL_TEST_DEF("Test Example Device Attestation Certification Declaration Verification", TestDACVerifierExample_CertDeclarationVerification),
-    NL_TEST_DEF("Test Example Device Attestation Node Operational CSR Information Verification", TestDACVerifierExample_NocsrInformationVerification),
-    NL_TEST_SENTINEL()
-};
-// clang-format on
-
-int TestDeviceAttestation()
-{
-    // clang-format off
-    nlTestSuite theSuite =
-    {
-        "Device Attestation Credentials",
-        &sTests[0],
-        TestDeviceAttestation_Setup,
-        TestDeviceAttestation_Teardown
-    };
-    // clang-format on
-    nlTestRunner(&theSuite, nullptr);
-    return (nlTestRunnerStats(&theSuite));
-}
-
-CHIP_REGISTER_TEST_SUITE(TestDeviceAttestation);
diff --git a/src/credentials/tests/TestFabricTable.cpp b/src/credentials/tests/TestFabricTable.cpp
index 8dd6519..a6b9f2e 100644
--- a/src/credentials/tests/TestFabricTable.cpp
+++ b/src/credentials/tests/TestFabricTable.cpp
@@ -22,7 +22,7 @@
  */
 
 #include <errno.h>
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 #include <lib/core/CHIPCore.h>
 
@@ -36,8 +36,7 @@
 #include <lib/asn1/ASN1.h>
 #include <lib/support/CodeUtils.h>
 #include <lib/support/TestPersistentStorageDelegate.h>
-#include <lib/support/UnitTestExtendedAssertions.h>
-#include <lib/support/UnitTestRegistration.h>
+
 #include <platform/ConfigurationManager.h>
 
 #include <lib/support/BytesToHex.h>
@@ -83,7 +82,7 @@
 /**
  * Load a single test fabric with with the Root01:ICA01:Node01_01 identity.
  */
-static CHIP_ERROR LoadTestFabric_Node01_01(nlTestSuite * inSuite, FabricTable & fabricTable, bool doCommit)
+static CHIP_ERROR LoadTestFabric_Node01_01(FabricTable & fabricTable, bool doCommit)
 {
     Crypto::P256SerializedKeypair opKeysSerialized;
     static Crypto::P256Keypair opKey_Node01_01;
@@ -114,7 +113,7 @@
     return CHIP_NO_ERROR;
 }
 
-static CHIP_ERROR LoadTestFabric_Node01_02(nlTestSuite * inSuite, FabricTable & fabricTable, bool doCommit)
+static CHIP_ERROR LoadTestFabric_Node01_02(FabricTable & fabricTable, bool doCommit)
 {
     Crypto::P256SerializedKeypair opKeysSerialized;
     FabricIndex fabricIndex;
@@ -147,7 +146,7 @@
 /**
  * Load a single test fabric with with the Root02:ICA02:Node02_01 identity.
  */
-static CHIP_ERROR LoadTestFabric_Node02_01(nlTestSuite * inSuite, FabricTable & fabricTable, bool doCommit,
+static CHIP_ERROR LoadTestFabric_Node02_01(FabricTable & fabricTable, bool doCommit,
                                            FabricTable::AdvertiseIdentity advertiseIdentity = FabricTable::AdvertiseIdentity::Yes)
 {
     Crypto::P256SerializedKeypair opKeysSerialized;
@@ -163,55 +162,67 @@
     ByteSpan icacSpan(TestCerts::sTestCert_ICA02_Chip);
     ByteSpan nocSpan(TestCerts::sTestCert_Node02_01_Chip);
 
-    NL_TEST_ASSERT(inSuite,
-                   opKeysSerialized.SetLength(TestCerts::sTestCert_Node02_01_PublicKey.size() +
-                                              TestCerts::sTestCert_Node02_01_PrivateKey.size()) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, opKey_Node02_01.Deserialize(opKeysSerialized) == CHIP_NO_ERROR);
+    EXPECT_EQ(opKeysSerialized.SetLength(TestCerts::sTestCert_Node02_01_PublicKey.size() +
+                                         TestCerts::sTestCert_Node02_01_PrivateKey.size()),
+              CHIP_NO_ERROR);
+    EXPECT_EQ(opKey_Node02_01.Deserialize(opKeysSerialized), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcacSpan) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcacSpan), CHIP_NO_ERROR);
 
     CHIP_ERROR err =
         fabricTable.AddNewPendingFabricWithProvidedOpKey(nocSpan, icacSpan, VendorId::TestVendor1, &opKey_Node02_01,
                                                          /*isExistingOpKeyExternallyOwned =*/true, &fabricIndex, advertiseIdentity);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     if (doCommit)
     {
         err = fabricTable.CommitPendingFabricData();
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+        EXPECT_EQ(err, CHIP_NO_ERROR);
     }
 
     return err;
 }
-void TestLastKnownGoodTimeInit(nlTestSuite * inSuite, void * inContext)
+
+struct TestFabricTable : public ::testing::Test
+{
+
+    static void SetUpTestSuite()
+    {
+        DeviceLayer::SetConfigurationMgr(&DeviceLayer::ConfigurationManagerImpl::GetDefaultInstance());
+        ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR);
+    }
+    static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
+};
+
+TEST_F(TestFabricTable, TestLastKnownGoodTimeInit)
 {
     // Fabric table init should init Last Known Good Time to the firmware build time.
     chip::TestPersistentStorageDelegate testStorage;
     ScopedFabricTable fabricTableHolder;
 
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
     System::Clock::Seconds32 lastKnownGoodChipEpochTime;
 
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
-    NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodChipEpochTime) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodChipEpochTime), CHIP_NO_ERROR);
     System::Clock::Seconds32 firmwareBuildTime;
-    NL_TEST_ASSERT(inSuite, DeviceLayer::ConfigurationMgr().GetFirmwareBuildChipEpochTime(firmwareBuildTime) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, lastKnownGoodChipEpochTime == firmwareBuildTime);
+    EXPECT_EQ(DeviceLayer::ConfigurationMgr().GetFirmwareBuildChipEpochTime(firmwareBuildTime), CHIP_NO_ERROR);
+    EXPECT_EQ(lastKnownGoodChipEpochTime, firmwareBuildTime);
 }
 
-void TestCollidingFabrics(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestCollidingFabrics)
 {
     chip::TestPersistentStorageDelegate testStorage;
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
     //
     // Start by loading NOCs for two nodes on the same fabric. The second one should fail since the FabricTable by default
     // doesn't permit colliding fabrics.
     //
-    NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_02(inSuite, fabricTable, /* doCommit = */ true) != CHIP_NO_ERROR);
+    EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
+    EXPECT_NE(LoadTestFabric_Node01_02(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
 
     //
     // Revert the partially added NOC from the last call, permit colliding fabrics in the FabricTable and try again.
@@ -219,12 +230,12 @@
     //
     fabricTable.RevertPendingFabricData();
     fabricTable.PermitCollidingFabrics();
-    NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_02(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
+    EXPECT_EQ(LoadTestFabric_Node01_02(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
 
     ByteSpan rcacSpan(TestCerts::sTestCert_Root01_Chip);
     Credentials::P256PublicKeySpan rootPublicKeySpan;
 
-    NL_TEST_ASSERT(inSuite, Credentials::ExtractPublicKeyFromChipCert(rcacSpan, rootPublicKeySpan) == CHIP_NO_ERROR);
+    EXPECT_EQ(Credentials::ExtractPublicKeyFromChipCert(rcacSpan, rootPublicKeySpan), CHIP_NO_ERROR);
 
     //
     // Ensure we can find both node identities in the FabricTable.
@@ -235,8 +246,8 @@
         NodeId nodeId;
         FabricId fabricId;
 
-        NL_TEST_ASSERT(inSuite, ExtractNodeIdFabricIdFromOpCert(origNocSpan, &nodeId, &fabricId) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, fabricTable.FindIdentity(rootPublicKeySpan, fabricId, nodeId) != nullptr);
+        EXPECT_EQ(ExtractNodeIdFabricIdFromOpCert(origNocSpan, &nodeId, &fabricId), CHIP_NO_ERROR);
+        EXPECT_NE(fabricTable.FindIdentity(rootPublicKeySpan, fabricId, nodeId), nullptr);
     }
 
     {
@@ -245,12 +256,12 @@
         NodeId nodeId;
         FabricId fabricId;
 
-        NL_TEST_ASSERT(inSuite, ExtractNodeIdFabricIdFromOpCert(origNocSpan, &nodeId, &fabricId) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, fabricTable.FindIdentity(rootPublicKeySpan, fabricId, nodeId) != nullptr);
+        EXPECT_EQ(ExtractNodeIdFabricIdFromOpCert(origNocSpan, &nodeId, &fabricId), CHIP_NO_ERROR);
+        EXPECT_NE(fabricTable.FindIdentity(rootPublicKeySpan, fabricId, nodeId), nullptr);
     }
 }
 
-void TestUpdateLastKnownGoodTime(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestUpdateLastKnownGoodTime)
 {
     // Adding a fabric should advance Last Known Good Time if any certificate's
     // NotBefore time is later than the build time, and else should leave it
@@ -259,7 +270,7 @@
     // Test certs all have this NotBefore: Oct 15 14:23:43 2020 GMT
     const ASN1::ASN1UniversalTime asn1Expected = { 2020, 10, 15, 14, 23, 43 };
     uint32_t testCertNotBeforeSeconds;
-    NL_TEST_ASSERT(inSuite, Credentials::ASN1ToChipEpochTime(asn1Expected, testCertNotBeforeSeconds) == CHIP_NO_ERROR);
+    EXPECT_EQ(Credentials::ASN1ToChipEpochTime(asn1Expected, testCertNotBeforeSeconds), CHIP_NO_ERROR);
     System::Clock::Seconds32 testCertNotBeforeTime = System::Clock::Seconds32(testCertNotBeforeSeconds);
 
     // Test that certificate NotBefore times that are before the Firmware build time
@@ -270,22 +281,22 @@
     for (auto buildTime : afterNotBeforeBuildTimes)
     {
         // Set build time to the desired value.
-        NL_TEST_ASSERT(inSuite, DeviceLayer::ConfigurationMgr().SetFirmwareBuildChipEpochTime(buildTime) == CHIP_NO_ERROR);
+        EXPECT_EQ(DeviceLayer::ConfigurationMgr().SetFirmwareBuildChipEpochTime(buildTime), CHIP_NO_ERROR);
         chip::TestPersistentStorageDelegate testStorage;
 
         {
             // Initialize a fabric table.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             // Read back Last Known Good Time, which will have been initialized to firmware build time.
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
 
             // Load a test fabric, but do not commit.
-            NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ false) == CHIP_NO_ERROR);
+            EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ false), CHIP_NO_ERROR);
 
             // Read Last Known Good Time and verify that it hasn't moved forward.
             // This test case was written after the test certs' NotBefore time and we
@@ -293,17 +304,17 @@
             // Therefore, we expect that build time is after NotBefore and so Last
             // Known Good Time will be set to the later of these, build time, even
             // after installing the new fabric.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
 
             // Verify that calling the fail-safe roll back interface does not change
             // last known good time, as it hadn't been updated in the first place.
             fabricTable.RevertPendingFabricData();
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
 
             // Now reload the test fabric and commit this time.
-            NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
+            EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
 
             // Read Last Known Good Time and verify that it hasn't moved forward.
             // This test case was written after the test certs' NotBefore time and we
@@ -311,25 +322,25 @@
             // Therefore, we expect that build time is after NotBefore and so Last
             // Known Good Time will be set to the later of these, build time, even
             // after installing the new fabric.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
 
             // Call revert again.  Since we've committed, this is a no-op.
             // Last known good time should again be unchanged.
             fabricTable.RevertPendingFabricData();
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
         }
         {
             // Test reloading last known good time from persistence.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             // Verify that last known good time was retained.
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
         }
     }
 
@@ -343,75 +354,75 @@
     for (auto buildTime : beforeNotBeforeBuildTimes)
     {
         // Set build time to the desired value.
-        NL_TEST_ASSERT(inSuite, DeviceLayer::ConfigurationMgr().SetFirmwareBuildChipEpochTime(buildTime) == CHIP_NO_ERROR);
+        EXPECT_EQ(DeviceLayer::ConfigurationMgr().SetFirmwareBuildChipEpochTime(buildTime), CHIP_NO_ERROR);
         chip::TestPersistentStorageDelegate testStorage;
         {
             // Initialize a fabric table.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             // Load a test fabric, but do not commit.
-            NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ false) == CHIP_NO_ERROR);
+            EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ false), CHIP_NO_ERROR);
 
             // Read Last Known Good Time and verify that it is now set to the certificate
             // NotBefore time, as this should be at or after firmware build time.
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == testCertNotBeforeTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, testCertNotBeforeTime);
 
             // Now test revert.  Last known good time should change back to the
             // previous value.
             fabricTable.RevertPendingFabricData();
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == buildTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, buildTime);
         }
         {
             // Test reloading last known good time from persistence.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             // Verify that the original last known good time was retained, since
             // we reverted before.
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
         }
         {
             // Now test loading a fabric and committing.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
-            NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
+            EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
 
             // Read Last Known Good Time and verify that it is now set to the certificate
             // NotBefore time, as this should be at or after firmware build time.
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == testCertNotBeforeTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, testCertNotBeforeTime);
 
             // Now test revert, which will be a no-op because we already
             // committed.  Verify that Last Known Good time is retained.
             fabricTable.RevertPendingFabricData();
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == testCertNotBeforeTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, testCertNotBeforeTime);
         }
         {
             // Test reloading last known good time from persistence.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             // Verify that the new last known good time was retained, since
             // we committed.
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == testCertNotBeforeTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, testCertNotBeforeTime);
         }
     }
 }
 
-void TestSetLastKnownGoodTime(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestSetLastKnownGoodTime)
 {
     // It is desirable for nodes to set Last Known Good Time whenever a good
     // time source is available, including cases where this would set the time
@@ -422,7 +433,7 @@
     // Test certs all have this NotBefore: Oct 15 14:23:43 2020 GMT
     const ASN1::ASN1UniversalTime asn1Expected = { 2020, 10, 15, 14, 23, 43 };
     uint32_t testCertNotBeforeSeconds;
-    NL_TEST_ASSERT(inSuite, Credentials::ASN1ToChipEpochTime(asn1Expected, testCertNotBeforeSeconds) == CHIP_NO_ERROR);
+    EXPECT_EQ(Credentials::ASN1ToChipEpochTime(asn1Expected, testCertNotBeforeSeconds), CHIP_NO_ERROR);
     System::Clock::Seconds32 testCertNotBeforeTime = System::Clock::Seconds32(testCertNotBeforeSeconds);
 
     // Iterate over two cases: one with build time prior to our certificates' NotBefore, one with build time after.
@@ -432,77 +443,77 @@
     for (auto buildTime : testCaseFirmwareBuildTimes)
     {
         // Set build time to the desired value.
-        NL_TEST_ASSERT(inSuite, DeviceLayer::ConfigurationMgr().SetFirmwareBuildChipEpochTime(buildTime) == CHIP_NO_ERROR);
+        EXPECT_EQ(DeviceLayer::ConfigurationMgr().SetFirmwareBuildChipEpochTime(buildTime), CHIP_NO_ERROR);
         chip::TestPersistentStorageDelegate testStorage;
         System::Clock::Seconds32 newTime;
         {
             // Initialize a fabric table.
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             // Load a test fabric
-            NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit= */ true) == CHIP_NO_ERROR);
+            EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit= */ true), CHIP_NO_ERROR);
 
             // Verify the Last Known Good Time matches our expected initial value.
             System::Clock::Seconds32 initialLastKnownGoodTime =
                 buildTime > testCertNotBeforeTime ? buildTime : testCertNotBeforeTime;
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == initialLastKnownGoodTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, initialLastKnownGoodTime);
 
             // Read Last Known Good Time and verify that it hasn't moved forward, since
             // build time is later than the test certs' NotBefore times.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == initialLastKnownGoodTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, initialLastKnownGoodTime);
 
             // Attempt to set a Last Known Good Time that is before the firmware build time.  This should fail.
             newTime = System::Clock::Seconds32(buildTime.count() - 1000);
-            NL_TEST_ASSERT(inSuite, fabricTable.SetLastKnownGoodChipEpochTime(newTime) != CHIP_NO_ERROR);
+            EXPECT_NE(fabricTable.SetLastKnownGoodChipEpochTime(newTime), CHIP_NO_ERROR);
 
             // Verify Last Known Good Time is unchanged.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == initialLastKnownGoodTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, initialLastKnownGoodTime);
 
             // Attempt to set a Last Known Good Time that is before our certificates' NotBefore times.  This should fail.
             newTime = System::Clock::Seconds32(testCertNotBeforeTime.count() - 1000);
-            NL_TEST_ASSERT(inSuite, fabricTable.SetLastKnownGoodChipEpochTime(newTime) != CHIP_NO_ERROR);
+            EXPECT_NE(fabricTable.SetLastKnownGoodChipEpochTime(newTime), CHIP_NO_ERROR);
 
             // Verify Last Known Good Time is unchanged.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == initialLastKnownGoodTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, initialLastKnownGoodTime);
 
             // Attempt to set a Last Known Good Time that at our current value.
-            NL_TEST_ASSERT(inSuite, fabricTable.SetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.SetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
 
             // Verify Last Known Good Time is unchanged.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == initialLastKnownGoodTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, initialLastKnownGoodTime);
 
             // Attempt to set Last Known Good Times that is after our current value.
             newTime = System::Clock::Seconds32(initialLastKnownGoodTime.count() + 1000);
-            NL_TEST_ASSERT(inSuite, fabricTable.SetLastKnownGoodChipEpochTime(newTime) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.SetLastKnownGoodChipEpochTime(newTime), CHIP_NO_ERROR);
 
             // Verify Last Known Good Time is updated.
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == newTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, newTime);
         }
         {
             // Verify that Last Known Good Time was persisted.
 
             ScopedFabricTable fabricTableHolder;
-            NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
             FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
             System::Clock::Seconds32 lastKnownGoodTime;
-            NL_TEST_ASSERT(inSuite, fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT(inSuite, lastKnownGoodTime == newTime);
+            EXPECT_EQ(fabricTable.GetLastKnownGoodChipEpochTime(lastKnownGoodTime), CHIP_NO_ERROR);
+            EXPECT_EQ(lastKnownGoodTime, newTime);
         }
     }
 }
 
 // Test adding 2 fabrics, updating 1, removing 1
-void TestBasicAddNocUpdateNocFlow(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestBasicAddNocUpdateNocFlow)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabric11CertAuthority;
     Credentials::TestOnlyLocalCertificateAuthority fabric44CertAuthority;
@@ -513,25 +524,25 @@
     // storage.SetLoggingLevel(chip::TestPersistentStorageDelegate::LoggingLevel::kLogMutation);
 
     // Initialize test CA and a Fabric 11 externally owned key
-    NL_TEST_ASSERT(inSuite, fabric11CertAuthority.Init().IsSuccess());
-    NL_TEST_ASSERT(inSuite, fabric44CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric11CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric44CertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     chip::Crypto::P256Keypair fabric11Node55Keypair; // Fabric ID 11,
-    NL_TEST_ASSERT(inSuite, fabric11Node55Keypair.Initialize(Crypto::ECPKeyTarget::ECDSA) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabric11Node55Keypair.Initialize(Crypto::ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     {
         FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-        NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 1);
+        EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(nextFabricIndex, 1);
     }
 
     size_t numFabricsIterated = 0;
@@ -542,10 +553,10 @@
     {
         FabricId fabricId = 11;
         NodeId nodeId     = 55;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric11CertAuthority.SetIncludeIcac(false)
-                                   .GenerateNocChain(fabricId, nodeId, fabric11Node55Keypair.Pubkey())
-                                   .GetStatus());
+        EXPECT_EQ(fabric11CertAuthority.SetIncludeIcac(false)
+                      .GenerateNocChain(fabricId, nodeId, fabric11Node55Keypair.Pubkey())
+                      .GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric11CertAuthority.GetRcac();
         ByteSpan noc  = fabric11CertAuthority.GetNoc();
 
@@ -562,48 +573,48 @@
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 0);
-            NL_TEST_ASSERT(inSuite, saw1 == false);
+            EXPECT_EQ(numFabricsIterated, 0u);
+            EXPECT_FALSE(saw1);
         }
 
         uint8_t rcacBuf[Credentials::kMaxCHIPCertLength];
         {
             // No pending root cert yet.
             MutableByteSpan fetchedSpan{ rcacBuf };
-            NL_TEST_ASSERT(inSuite, fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan) == CHIP_ERROR_NOT_FOUND);
+            EXPECT_EQ(fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan), CHIP_ERROR_NOT_FOUND);
         }
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         {
             // Now have a pending root cert.
             MutableByteSpan fetchedSpan{ rcacBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan));
-            NL_TEST_ASSERT(inSuite, fetchedSpan.data_equal(rcac));
+            EXPECT_EQ(fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan), CHIP_NO_ERROR);
+            EXPECT_TRUE(fetchedSpan.data_equal(rcac));
         }
 
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
         bool keyIsExternallyOwned  = true;
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithProvidedOpKey(noc, ByteSpan{}, kVendorId, &fabric11Node55Keypair,
-                                                                                keyIsExternallyOwned, &newFabricIndex));
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithProvidedOpKey(noc, ByteSpan{}, kVendorId, &fabric11Node55Keypair,
+                                                                   keyIsExternallyOwned, &newFabricIndex),
+                  CHIP_NO_ERROR);
+        EXPECT_EQ(newFabricIndex, 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
         {
             // No more pending root cert; it's associated with a fabric now.
             MutableByteSpan fetchedSpan{ rcacBuf };
-            NL_TEST_ASSERT(inSuite, fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan) == CHIP_ERROR_NOT_FOUND);
+            EXPECT_EQ(fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan), CHIP_ERROR_NOT_FOUND);
         }
 
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageKeysAtStart);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageKeysAtStart);
 
         // Next fabric index has not been updated yet.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 1);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 1);
         }
 
         // Validate iterator sees pending
@@ -615,56 +626,51 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == nodeId);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == fabricId);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), nodeId);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), fabricId);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
 
         // Commit, now storage should have keys
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == (numStorageKeysAtStart + 4)); // 2 opcerts + fabric metadata + index
+        EXPECT_EQ(storage.GetNumKeys(), (numStorageKeysAtStart + 4)); // 2 opcerts + fabric metadata + index
 
         // Next fabric index has been updated.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 2);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 2);
         }
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == newFabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == nodeId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == fabricId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), newFabricIndex);
+        EXPECT_EQ(fabricInfo->GetNodeId(), nodeId);
+        EXPECT_EQ(fabricInfo->GetFabricId(), fabricId);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
         // Validate that fabric has the correct operational key by verifying a signature
         Crypto::P256ECDSASignature sig;
         uint8_t message[] = { 'm', 's', 'g' };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric11Node55Keypair.Pubkey().ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+        EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+        EXPECT_EQ(fabric11Node55Keypair.Pubkey().ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
 
         // Validate iterator sees committed
         {
@@ -675,14 +681,14 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == nodeId);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == fabricId);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), nodeId);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), fabricId);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
     }
 
@@ -695,75 +701,70 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric44CertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric44CertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric44CertAuthority.GetRcac();
         ByteSpan icac = fabric44CertAuthority.GetIcac();
         ByteSpan noc  = fabric44CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         // Next fabric index should still be the same as before.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 2);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 2);
         }
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 2);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
+        EXPECT_EQ(newFabricIndex, 2);
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageAfterFirstAdd);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterFirstAdd);
         // Next fabric index has not been updated yet.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 2);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 2);
         }
 
         // Commit, now storage should have keys
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(),
-                              (numStorageAfterFirstAdd + 5)); // 3 opcerts + fabric metadata + 1 operational key
+        EXPECT_EQ(storage.GetNumKeys(),
+                  (numStorageAfterFirstAdd + 5)); // 3 opcerts + fabric metadata + 1 operational key
 
         // Next fabric index has been updated.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 3);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 3);
         }
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == newFabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == nodeId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == fabricId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), newFabricIndex);
+        EXPECT_EQ(fabricInfo->GetNodeId(), nodeId);
+        EXPECT_EQ(fabricInfo->GetFabricId(), fabricId);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
@@ -771,10 +772,10 @@
             uint8_t message[] = { 'm', 's', 'g' };
 
             Crypto::P256PublicKey nocPubKey;
-            NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey));
+            EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Verify we can now see 2 fabrics with the iterator
@@ -787,21 +788,21 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 55);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 11);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 55u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 11u);
                     saw1 = true;
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 999);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 999u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw2 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 2);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
-            NL_TEST_ASSERT(inSuite, saw2 == true);
+            EXPECT_EQ(numFabricsIterated, 2u);
+            EXPECT_TRUE(saw1);
+            EXPECT_TRUE(saw2);
         }
     }
 
@@ -817,22 +818,21 @@
         MutableByteSpan csrSpan{ csrBuf };
 
         // Make sure to tag fabric index to pending opkey: otherwise the UpdateNOC fails
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(2)), csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(2)), csrSpan),
+                  CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric44CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric44CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric44CertAuthority.GetRcac();
         ByteSpan noc  = fabric44CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-        NL_TEST_ASSERT_SUCCESS(
-            inSuite,
-            fabricTable.UpdatePendingFabricWithOperationalKeystore(2, noc, ByteSpan{}, FabricTable::AdvertiseIdentity::No));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.UpdatePendingFabricWithOperationalKeystore(2, noc, ByteSpan{}, FabricTable::AdvertiseIdentity::No),
+                  CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
 
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageAfterSecondAdd);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterSecondAdd);
 
         // Validate iterator sees the pending data
         {
@@ -844,52 +844,48 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 55);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 11);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.ShouldAdvertiseIdentity());
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 55u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 11u);
+                    EXPECT_TRUE(iterFabricInfo.ShouldAdvertiseIdentity());
                     saw1 = true;
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 1000);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
-                    NL_TEST_ASSERT(inSuite, !iterFabricInfo.ShouldAdvertiseIdentity());
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 1000u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
+                    EXPECT_FALSE(iterFabricInfo.ShouldAdvertiseIdentity());
                     saw2 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 2);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
-            NL_TEST_ASSERT(inSuite, saw2 == true);
+            EXPECT_EQ(numFabricsIterated, 2u);
+            EXPECT_TRUE(saw1);
+            EXPECT_TRUE(saw2);
         }
 
         // Commit, now storage should have keys
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(), (numStorageAfterSecondAdd - 1)); // ICAC got deleted
+        EXPECT_EQ(storage.GetNumKeys(), (numStorageAfterSecondAdd - 1)); // ICAC got deleted
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == fabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == nodeId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == fabricId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), fabricIndex);
+        EXPECT_EQ(fabricInfo->GetNodeId(), nodeId);
+        EXPECT_EQ(fabricInfo->GetFabricId(), fabricId);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(fabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(fabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
@@ -897,10 +893,10 @@
             uint8_t message[] = { 'm', 's', 'g' };
 
             Crypto::P256PublicKey nocPubKey;
-            NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey));
+            EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(fabricIndex, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(fabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Validate iterator sees the committed update
@@ -913,28 +909,28 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 55);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 11);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 55u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 11u);
                     saw1 = true;
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 1000);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 1000u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw2 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 2);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
-            NL_TEST_ASSERT(inSuite, saw2 == true);
+            EXPECT_EQ(numFabricsIterated, 2u);
+            EXPECT_TRUE(saw1);
+            EXPECT_TRUE(saw2);
         }
 
         // Next fabric index has stayed the same.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 3);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 3);
         }
     }
 
@@ -942,31 +938,28 @@
 
     // Sequence 4: Rename fabric index 2, applies immediately when nothing pending
     {
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SetFabricLabel(2, "roboto"_span));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.SetFabricLabel(2, "roboto"_span), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(), numStorageAfterUpdate); // Number of keys unchanged
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterUpdate); // Number of keys unchanged
 
         // Validate basic contents
         {
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 1000);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 44);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().data_equal(CharSpan{ "roboto", strlen("roboto") }));
-            }
+            ASSERT_NE(fabricInfo, nullptr);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 1000u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 44u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_TRUE(fabricInfo->GetFabricLabel().data_equal(CharSpan{ "roboto", strlen("roboto") }));
         }
 
         // Next fabric index has stayed the same.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 3);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 3);
         }
     }
 
@@ -974,52 +967,48 @@
     {
         // Remove the fabric: no commit needed
         {
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.Delete(1));
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+            EXPECT_EQ(fabricTable.FabricCount(), 2);
+            EXPECT_EQ(fabricTable.Delete(1), CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 1);
 
-            NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(), (numStorageAfterUpdate - 3)); // Deleted NOC, RCAC, Metadata
+            EXPECT_EQ(storage.GetNumKeys(), (numStorageAfterUpdate - 3)); // Deleted NOC, RCAC, Metadata
         }
 
         // Next fabric index has stayed the same.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 3);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 3);
         }
 
         // Validate contents of Fabric Index 2 is still OK
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 1000);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 44);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().data_equal(CharSpan{ "roboto", strlen("roboto") }));
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 1000u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 44u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_TRUE(fabricInfo->GetFabricLabel().data_equal(CharSpan{ "roboto", strlen("roboto") }));
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(2, rootPublicKeyOfFabric));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(2, rootPublicKeyOfFabric), CHIP_NO_ERROR);
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
             uint8_t nocBuf[Credentials::kMaxCHIPCertLength];
             MutableByteSpan nocSpan{ nocBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchNOCCert(2, nocSpan));
+            EXPECT_EQ(fabricTable.FetchNOCCert(2, nocSpan), CHIP_NO_ERROR);
 
             Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(nocSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(nocSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
             Crypto::P256PublicKey nocPubKey(certificates.GetCertSet()[0].mPublicKey);
 
             Crypto::P256ECDSASignature sig;
             uint8_t message[] = { 'm', 's', 'g' };
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(2, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(2, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Validate iterator only sees the remaining fabric
@@ -1036,34 +1025,34 @@
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 1000);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 1000u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw2 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == false);
-            NL_TEST_ASSERT(inSuite, saw2 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_FALSE(saw1);
+            EXPECT_TRUE(saw2);
         }
     }
 }
 
-void TestAddMultipleSameRootDifferentFabricId(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestAddMultipleSameRootDifferentFabricId)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabricCertAuthority;
 
     chip::TestPersistentStorageDelegate storage;
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     uint8_t rcac1Buf[kMaxCHIPCertLength];
     MutableByteSpan rcac1Span{ rcac1Buf };
@@ -1075,10 +1064,9 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac = fabricCertAuthority.GetRcac();
         // Keep a copy for second scope check
         CopySpanToMutableSpan(rcac, rcac1Span);
@@ -1086,30 +1074,26 @@
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
-        }
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
     }
     size_t numStorageKeysAfterFirstAdd = storage.GetNumKeys();
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterFirstAdd == 7); // Metadata, index, 3 certs, 1 opkey, last known good time
+    EXPECT_EQ(numStorageKeysAfterFirstAdd, 7u); // Metadata, index, 3 certs, 1 opkey, last known good time
 
     // Second scope: add FabricID 2222, node ID 66, same root as first
     {
@@ -1118,59 +1102,54 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac2 = fabricCertAuthority.GetRcac();
-        NL_TEST_ASSERT(inSuite, rcac2.data_equal(rcac1Span));
+        EXPECT_TRUE(rcac2.data_equal(rcac1Span));
 
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac2));
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac2), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 2);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
+        EXPECT_EQ(newFabricIndex, 2);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 66);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 2222);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
-        }
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 66u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 2222u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
     }
     size_t numStorageKeysAfterSecondAdd = storage.GetNumKeys();
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterSecondAdd == (numStorageKeysAfterFirstAdd + 5)); // Add 3 certs, 1 metadata, 1 opkey
+    EXPECT_EQ(numStorageKeysAfterSecondAdd, (numStorageKeysAfterFirstAdd + 5)); // Add 3 certs, 1 metadata, 1 opkey
 }
 
-void TestAddMultipleSameFabricIdDifferentRoot(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestAddMultipleSameFabricIdDifferentRoot)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabricCertAuthority1;
     Credentials::TestOnlyLocalCertificateAuthority fabricCertAuthority2;
 
     chip::TestPersistentStorageDelegate storage;
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority1.Init().IsSuccess());
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority2.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority1.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority2.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     uint8_t rcac1Buf[kMaxCHIPCertLength];
     MutableByteSpan rcac1Span{ rcac1Buf };
@@ -1182,10 +1161,9 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority1.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority1.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac = fabricCertAuthority1.GetRcac();
         // Keep a copy for second scope check
         CopySpanToMutableSpan(rcac, rcac1Span);
@@ -1193,30 +1171,26 @@
         ByteSpan icac = fabricCertAuthority1.GetIcac();
         ByteSpan noc  = fabricCertAuthority1.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
-        }
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
     }
     size_t numStorageKeysAfterFirstAdd = storage.GetNumKeys();
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterFirstAdd == 7); // Metadata, index, 3 certs, 1 opkey, last known good time
+    EXPECT_EQ(numStorageKeysAfterFirstAdd, 7u); // Metadata, index, 3 certs, 1 opkey, last known good time
 
     // Second scope: add FabricID 1111, node ID 66, different root from first
     {
@@ -1225,43 +1199,38 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority2.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority2.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac2 = fabricCertAuthority2.GetRcac();
-        NL_TEST_ASSERT(inSuite, !rcac2.data_equal(rcac1Span));
+        EXPECT_FALSE(rcac2.data_equal(rcac1Span));
 
         ByteSpan icac = fabricCertAuthority2.GetIcac();
         ByteSpan noc  = fabricCertAuthority2.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac2));
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac2), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 2);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
+        EXPECT_EQ(newFabricIndex, 2);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 66);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
-        }
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 66u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
     }
     size_t numStorageKeysAfterSecondAdd = storage.GetNumKeys();
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterSecondAdd == (numStorageKeysAfterFirstAdd + 5)); // Add 3 certs, 1 metadata, 1 opkey
+    EXPECT_EQ(numStorageKeysAfterSecondAdd, (numStorageKeysAfterFirstAdd + 5)); // Add 3 certs, 1 metadata, 1 opkey
 }
 
-void TestPersistence(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestPersistence)
 {
     /**
      *
@@ -1287,7 +1256,7 @@
 
     chip::TestPersistentStorageDelegate storage;
 
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
@@ -1295,10 +1264,10 @@
     {
         // Initialize a FabricTable
         ScopedFabricTable fabricTableHolder;
-        NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
         FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
 
         // Add Fabric 1111 Node Id 55
         {
@@ -1307,55 +1276,50 @@
 
             uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
             MutableByteSpan csrSpan{ csrBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+            EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(
-                inSuite, fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+            EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                      CHIP_NO_ERROR);
             ByteSpan rcac = fabricCertAuthority.GetRcac();
             ByteSpan icac = fabricCertAuthority.GetIcac();
             ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+            EXPECT_EQ(fabricTable.FabricCount(), 0);
+            EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-            NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+            EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 1);
+            EXPECT_EQ(newFabricIndex, 1);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+            EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
             // Validate contents
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                Credentials::ChipCertificateSet certificates;
-                NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-                NL_TEST_ASSERT_SUCCESS(inSuite,
-                                       certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-                Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+            ASSERT_NE(fabricInfo, nullptr);
+            Credentials::ChipCertificateSet certificates;
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-                Crypto::P256PublicKey rootPublicKeyOfFabric;
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-                NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-            }
+            Crypto::P256PublicKey rootPublicKeyOfFabric;
+            EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
             // Validate that fabric has the correct operational key by verifying a signature
             {
                 Crypto::P256ECDSASignature sig;
                 uint8_t message[] = { 'm', 's', 'g' };
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), fIdx1PublicKey));
+                EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), fIdx1PublicKey), CHIP_NO_ERROR);
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-                NL_TEST_ASSERT_SUCCESS(inSuite, fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+                EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+                EXPECT_EQ(fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
             }
         }
 
@@ -1366,58 +1330,54 @@
 
             uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
             MutableByteSpan csrSpan{ csrBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+            EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(
-                inSuite, fabricCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+            EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                      CHIP_NO_ERROR);
             ByteSpan rcac = fabricCertAuthority.GetRcac();
             ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+            EXPECT_EQ(fabricTable.FabricCount(), 1);
+            EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT_SUCCESS(
-                inSuite, fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex));
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-            NL_TEST_ASSERT(inSuite, newFabricIndex == 2);
+            EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex),
+                      CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 2);
+            EXPECT_EQ(newFabricIndex, 2);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+            EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
             // Validate contents
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                Credentials::ChipCertificateSet certificates;
-                NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-                NL_TEST_ASSERT_SUCCESS(inSuite,
-                                       certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-                Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+            ASSERT_NE(fabricInfo, nullptr);
+            Credentials::ChipCertificateSet certificates;
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 66);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 2222);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 66u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 2222u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-                Crypto::P256PublicKey rootPublicKeyOfFabric;
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-                NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-            }
+            Crypto::P256PublicKey rootPublicKeyOfFabric;
+            EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
             // Validate that fabric has the correct operational key by verifying a signature
             {
                 Crypto::P256ECDSASignature sig;
                 uint8_t message[] = { 'm', 's', 'g' };
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), fIdx2PublicKey));
+                EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), fIdx2PublicKey), CHIP_NO_ERROR);
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-                NL_TEST_ASSERT_SUCCESS(inSuite, fIdx2PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+                EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+                EXPECT_EQ(fIdx2PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
             }
         }
 
-        NL_TEST_ASSERT(inSuite, fabricTable.FabricCount() == 2);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
 
         // Verify we can now see 2 fabrics with the iterator
         {
@@ -1429,44 +1389,44 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 55);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 1111);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 55u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 1111u);
                     saw1 = true;
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 66);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 2222);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 66u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 2222u);
                     saw2 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 2);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
-            NL_TEST_ASSERT(inSuite, saw2 == true);
+            EXPECT_EQ(numFabricsIterated, 2u);
+            EXPECT_TRUE(saw1);
+            EXPECT_TRUE(saw2);
         }
 
         // Next fabric index should now be 3, since we added 1 and 2 above.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 3);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 3);
         }
     }
 
     // Global: Last known good time + fabric index = 2
     // Fabric 1111: Metadata, 1 opkey, RCAC/ICAC/NOC = 5
     // Fabric 2222: Metadata, 1 opkey, RCAC/NOC = 4
-    NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == (2 + 5 + 4));
+    EXPECT_EQ(storage.GetNumKeys(), (2u + 5u + 4u));
 
     // Second scope: Validate that a fresh FabricTable loads the previously committed fabrics on Init.
     {
         // Initialize a FabricTable
         ScopedFabricTable fabricTableHolder;
-        NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
         FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
 
         // Verify we can see 2 fabrics with the iterator
         {
@@ -1478,57 +1438,53 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 55);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 1111);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 55u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 1111u);
                     saw1 = true;
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 66);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 2222);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 66u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 2222u);
                     saw2 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 2);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
-            NL_TEST_ASSERT(inSuite, saw2 == true);
+            EXPECT_EQ(numFabricsIterated, 2u);
+            EXPECT_TRUE(saw1);
+            EXPECT_TRUE(saw2);
         }
 
         // Validate contents of Fabric 2222
         {
             uint8_t rcacBuf[Credentials::kMaxCHIPCertLength];
             MutableByteSpan rcacSpan{ rcacBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootCert(2, rcacSpan));
+            EXPECT_EQ(fabricTable.FetchRootCert(2, rcacSpan), CHIP_NO_ERROR);
 
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                Credentials::ChipCertificateSet certificates;
-                NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-                NL_TEST_ASSERT_SUCCESS(inSuite,
-                                       certificates.LoadCert(rcacSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-                Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+            ASSERT_NE(fabricInfo, nullptr);
+            Credentials::ChipCertificateSet certificates;
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcacSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 66);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 2222);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 66u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 2222u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-                Crypto::P256PublicKey rootPublicKeyOfFabric;
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(2, rootPublicKeyOfFabric));
-                NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-            }
+            Crypto::P256PublicKey rootPublicKeyOfFabric;
+            EXPECT_EQ(fabricTable.FetchRootPubkey(2, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
             // Validate that fabric has the correct operational key by verifying a signature
             {
                 Crypto::P256ECDSASignature sig;
                 uint8_t message[] = { 'm', 's', 'g' };
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(2, ByteSpan{ message }, sig));
-                NL_TEST_ASSERT_SUCCESS(inSuite, fIdx2PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+                EXPECT_EQ(fabricTable.SignWithOpKeypair(2, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+                EXPECT_EQ(fIdx2PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
             }
         }
 
@@ -1536,36 +1492,32 @@
         {
             uint8_t rcacBuf[Credentials::kMaxCHIPCertLength];
             MutableByteSpan rcacSpan{ rcacBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootCert(1, rcacSpan));
+            EXPECT_EQ(fabricTable.FetchRootCert(1, rcacSpan), CHIP_NO_ERROR);
 
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                Credentials::ChipCertificateSet certificates;
-                NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-                NL_TEST_ASSERT_SUCCESS(inSuite,
-                                       certificates.LoadCert(rcacSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-                Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+            ASSERT_NE(fabricInfo, nullptr);
+            Credentials::ChipCertificateSet certificates;
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcacSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-                Crypto::P256PublicKey rootPublicKeyOfFabric;
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(1, rootPublicKeyOfFabric));
-                NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-            }
+            Crypto::P256PublicKey rootPublicKeyOfFabric;
+            EXPECT_EQ(fabricTable.FetchRootPubkey(1, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
             // Validate that fabric has the correct operational key by verifying a signature
             {
                 Crypto::P256ECDSASignature sig;
                 uint8_t message[] = { 'm', 's', 'g' };
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(1, ByteSpan{ message }, sig));
-                NL_TEST_ASSERT_SUCCESS(inSuite, fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+                EXPECT_EQ(fabricTable.SignWithOpKeypair(1, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+                EXPECT_EQ(fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
             }
 
             // Validate that signing with Fabric index 2 fails to verify with fabric index 1
@@ -1573,40 +1525,39 @@
                 Crypto::P256ECDSASignature sig;
                 uint8_t message[] = { 'm', 's', 'g' };
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(2, ByteSpan{ message }, sig));
-                NL_TEST_ASSERT(inSuite,
-                               fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig) ==
-                                   CHIP_ERROR_INVALID_SIGNATURE);
+                EXPECT_EQ(fabricTable.SignWithOpKeypair(2, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+                EXPECT_EQ(fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig),
+                          CHIP_ERROR_INVALID_SIGNATURE);
             }
         }
 
         // Validate that next fabric index is still 3;
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 3);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 3);
         }
     }
 }
 
-void TestAddNocFailSafe(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestAddNocFailSafe)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabric11CertAuthority;
     Credentials::TestOnlyLocalCertificateAuthority fabric44CertAuthority;
 
     chip::TestPersistentStorageDelegate storage;
 
-    NL_TEST_ASSERT(inSuite, fabric11CertAuthority.Init().IsSuccess());
-    NL_TEST_ASSERT(inSuite, fabric44CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric11CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric44CertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     size_t numFabricsIterated = 0;
 
@@ -1619,30 +1570,30 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric11CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric11CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric11CertAuthority.GetRcac();
         ByteSpan noc  = fabric11CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
 
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 1);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 1);
         }
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex),
+                  CHIP_NO_ERROR);
+        EXPECT_EQ(newFabricIndex, 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageKeysAtStart); // Nothing yet
+        EXPECT_EQ(storage.GetNumKeys(), numStorageKeysAtStart); // Nothing yet
 
         // Validate iterator sees pending
         {
@@ -1653,23 +1604,23 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == nodeId);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == fabricId);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), nodeId);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), fabricId);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
 
         // Revert, should see nothing yet
         fabricTable.RevertPendingFabricData();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
 
         // No started except fabric index metadata
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == (numStorageKeysAtStart + 1));
+        EXPECT_EQ(storage.GetNumKeys(), (numStorageKeysAtStart + 1));
 
         // Validate iterator sees nothing
         {
@@ -1684,15 +1635,15 @@
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 0);
-            NL_TEST_ASSERT(inSuite, saw1 == false);
+            EXPECT_EQ(numFabricsIterated, 0u);
+            EXPECT_FALSE(saw1);
         }
 
         // Validate next fabric index has not changed.
         {
             FabricIndex nextFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT(inSuite, fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex) == CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, nextFabricIndex, 1);
+            EXPECT_EQ(fabricTable.PeekFabricIndexForNextAddition(nextFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(nextFabricIndex, 1);
         }
     }
 
@@ -1705,54 +1656,49 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric44CertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric44CertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric44CertAuthority.GetRcac();
         ByteSpan icac = fabric44CertAuthority.GetIcac();
         ByteSpan noc  = fabric44CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageAfterRevert);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterRevert);
 
         // Commit, now storage should have keys
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(),
-                              (numStorageAfterRevert + 5)); // 3 opcerts + fabric metadata + 1 operational key
+        EXPECT_EQ(storage.GetNumKeys(),
+                  (numStorageAfterRevert + 5)); // 3 opcerts + fabric metadata + 1 operational key
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == newFabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == nodeId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == fabricId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), newFabricIndex);
+        EXPECT_EQ(fabricInfo->GetNodeId(), nodeId);
+        EXPECT_EQ(fabricInfo->GetFabricId(), fabricId);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
@@ -1760,10 +1706,10 @@
             uint8_t message[] = { 'm', 's', 'g' };
 
             Crypto::P256PublicKey nocPubKey;
-            NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey));
+            EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Verify we can now see the fabric with the iterator
@@ -1775,14 +1721,14 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 999);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 999u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
     }
 
@@ -1795,8 +1741,8 @@
         fabricTable.RevertPendingFabricData();
 
         // No change of storage
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageAfterAdd);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterAdd);
 
         // Verify we can still see the fabric with the iterator
         {
@@ -1807,19 +1753,19 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 999);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 999u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
     }
 }
 
-void TestUpdateNocFailSafe(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestUpdateNocFailSafe)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabric11CertAuthority;
     Credentials::TestOnlyLocalCertificateAuthority fabric44CertAuthority;
@@ -1828,17 +1774,17 @@
 
     storage.SetLoggingLevel(chip::TestPersistentStorageDelegate::LoggingLevel::kLogMutation);
 
-    NL_TEST_ASSERT(inSuite, fabric11CertAuthority.Init().IsSuccess());
-    NL_TEST_ASSERT(inSuite, fabric44CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric11CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric44CertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     size_t numFabricsIterated = 0;
 
@@ -1851,54 +1797,49 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric44CertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric44CertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric44CertAuthority.GetRcac();
         ByteSpan icac = fabric44CertAuthority.GetIcac();
         ByteSpan noc  = fabric44CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageKeysAtStart);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageKeysAtStart);
 
         // Commit, now storage should have keys
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(),
-                              (numStorageKeysAtStart + 6)); // 3 opcerts + fabric metadata + 1 operational key + LKGT + fabric index
+        EXPECT_EQ(storage.GetNumKeys(),
+                  (numStorageKeysAtStart + 6)); // 3 opcerts + fabric metadata + 1 operational key + LKGT + fabric index
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == newFabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == nodeId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == fabricId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), newFabricIndex);
+        EXPECT_EQ(fabricInfo->GetNodeId(), nodeId);
+        EXPECT_EQ(fabricInfo->GetFabricId(), fabricId);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
@@ -1906,10 +1847,10 @@
             uint8_t message[] = { 'm', 's', 'g' };
 
             Crypto::P256PublicKey nocPubKey;
-            NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey));
+            EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Verify we can now see the fabric with the iterator
@@ -1921,14 +1862,14 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 999);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 999u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
     }
 
@@ -1944,20 +1885,20 @@
         MutableByteSpan csrSpan{ csrBuf };
 
         // Make sure to tag fabric index to pending opkey: otherwise the UpdateNOC fails
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(1)), csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(1)), csrSpan),
+                  CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric44CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric44CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric44CertAuthority.GetRcac();
         ByteSpan noc  = fabric44CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.UpdatePendingFabricWithOperationalKeystore(1, noc, ByteSpan{}));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.UpdatePendingFabricWithOperationalKeystore(1, noc, ByteSpan{}), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageAfterAdd);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterAdd);
 
         // Validate iterator sees the pending data
         {
@@ -1968,62 +1909,58 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 1000);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.ShouldAdvertiseIdentity());
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 1000u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
+                    EXPECT_TRUE(iterFabricInfo.ShouldAdvertiseIdentity());
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
 
         // Revert, should see Node ID 999 again
         fabricTable.RevertPendingFabricData();
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(), numStorageAfterAdd);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterAdd);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
+        ASSERT_NE(fabricInfo, nullptr);
         {
             Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
             Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == fabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 999);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 44);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), fabricIndex);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 999u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 44u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
             Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(fabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
+            EXPECT_EQ(fabricTable.FetchRootPubkey(fabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
         }
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
             uint8_t nocBuf[Credentials::kMaxCHIPCertLength];
             MutableByteSpan nocSpan{ nocBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchNOCCert(1, nocSpan));
-
+            EXPECT_EQ(fabricTable.FetchNOCCert(1, nocSpan), CHIP_NO_ERROR);
             Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(nocSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(nocSpan, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
             Crypto::P256PublicKey nocPubKey(certificates.GetCertSet()[0].mPublicKey);
 
             Crypto::P256ECDSASignature sig;
             uint8_t message[] = { 'm', 's', 'g' };
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(fabricIndex, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(fabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Validate iterator sees the previous fabric
@@ -2035,14 +1972,14 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 999);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 999u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
     }
 
@@ -2056,20 +1993,20 @@
         MutableByteSpan csrSpan{ csrBuf };
 
         // Make sure to tag fabric index to pending opkey: otherwise the UpdateNOC fails
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(1)), csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(1)), csrSpan),
+                  CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabric44CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabric44CertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
         ByteSpan rcac = fabric44CertAuthority.GetRcac();
         ByteSpan noc  = fabric44CertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.UpdatePendingFabricWithOperationalKeystore(1, noc, ByteSpan{}));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.UpdatePendingFabricWithOperationalKeystore(1, noc, ByteSpan{}), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         // No storage yet
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageAfterAdd);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterAdd);
 
         // Validate iterator sees the pending data
         {
@@ -2080,55 +2017,51 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 1001);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.ShouldAdvertiseIdentity());
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 1001u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
+                    EXPECT_TRUE(iterFabricInfo.ShouldAdvertiseIdentity());
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
 
         // Commit, should see Node ID 1001, and 1 less cert in the storage
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_EQUALS(inSuite, storage.GetNumKeys(), numStorageAfterAdd - 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageAfterAdd - 1);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == fabricIndex);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 1001);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 44);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), fabricIndex);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 1001u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 44u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(fabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(fabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
         // Validate that fabric has the correct operational key by verifying a signature
         {
             Crypto::P256PublicKey nocPubKey;
-            NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey));
+            EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), nocPubKey), CHIP_NO_ERROR);
 
             Crypto::P256ECDSASignature sig;
             uint8_t message[] = { 'm', 's', 'g' };
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(fabricIndex, ByteSpan{ message }, sig));
-            NL_TEST_ASSERT_SUCCESS(inSuite, nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+            EXPECT_EQ(fabricTable.SignWithOpKeypair(fabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+            EXPECT_EQ(nocPubKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
         }
 
         // Validate iterator sees the updated fabric
@@ -2140,32 +2073,32 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 1001);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 44);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 1001u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 44u);
                     saw1 = true;
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
         }
     }
 }
 
-void TestAddRootCertFailSafe(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestAddRootCertFailSafe)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabric11CertAuthority;
 
     chip::TestPersistentStorageDelegate storage;
 
-    NL_TEST_ASSERT(inSuite, fabric11CertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabric11CertAuthority.Init().IsSuccess());
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     // Add a root cert, see that pending works, and that revert works
     {
@@ -2175,15 +2108,15 @@
         {
             // No pending root cert yet.
             MutableByteSpan fetchedSpan{ rcacBuf };
-            NL_TEST_ASSERT(inSuite, fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan) == CHIP_ERROR_NOT_FOUND);
+            EXPECT_EQ(fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan), CHIP_ERROR_NOT_FOUND);
         }
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         {
             // Now have a pending root cert.
             MutableByteSpan fetchedSpan{ rcacBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan));
-            NL_TEST_ASSERT(inSuite, fetchedSpan.data_equal(rcac));
+            EXPECT_EQ(fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan), CHIP_NO_ERROR);
+            EXPECT_TRUE(fetchedSpan.data_equal(rcac));
         }
 
         // Revert
@@ -2192,31 +2125,31 @@
         {
             // No pending root cert anymore.
             MutableByteSpan fetchedSpan{ rcacBuf };
-            NL_TEST_ASSERT(inSuite, fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan) == CHIP_ERROR_NOT_FOUND);
+            EXPECT_EQ(fabricTable.FetchPendingNonFabricAssociatedRootCert(fetchedSpan), CHIP_ERROR_NOT_FOUND);
         }
     }
 }
 
-void TestSequenceErrors(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestSequenceErrors)
 {
     // TODO: Write test
 }
 
-void TestFabricLabelChange(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestFabricLabelChange)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabricCertAuthority;
 
     chip::TestPersistentStorageDelegate storage;
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     // First scope: add FabricID 1111, node ID 55
     {
@@ -2225,68 +2158,63 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac = fabricCertAuthority.GetRcac();
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
-        }
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
     }
     size_t numStorageKeysAfterFirstAdd = storage.GetNumKeys();
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterFirstAdd == 7); // Metadata, index, 3 certs, 1 opkey, last known good time
+    EXPECT_EQ(numStorageKeysAfterFirstAdd, 7u); // Metadata, index, 3 certs, 1 opkey, last known good time
 
     // Second scope: set FabricLabel to "acme fabric", make sure it cannot be reverted
     {
         // Fabric label starts unset from prior scope
         CharSpan fabricLabel = "placeholder"_span;
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.GetFabricLabel(1, fabricLabel));
-        NL_TEST_ASSERT(inSuite, fabricLabel.size() == 0);
+        EXPECT_EQ(fabricTable.GetFabricLabel(1, fabricLabel), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricLabel.size(), 0u);
 
         // Set a valid name
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SetFabricLabel(1, "acme fabric"_span));
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.GetFabricLabel(1, fabricLabel));
-        NL_TEST_ASSERT(inSuite, fabricLabel.data_equal("acme fabric"_span) == true);
+        EXPECT_EQ(fabricTable.SetFabricLabel(1, "acme fabric"_span), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.GetFabricLabel(1, fabricLabel), CHIP_NO_ERROR);
+        EXPECT_TRUE(fabricLabel.data_equal("acme fabric"_span));
 
         // Revert pending fabric data. Should not revert name since nothing pending.
         fabricTable.RevertPendingFabricData();
 
         fabricLabel = "placeholder"_span;
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.GetFabricLabel(1, fabricLabel));
-        NL_TEST_ASSERT(inSuite, fabricLabel.data_equal("acme fabric"_span) == true);
+        EXPECT_EQ(fabricTable.GetFabricLabel(1, fabricLabel), CHIP_NO_ERROR);
+        EXPECT_TRUE(fabricLabel.data_equal("acme fabric"_span));
 
         // Verify we fail to set too large a label (> kFabricLabelMaxLengthInBytes)
         CharSpan fabricLabelTooBig = "012345678901234567890123456789123456"_span;
-        NL_TEST_ASSERT(inSuite, fabricLabelTooBig.size() > chip::kFabricLabelMaxLengthInBytes);
+        EXPECT_GT(fabricLabelTooBig.size(), chip::kFabricLabelMaxLengthInBytes);
 
-        NL_TEST_ASSERT(inSuite, fabricTable.SetFabricLabel(1, fabricLabelTooBig) == CHIP_ERROR_INVALID_ARGUMENT);
+        EXPECT_EQ(fabricTable.SetFabricLabel(1, fabricLabelTooBig), CHIP_ERROR_INVALID_ARGUMENT);
 
         fabricLabel = "placeholder"_span;
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.GetFabricLabel(1, fabricLabel));
-        NL_TEST_ASSERT(inSuite, fabricLabel.data_equal("acme fabric"_span) == true);
+        EXPECT_EQ(fabricTable.GetFabricLabel(1, fabricLabel), CHIP_NO_ERROR);
+        EXPECT_TRUE(fabricLabel.data_equal("acme fabric"_span));
     }
 
     // Third scope: set fabric label after an update, it sticks, but then goes back after revert
@@ -2296,156 +2224,144 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(1)), csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::MakeOptional(static_cast<FabricIndex>(1)), csrSpan),
+                  CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.UpdatePendingFabricWithOperationalKeystore(1, noc, icac));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.UpdatePendingFabricWithOperationalKeystore(1, noc, icac), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         // Validate contents prior to change/revert
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
 
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 66);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 66u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
 
-            CharSpan fabricLabel = fabricInfo->GetFabricLabel();
-            NL_TEST_ASSERT(inSuite, fabricLabel.data_equal("acme fabric"_span) == true);
-        }
+        CharSpan fabricLabel = fabricInfo->GetFabricLabel();
+        EXPECT_TRUE(fabricLabel.data_equal("acme fabric"_span));
 
         // Update fabric label
-        CharSpan fabricLabel = "placeholder"_span;
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SetFabricLabel(1, "roboto fabric"_span));
+        fabricLabel = "placeholder"_span;
+        EXPECT_EQ(fabricTable.SetFabricLabel(1, "roboto fabric"_span), CHIP_NO_ERROR);
 
         fabricLabel = "placeholder"_span;
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.GetFabricLabel(1, fabricLabel));
-        NL_TEST_ASSERT(inSuite, fabricLabel.data_equal("roboto fabric"_span) == true);
+        EXPECT_EQ(fabricTable.GetFabricLabel(1, fabricLabel), CHIP_NO_ERROR);
+        EXPECT_TRUE(fabricLabel.data_equal("roboto fabric"_span));
 
         // Revert pending fabric data. Should revert name to "acme fabric"
         fabricTable.RevertPendingFabricData();
 
         fabricLabel = "placeholder"_span;
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.GetFabricLabel(1, fabricLabel));
-        NL_TEST_ASSERT(inSuite, fabricLabel.data_equal("acme fabric"_span) == true);
+        EXPECT_EQ(fabricTable.GetFabricLabel(1, fabricLabel), CHIP_NO_ERROR);
+        EXPECT_TRUE(fabricLabel.data_equal("acme fabric"_span));
     }
 }
 
-void TestCompressedFabricId(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestCompressedFabricId)
 {
     // TODO: Write test
 }
 
-void TestFabricLookup(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestFabricLookup)
 {
     // Initialize a fabric table.
     chip::TestPersistentStorageDelegate testStorage;
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
-    NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite,
-                   LoadTestFabric_Node02_01(inSuite, fabricTable, /* doCommit = */ true, FabricTable::AdvertiseIdentity::No) ==
-                       CHIP_NO_ERROR);
+    EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
+    EXPECT_EQ(LoadTestFabric_Node02_01(fabricTable, /* doCommit = */ true, FabricTable::AdvertiseIdentity::No), CHIP_NO_ERROR);
 
     // Attempt lookup of the Root01 fabric.
     {
         Crypto::P256PublicKey key;
-        NL_TEST_ASSERT(inSuite, key.Length() >= TestCerts::sTestCert_Root01_PublicKey.size());
+        EXPECT_GE(key.Length(), TestCerts::sTestCert_Root01_PublicKey.size());
         if (key.Length() < TestCerts::sTestCert_Root01_PublicKey.size())
         {
             return;
         }
         memcpy(key.Bytes(), TestCerts::sTestCert_Root01_PublicKey.data(), TestCerts::sTestCert_Root01_PublicKey.size());
         auto fabricInfo = fabricTable.FindFabric(key, 0xFAB000000000001D);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo == nullptr)
-        {
-            return;
-        }
-        NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-        NL_TEST_ASSERT(inSuite, fabricInfo->ShouldAdvertiseIdentity());
+        ASSERT_NE(fabricInfo, nullptr);
+
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_TRUE(fabricInfo->ShouldAdvertiseIdentity());
     }
 
     // Attempt lookup of the Root02 fabric.
     {
         Crypto::P256PublicKey key;
-        NL_TEST_ASSERT(inSuite, key.Length() >= TestCerts::sTestCert_Root02_PublicKey.size());
+        EXPECT_GE(key.Length(), TestCerts::sTestCert_Root02_PublicKey.size());
         if (key.Length() < TestCerts::sTestCert_Root02_PublicKey.size())
         {
             return;
         }
         memcpy(key.Bytes(), TestCerts::sTestCert_Root02_PublicKey.data(), TestCerts::sTestCert_Root02_PublicKey.size());
         auto fabricInfo = fabricTable.FindFabric(key, 0xFAB000000000001D);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo == nullptr)
-        {
-            return;
-        }
-        NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-        NL_TEST_ASSERT(inSuite, !fabricInfo->ShouldAdvertiseIdentity());
+        ASSERT_NE(fabricInfo, nullptr);
+
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+        EXPECT_FALSE(fabricInfo->ShouldAdvertiseIdentity());
     }
 
     // Attempt lookup of FabricIndex 0 --> should always fail.
     {
-        NL_TEST_ASSERT(inSuite, fabricTable.FindFabricWithIndex(0) == nullptr);
+        EXPECT_EQ(fabricTable.FindFabricWithIndex(0), nullptr);
     }
 }
 
-void TestFetchCATs(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestFetchCATs)
 {
     // Initialize a fabric table.
     chip::TestPersistentStorageDelegate testStorage;
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&testStorage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&testStorage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
-    NL_TEST_ASSERT(inSuite, LoadTestFabric_Node01_01(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, LoadTestFabric_Node02_01(inSuite, fabricTable, /* doCommit = */ true) == CHIP_NO_ERROR);
+    EXPECT_EQ(LoadTestFabric_Node01_01(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
+    EXPECT_EQ(LoadTestFabric_Node02_01(fabricTable, /* doCommit = */ true), CHIP_NO_ERROR);
 
     // Attempt Fetching fabric index 1 CATs and verify contents.
     {
         CATValues cats;
-        NL_TEST_ASSERT(inSuite, fabricTable.FetchCATs(1, cats) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FetchCATs(1, cats), CHIP_NO_ERROR);
         // Test fabric NOCs don't contain any CATs.
-        NL_TEST_ASSERT(inSuite, cats == kUndefinedCATs);
+        EXPECT_EQ(cats, kUndefinedCATs);
     }
 
     // Attempt Fetching fabric index 2 CATs and verify contents.
     {
         CATValues cats;
-        NL_TEST_ASSERT(inSuite, fabricTable.FetchCATs(2, cats) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FetchCATs(2, cats), CHIP_NO_ERROR);
         // Test fabric NOCs don't contain any CATs.
-        NL_TEST_ASSERT(inSuite, cats == kUndefinedCATs);
+        EXPECT_EQ(cats, kUndefinedCATs);
     }
 
     // TODO(#20335): Add test cases for NOCs that actually embed CATs
 }
 
 // Validate that adding the same fabric twice fails (same root, same FabricId)
-void TestAddNocRootCollision(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestAddNocRootCollision)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabricCertAuthority;
 
     chip::TestPersistentStorageDelegate storage;
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     // First scope: add FabricID 1111, node ID 55
     {
@@ -2454,51 +2370,46 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac = fabricCertAuthority.GetRcac();
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex,
-                                                                                      FabricTable::AdvertiseIdentity::No));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex,
+                                                                         FabricTable::AdvertiseIdentity::No),
+                  CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, !fabricInfo->ShouldAdvertiseIdentity());
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_FALSE(fabricInfo->ShouldAdvertiseIdentity());
 
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
     }
     size_t numStorageKeysAfterFirstAdd = storage.GetNumKeys();
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterFirstAdd == 7); // Metadata, index, 3 certs, 1 opkey, last known good time
+    EXPECT_EQ(numStorageKeysAfterFirstAdd, 7u); // Metadata, index, 3 certs, 1 opkey, last known good time
 
     // Second scope: add FabricID 1111, node ID 55 *again* --> Collision of Root/FabricID with existing
     {
@@ -2507,51 +2418,45 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac = fabricCertAuthority.GetRcac();
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT(inSuite,
-                       fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex) ==
-                           CHIP_ERROR_FABRIC_EXISTS);
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex),
+                  CHIP_ERROR_FABRIC_EXISTS);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         CHIP_ERROR err = fabricTable.CommitPendingFabricData();
         printf("err = %" CHIP_ERROR_FORMAT "\n", err.Format());
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
+        EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
 
         // Validate contents of Fabric index 1 still valid
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        ASSERT_NE(fabricInfo, nullptr);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(1, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(1, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
     }
 
     // Ensure no new persisted keys after failed colliding add
-    NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageKeysAfterFirstAdd);
+    EXPECT_EQ(storage.GetNumKeys(), numStorageKeysAfterFirstAdd);
 
     // Third scope: add FabricID 2222, node ID 55 --> Not colliding, should work. The failing commit above]
     // should have been enough of a revert that this scope succeeds without any additional revert.
@@ -2561,70 +2466,64 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
         ByteSpan rcac = fabricCertAuthority.GetRcac();
         ByteSpan icac = fabricCertAuthority.GetIcac();
         ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 2);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 2);
+        EXPECT_EQ(newFabricIndex, 2);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->ShouldAdvertiseIdentity());
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_TRUE(fabricInfo->ShouldAdvertiseIdentity());
 
-            Credentials::ChipCertificateSet certificates;
-            NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+        Credentials::ChipCertificateSet certificates;
+        EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+        EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+        Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 2222);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 2222u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-            Crypto::P256PublicKey rootPublicKeyOfFabric;
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-            NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-        }
+        Crypto::P256PublicKey rootPublicKeyOfFabric;
+        EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+        EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
     }
     size_t numStorageKeysAfterSecondAdd = storage.GetNumKeys();
 
-    NL_TEST_ASSERT(inSuite, numStorageKeysAfterSecondAdd == (numStorageKeysAfterFirstAdd + 5)); // Metadata, 3 certs, 1 opkey
+    EXPECT_EQ(numStorageKeysAfterSecondAdd, (numStorageKeysAfterFirstAdd + 5)); // Metadata, 3 certs, 1 opkey
 }
 
-void TestInvalidChaining(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestInvalidChaining)
 {
     Credentials::TestOnlyLocalCertificateAuthority fabricCertAuthority;
     Credentials::TestOnlyLocalCertificateAuthority differentCertAuthority;
 
     chip::TestPersistentStorageDelegate storage;
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority.Init().IsSuccess());
-    NL_TEST_ASSERT(inSuite, differentCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(differentCertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
     // Initialize a fabric table.
     ScopedFabricTable fabricTableHolder;
-    NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+    EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
     FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-    NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+    EXPECT_EQ(fabricTable.FabricCount(), 0);
 
     // Try to add fabric with either the NOC not chaining properly, or ICAC not chaining properly, fail,
     // then succeed with proper chaining
@@ -2634,13 +2533,12 @@
 
         uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
         MutableByteSpan csrSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
         // Generate same cert chain from two different roots
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               differentCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
+        EXPECT_EQ(differentCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
 
         ByteSpan rcac = fabricCertAuthority.GetRcac();
         ByteSpan icac = fabricCertAuthority.GetIcac();
@@ -2649,23 +2547,23 @@
         ByteSpan otherIcac = differentCertAuthority.GetIcac();
         ByteSpan otherNoc  = differentCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
 
         // Add with NOC not chaining to ICAC: fail
         {
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
             CHIP_ERROR err = fabricTable.AddNewPendingFabricWithOperationalKeystore(otherNoc, icac, kVendorId, &newFabricIndex);
-            NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+            EXPECT_NE(err, CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 0);
         }
 
         // Add with ICAC not chaining to root: fail
         {
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
             CHIP_ERROR err = fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, otherIcac, kVendorId, &newFabricIndex);
-            NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+            EXPECT_NE(err, CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 0);
         }
 
         // Add with NOC and ICAC chaining together, but not to root: fail
@@ -2673,8 +2571,8 @@
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
             CHIP_ERROR err =
                 fabricTable.AddNewPendingFabricWithOperationalKeystore(otherNoc, otherIcac, kVendorId, &newFabricIndex);
-            NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+            EXPECT_NE(err, CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 0);
         }
 
         // Revert state, start tests without ICAC
@@ -2683,52 +2581,48 @@
         // Generate same cert chain from two different roots
 
         csrSpan = MutableByteSpan{ csrBuf };
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
-        NL_TEST_ASSERT_SUCCESS(
-            inSuite, differentCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+        EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
+        EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(), CHIP_NO_ERROR);
+        EXPECT_EQ(differentCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                  CHIP_NO_ERROR);
 
         rcac = fabricCertAuthority.GetRcac();
         noc  = fabricCertAuthority.GetNoc();
 
         otherNoc = differentCertAuthority.GetNoc();
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+        EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
 
         // Add with NOC not chaining to RCAC: fail
         {
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
             CHIP_ERROR err =
                 fabricTable.AddNewPendingFabricWithOperationalKeystore(otherNoc, ByteSpan{}, kVendorId, &newFabricIndex);
-            NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+            EXPECT_NE(err, CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 0);
         }
 
         // Add properly now
         FabricIndex newFabricIndex = kUndefinedFabricIndex;
-        NL_TEST_ASSERT_SUCCESS(inSuite,
-                               fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex));
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-        NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+        EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex),
+                  CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
+        EXPECT_EQ(newFabricIndex, 1);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+        EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
         // Validate contents
         const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-        NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-        if (fabricInfo != nullptr)
-        {
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-            NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
-        }
+        ASSERT_NE(fabricInfo, nullptr);
+        EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+        EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+        EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+        EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+        EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
     }
 }
 
-void TestEphemeralKeys(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestEphemeralKeys)
 {
     // Initialize a fabric table with operational keystore
     {
@@ -2736,18 +2630,18 @@
 
         // Initialize a FabricTable
         ScopedFabricTable fabricTableHolder;
-        NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
         FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
         Crypto::P256ECDSASignature sig;
         uint8_t message[] = { 'm', 's', 'g' };
 
         Crypto::P256Keypair * ephemeralKeypair = fabricTable.AllocateEphemeralKeypairForCASE();
-        NL_TEST_ASSERT(inSuite, ephemeralKeypair != nullptr);
-        NL_TEST_ASSERT_SUCCESS(inSuite, ephemeralKeypair->Initialize(Crypto::ECPKeyTarget::ECDSA));
+        ASSERT_NE(ephemeralKeypair, nullptr);
+        EXPECT_EQ(ephemeralKeypair->Initialize(Crypto::ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, ephemeralKeypair->ECDSA_sign_msg(message, sizeof(message), sig));
-        NL_TEST_ASSERT_SUCCESS(inSuite, ephemeralKeypair->Pubkey().ECDSA_validate_msg_signature(message, sizeof(message), sig));
+        EXPECT_EQ(ephemeralKeypair->ECDSA_sign_msg(message, sizeof(message), sig), CHIP_NO_ERROR);
+        EXPECT_EQ(ephemeralKeypair->Pubkey().ECDSA_validate_msg_signature(message, sizeof(message), sig), CHIP_NO_ERROR);
 
         fabricTable.ReleaseEphemeralKeypair(ephemeralKeypair);
     }
@@ -2757,24 +2651,24 @@
         chip::TestPersistentStorageDelegate storage;
 
         chip::Credentials::PersistentStorageOpCertStore opCertStore;
-        NL_TEST_ASSERT_SUCCESS(inSuite, opCertStore.Init(&storage));
+        EXPECT_EQ(opCertStore.Init(&storage), CHIP_NO_ERROR);
 
         FabricTable fabricTable;
         FabricTable::InitParams initParams;
         initParams.storage     = &storage;
         initParams.opCertStore = &opCertStore;
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.Init(initParams));
+        EXPECT_EQ(fabricTable.Init(initParams), CHIP_NO_ERROR);
 
         Crypto::P256ECDSASignature sig;
         uint8_t message[] = { 'm', 's', 'g' };
 
         Crypto::P256Keypair * ephemeralKeypair = fabricTable.AllocateEphemeralKeypairForCASE();
-        NL_TEST_ASSERT(inSuite, ephemeralKeypair != nullptr);
-        NL_TEST_ASSERT_SUCCESS(inSuite, ephemeralKeypair->Initialize(Crypto::ECPKeyTarget::ECDSA));
+        ASSERT_NE(ephemeralKeypair, nullptr);
+        EXPECT_EQ(ephemeralKeypair->Initialize(Crypto::ECPKeyTarget::ECDSA), CHIP_NO_ERROR);
 
-        NL_TEST_ASSERT_SUCCESS(inSuite, ephemeralKeypair->ECDSA_sign_msg(message, sizeof(message), sig));
-        NL_TEST_ASSERT_SUCCESS(inSuite, ephemeralKeypair->Pubkey().ECDSA_validate_msg_signature(message, sizeof(message), sig));
+        EXPECT_EQ(ephemeralKeypair->ECDSA_sign_msg(message, sizeof(message), sig), CHIP_NO_ERROR);
+        EXPECT_EQ(ephemeralKeypair->Pubkey().ECDSA_validate_msg_signature(message, sizeof(message), sig), CHIP_NO_ERROR);
 
         fabricTable.ReleaseEphemeralKeypair(ephemeralKeypair);
 
@@ -2783,7 +2677,7 @@
     }
 }
 
-void TestCommitMarker(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestFabricTable, TestCommitMarker)
 {
     Crypto::P256PublicKey fIdx1PublicKey;
     Crypto::P256PublicKey fIdx2PublicKey;
@@ -2795,7 +2689,7 @@
     // Log verbosity on this test helps debug significantly
     storage.SetLoggingLevel(chip::TestPersistentStorageDelegate::LoggingLevel::kLogMutationAndReads);
 
-    NL_TEST_ASSERT(inSuite, fabricCertAuthority.Init().IsSuccess());
+    EXPECT_TRUE(fabricCertAuthority.Init().IsSuccess());
 
     constexpr uint16_t kVendorId = 0xFFF1u;
 
@@ -2808,11 +2702,11 @@
     {
         // Initialize a fabric table
         ScopedFabricTable fabricTableHolder;
-        NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
         FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
-        NL_TEST_ASSERT(inSuite, fabricTable.GetDeletedFabricFromCommitMarker() == kUndefinedFabricIndex);
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
+        EXPECT_EQ(fabricTable.GetDeletedFabricFromCommitMarker(), kUndefinedFabricIndex);
+        EXPECT_EQ(fabricTable.FabricCount(), 0);
 
         // Add Fabric 1111 Node Id 55
         {
@@ -2821,60 +2715,55 @@
 
             uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
             MutableByteSpan csrSpan{ csrBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+            EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(
-                inSuite, fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+            EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(true).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                      CHIP_NO_ERROR);
             ByteSpan rcac = fabricCertAuthority.GetRcac();
             ByteSpan icac = fabricCertAuthority.GetIcac();
             ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 0);
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+            EXPECT_EQ(fabricTable.FabricCount(), 0);
+            EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT_SUCCESS(inSuite,
-                                   fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex));
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-            NL_TEST_ASSERT(inSuite, newFabricIndex == 1);
+            EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, icac, kVendorId, &newFabricIndex), CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 1);
+            EXPECT_EQ(newFabricIndex, 1);
 
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.CommitPendingFabricData());
+            EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_NO_ERROR);
 
             // Validate contents
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(1);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                Credentials::ChipCertificateSet certificates;
-                NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-                NL_TEST_ASSERT_SUCCESS(inSuite,
-                                       certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-                Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+            ASSERT_NE(fabricInfo, nullptr);
+            Credentials::ChipCertificateSet certificates;
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 1);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 55);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 1111);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 1);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 55u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 1111u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-                Crypto::P256PublicKey rootPublicKeyOfFabric;
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-                NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-            }
+            Crypto::P256PublicKey rootPublicKeyOfFabric;
+            EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
             // Validate that fabric has the correct operational key by verifying a signature
             {
                 Crypto::P256ECDSASignature sig;
                 uint8_t message[] = { 'm', 's', 'g' };
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), fIdx1PublicKey));
+                EXPECT_EQ(VerifyCertificateSigningRequest(csrSpan.data(), csrSpan.size(), fIdx1PublicKey), CHIP_NO_ERROR);
 
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig));
-                NL_TEST_ASSERT_SUCCESS(inSuite, fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig));
+                EXPECT_EQ(fabricTable.SignWithOpKeypair(newFabricIndex, ByteSpan{ message }, sig), CHIP_NO_ERROR);
+                EXPECT_EQ(fIdx1PublicKey.ECDSA_validate_msg_signature(&message[0], sizeof(message), sig), CHIP_NO_ERROR);
             }
         }
         numStorageKeysAfterFirstAdd = storage.GetNumKeys();
 
-        NL_TEST_ASSERT(inSuite, numStorageKeysAfterFirstAdd == 7); // Metadata, index, 3 certs, 1 opkey, last known good time
+        EXPECT_EQ(numStorageKeysAfterFirstAdd, 7u); // Metadata, index, 3 certs, 1 opkey, last known good time
 
         // The following test requires test methods not available on all builds.
         // TODO: Debug why some CI jobs don't set it properly.
@@ -2887,53 +2776,49 @@
 
             uint8_t csrBuf[chip::Crypto::kMIN_CSR_Buffer_Size];
             MutableByteSpan csrSpan{ csrBuf };
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan));
+            EXPECT_EQ(fabricTable.AllocatePendingOperationalKey(chip::NullOptional, csrSpan), CHIP_NO_ERROR);
 
-            NL_TEST_ASSERT_SUCCESS(
-                inSuite, fabricCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus());
+            EXPECT_EQ(fabricCertAuthority.SetIncludeIcac(false).GenerateNocChain(fabricId, nodeId, csrSpan).GetStatus(),
+                      CHIP_NO_ERROR);
             ByteSpan rcac = fabricCertAuthority.GetRcac();
             ByteSpan noc  = fabricCertAuthority.GetNoc();
 
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
-            NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.AddNewPendingTrustedRootCert(rcac));
+            EXPECT_EQ(fabricTable.FabricCount(), 1);
+            EXPECT_EQ(fabricTable.AddNewPendingTrustedRootCert(rcac), CHIP_NO_ERROR);
             FabricIndex newFabricIndex = kUndefinedFabricIndex;
-            NL_TEST_ASSERT_SUCCESS(
-                inSuite, fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex));
-            NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 2);
-            NL_TEST_ASSERT(inSuite, newFabricIndex == 2);
+            EXPECT_EQ(fabricTable.AddNewPendingFabricWithOperationalKeystore(noc, ByteSpan{}, kVendorId, &newFabricIndex),
+                      CHIP_NO_ERROR);
+            EXPECT_EQ(fabricTable.FabricCount(), 2);
+            EXPECT_EQ(newFabricIndex, 2);
 
             // Validate contents of pending
             const auto * fabricInfo = fabricTable.FindFabricWithIndex(2);
-            NL_TEST_ASSERT(inSuite, fabricInfo != nullptr);
-            if (fabricInfo != nullptr)
-            {
-                Credentials::ChipCertificateSet certificates;
-                NL_TEST_ASSERT_SUCCESS(inSuite, certificates.Init(1));
-                NL_TEST_ASSERT_SUCCESS(inSuite,
-                                       certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)));
-                Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
+            ASSERT_NE(fabricInfo, nullptr);
+            Credentials::ChipCertificateSet certificates;
+            EXPECT_EQ(certificates.Init(1), CHIP_NO_ERROR);
+            EXPECT_EQ(certificates.LoadCert(rcac, BitFlags<CertDecodeFlags>(CertDecodeFlags::kIsTrustAnchor)), CHIP_NO_ERROR);
+            Crypto::P256PublicKey rcacPublicKey(certificates.GetCertSet()[0].mPublicKey);
 
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricIndex() == 2);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetNodeId() == 66);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricId() == 2222);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetVendorId() == kVendorId);
-                NL_TEST_ASSERT(inSuite, fabricInfo->GetFabricLabel().size() == 0);
+            EXPECT_EQ(fabricInfo->GetFabricIndex(), 2);
+            EXPECT_EQ(fabricInfo->GetNodeId(), 66u);
+            EXPECT_EQ(fabricInfo->GetFabricId(), 2222u);
+            EXPECT_EQ(fabricInfo->GetVendorId(), kVendorId);
+            EXPECT_EQ(fabricInfo->GetFabricLabel().size(), 0u);
 
-                Crypto::P256PublicKey rootPublicKeyOfFabric;
-                NL_TEST_ASSERT_SUCCESS(inSuite, fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric));
-                NL_TEST_ASSERT(inSuite, rootPublicKeyOfFabric.Matches(rcacPublicKey));
-            }
+            Crypto::P256PublicKey rootPublicKeyOfFabric;
+            EXPECT_EQ(fabricTable.FetchRootPubkey(newFabricIndex, rootPublicKeyOfFabric), CHIP_NO_ERROR);
+            EXPECT_TRUE(rootPublicKeyOfFabric.Matches(rcacPublicKey));
 
             // Make sure no additional storage yet
-            NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageKeysAfterFirstAdd);
+            EXPECT_EQ(storage.GetNumKeys(), numStorageKeysAfterFirstAdd);
 
             // --> FORCE AN ERROR ON COMMIT that will BYPASS commit clean-up (similar to reboot during commit)
             fabricTable.SetForceAbortCommitForTest(true);
-            NL_TEST_ASSERT(inSuite, fabricTable.CommitPendingFabricData() == CHIP_ERROR_INTERNAL);
+            EXPECT_EQ(fabricTable.CommitPendingFabricData(), CHIP_ERROR_INTERNAL);
 
             // Check that there are more keys now, partially committed: at least a Commit Marker (+1)
             // and some more keys from the aborted process.
-            NL_TEST_ASSERT(inSuite, storage.GetNumKeys() > (numStorageKeysAfterFirstAdd + 1));
+            EXPECT_GT(storage.GetNumKeys(), (numStorageKeysAfterFirstAdd + 1));
         }
 #endif // CONFIG_BUILD_FOR_HOST_UNIT_TEST
     }
@@ -2945,19 +2830,19 @@
         // Initialize a FabricTable again. Make sure it succeeds in initing.
         ScopedFabricTable fabricTableHolder;
 
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() > (numStorageKeysAfterFirstAdd + 1));
+        EXPECT_GT(storage.GetNumKeys(), (numStorageKeysAfterFirstAdd + 1));
 
-        NL_TEST_ASSERT(inSuite, fabricTableHolder.Init(&storage) == CHIP_NO_ERROR);
+        EXPECT_EQ(fabricTableHolder.Init(&storage), CHIP_NO_ERROR);
         FabricTable & fabricTable = fabricTableHolder.GetFabricTable();
 
         // Make sure that after init, the fabricTable has only 1 fabric
-        NL_TEST_ASSERT_EQUALS(inSuite, fabricTable.FabricCount(), 1);
+        EXPECT_EQ(fabricTable.FabricCount(), 1);
 
         // Make sure it caught the last partially committed fabric
-        NL_TEST_ASSERT(inSuite, fabricTable.GetDeletedFabricFromCommitMarker() == 2);
+        EXPECT_EQ(fabricTable.GetDeletedFabricFromCommitMarker(), 2);
 
         // Second read must return kUndefinedFabricIndex
-        NL_TEST_ASSERT(inSuite, fabricTable.GetDeletedFabricFromCommitMarker() == kUndefinedFabricIndex);
+        EXPECT_EQ(fabricTable.GetDeletedFabricFromCommitMarker(), kUndefinedFabricIndex);
 
         {
             // Here we would do other clean-ups (e.g. see Server.cpp that uses the above) and then
@@ -2966,7 +2851,7 @@
         }
 
         // Make sure that all other pending storage got deleted
-        NL_TEST_ASSERT(inSuite, storage.GetNumKeys() == numStorageKeysAfterFirstAdd);
+        EXPECT_EQ(storage.GetNumKeys(), numStorageKeysAfterFirstAdd);
 
         // Verify we can only see 1 fabric with the iterator
         {
@@ -2978,8 +2863,8 @@
                 ++numFabricsIterated;
                 if (iterFabricInfo.GetFabricIndex() == 1)
                 {
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetNodeId() == 55);
-                    NL_TEST_ASSERT(inSuite, iterFabricInfo.GetFabricId() == 1111);
+                    EXPECT_EQ(iterFabricInfo.GetNodeId(), 55u);
+                    EXPECT_EQ(iterFabricInfo.GetFabricId(), 1111u);
                     saw1 = true;
                 }
                 if (iterFabricInfo.GetFabricIndex() == 2)
@@ -2988,90 +2873,12 @@
                 }
             }
 
-            NL_TEST_ASSERT(inSuite, numFabricsIterated == 1);
-            NL_TEST_ASSERT(inSuite, saw1 == true);
-            NL_TEST_ASSERT(inSuite, saw2 == false);
+            EXPECT_EQ(numFabricsIterated, 1u);
+            EXPECT_TRUE(saw1);
+            EXPECT_FALSE(saw2);
         }
     }
 #endif // CONFIG_BUILD_FOR_HOST_UNIT_TEST
 }
 
-// Test Suite
-
-/**
- *  Test Suite that lists all the test functions.
- */
-// clang-format off
-static const nlTest sTests[] =
-{
-    NL_TEST_DEF("Last Known Good Time Init", TestLastKnownGoodTimeInit),
-    NL_TEST_DEF("Update Last Known Good Time", TestUpdateLastKnownGoodTime),
-    NL_TEST_DEF("Set Last Known Good Time", TestSetLastKnownGoodTime),
-    NL_TEST_DEF("Test basic AddNOC flow", TestBasicAddNocUpdateNocFlow),
-    NL_TEST_DEF("Test adding multiple fabrics that chain to same root, different fabric ID", TestAddMultipleSameRootDifferentFabricId),
-    NL_TEST_DEF("Test adding multiple fabrics that chain to different roots, same fabric ID", TestAddMultipleSameFabricIdDifferentRoot),
-    NL_TEST_DEF("Validate fabrics are loaded from persistence at FabricTable::init", TestPersistence),
-    NL_TEST_DEF("Test fail-safe handling during AddNOC", TestAddNocFailSafe),
-    NL_TEST_DEF("Test fail-safe handling during UpdateNoc", TestUpdateNocFailSafe),
-    NL_TEST_DEF("Test fail-safe handling for root cert", TestAddRootCertFailSafe),
-    NL_TEST_DEF("Test interlock sequencing errors", TestSequenceErrors),
-    NL_TEST_DEF("Test fabric label changes", TestFabricLabelChange),
-    NL_TEST_DEF("Test compressed fabric ID is properly generated", TestCompressedFabricId),
-    NL_TEST_DEF("Test fabric lookup by <root public key, fabric ID>", TestFabricLookup),
-    NL_TEST_DEF("Test Fetching CATs", TestFetchCATs),
-    NL_TEST_DEF("Test AddNOC root collision", TestAddNocRootCollision),
-    NL_TEST_DEF("Test invalid chaining in AddNOC and UpdateNOC", TestInvalidChaining),
-    NL_TEST_DEF("Test ephemeral keys allocation", TestEphemeralKeys),
-    NL_TEST_DEF("Test proper detection of Commit Marker on init", TestCommitMarker),
-    NL_TEST_DEF("Test colliding fabrics in the fabric table", TestCollidingFabrics),
-
-    NL_TEST_SENTINEL()
-};
-
-// clang-format on
-
-int TestFabricTable_Setup(void * inContext);
-int TestFabricTable_Teardown(void * inContext);
-
-// clang-format off
-static nlTestSuite sSuite =
-{
-    "Test-CHIP-FabricTable",
-    &sTests[0],
-    TestFabricTable_Setup,
-    TestFabricTable_Teardown,
-};
-// clang-format on
-
-/**
- *  Set up the test suite.
- */
-int TestFabricTable_Setup(void * inContext)
-{
-    DeviceLayer::SetConfigurationMgr(&DeviceLayer::ConfigurationManagerImpl::GetDefaultInstance());
-    return chip::Platform::MemoryInit() == CHIP_NO_ERROR ? SUCCESS : FAILURE;
-}
-
-/**
- *  Tear down the test suite.
- */
-int TestFabricTable_Teardown(void * inContext)
-{
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
 } // namespace
-
-/**
- *  Main
- */
-int TestFabricTable()
-{
-    // Run test suit against one context
-    nlTestRunner(&sSuite, nullptr);
-
-    return (nlTestRunnerStats(&sSuite));
-}
-
-CHIP_REGISTER_TEST_SUITE(TestFabricTable)
diff --git a/src/credentials/tests/TestGroupDataProvider.cpp b/src/credentials/tests/TestGroupDataProvider.cpp
index f3f44d8..7718cf0 100644
--- a/src/credentials/tests/TestGroupDataProvider.cpp
+++ b/src/credentials/tests/TestGroupDataProvider.cpp
@@ -18,11 +18,10 @@
 
 #include <credentials/GroupDataProviderImpl.h>
 #include <crypto/DefaultSessionKeystore.h>
+#include <gtest/gtest.h>
 #include <lib/core/TLV.h>
 #include <lib/support/CHIPMem.h>
 #include <lib/support/TestPersistentStorageDelegate.h>
-#include <lib/support/UnitTestRegistration.h>
-#include <nlunit-test.h>
 #include <platform/KeyValueStoreManager.h>
 #include <set>
 #include <string.h>
@@ -187,41 +186,100 @@
     return true;
 }
 
-void TestStorageDelegate(nlTestSuite * apSuite, void * apContext)
+struct TestGroupDataProvider : public ::testing::Test
+{
+
+    static chip::TestPersistentStorageDelegate sDelegate;
+    static chip::Crypto::DefaultSessionKeystore sSessionKeystore;
+    static GroupDataProviderImpl sProvider;
+
+    constexpr static EpochKey kEpochKeys0[] = {
+        { 0x0000000000000000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
+        { 0x1111111111111111, { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f } },
+        { 0x2222222222222222, { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f } }
+    };
+    constexpr static EpochKey kEpochKeys1[] = {
+        { 0x3333333333333333, { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f } },
+        { 0x4444444444444444, { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f } },
+        { 0x5555555555555555, { 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f } },
+    };
+    constexpr static EpochKey kEpochKeys2[] = {
+        { 0xaaaaaaaaaaaaaaaa, { 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf } },
+        { 0xbbbbbbbbbbbbbbbb, { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf } },
+        { 0xcccccccccccccccc, { 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf } },
+    };
+    constexpr static EpochKey kEpochKeys3[] = {
+        { 0xdddddddddddddddd, { 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf } },
+        { 0xeeeeeeeeeeeeeeee, { 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef } },
+        { 0xffffffffffffffff, { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff } },
+    };
+    static void SetUpTestSuite()
+    {
+
+        EXPECT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR);
+
+        // Initialize Group Data Provider
+        sProvider.SetStorageDelegate(&sDelegate);
+        sProvider.SetSessionKeystore(&sSessionKeystore);
+        sProvider.SetListener(&chip::app::TestGroups::sListener);
+        EXPECT_EQ(sProvider.Init(), CHIP_NO_ERROR);
+        SetGroupDataProvider(&sProvider);
+
+        memcpy(chip::app::TestGroups::kKeySet0.epoch_keys, kEpochKeys0, sizeof(kEpochKeys0));
+        memcpy(chip::app::TestGroups::kKeySet1.epoch_keys, kEpochKeys1, sizeof(kEpochKeys1));
+        memcpy(chip::app::TestGroups::kKeySet2.epoch_keys, kEpochKeys2, sizeof(kEpochKeys2));
+        memcpy(chip::app::TestGroups::kKeySet3.epoch_keys, kEpochKeys3, sizeof(kEpochKeys3));
+    }
+    static void TearDownTestSuite()
+    {
+        GroupDataProvider * provider = GetGroupDataProvider();
+        if (nullptr != provider)
+        {
+            provider->Finish();
+        }
+        chip::Platform::MemoryShutdown();
+    }
+};
+
+chip::TestPersistentStorageDelegate TestGroupDataProvider::sDelegate;
+chip::Crypto::DefaultSessionKeystore TestGroupDataProvider::sSessionKeystore;
+GroupDataProviderImpl TestGroupDataProvider::sProvider(kMaxGroupsPerFabric, kMaxGroupKeysPerFabric);
+
+TEST_F(TestGroupDataProvider, TestStorageDelegate)
 {
     chip::TestPersistentStorageDelegate delegate;
 
     char out[128];
     uint16_t size = static_cast<uint16_t>(sizeof(out));
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND == delegate.SyncGetKeyValue(kKey1, out, size));
+    EXPECT_EQ(CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND, delegate.SyncGetKeyValue(kKey1, out, size));
 
     size = static_cast<uint16_t>(kSize1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == delegate.SyncSetKeyValue(kKey1, kValue1, size));
+    EXPECT_EQ(delegate.SyncSetKeyValue(kKey1, kValue1, size), CHIP_NO_ERROR);
 
     size = static_cast<uint16_t>(sizeof(out));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == delegate.SyncGetKeyValue(kKey1, out, size));
-    NL_TEST_ASSERT(apSuite, size == kSize1);
-    NL_TEST_ASSERT(apSuite, !memcmp(out, kValue1, kSize1));
+    EXPECT_EQ(delegate.SyncGetKeyValue(kKey1, out, size), CHIP_NO_ERROR);
+    EXPECT_EQ(size, kSize1);
+    EXPECT_FALSE(memcmp(out, kValue1, kSize1));
 
     size = static_cast<uint16_t>(kSize2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == delegate.SyncSetKeyValue(kKey1, kValue2, size));
+    EXPECT_EQ(delegate.SyncSetKeyValue(kKey1, kValue2, size), CHIP_NO_ERROR);
 
     size = static_cast<uint16_t>(sizeof(out));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == delegate.SyncGetKeyValue(kKey1, out, size));
-    NL_TEST_ASSERT(apSuite, size == kSize2);
-    NL_TEST_ASSERT(apSuite, !memcmp(out, kValue2, kSize2));
+    EXPECT_EQ(delegate.SyncGetKeyValue(kKey1, out, size), CHIP_NO_ERROR);
+    EXPECT_EQ(size, kSize2);
+    EXPECT_FALSE(memcmp(out, kValue2, kSize2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == delegate.SyncDeleteKeyValue(kKey1));
+    EXPECT_EQ(delegate.SyncDeleteKeyValue(kKey1), CHIP_NO_ERROR);
 
     size = static_cast<uint16_t>(sizeof(out));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND == delegate.SyncGetKeyValue(kKey1, out, size));
+    EXPECT_EQ(CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND, delegate.SyncGetKeyValue(kKey1, out, size));
 }
 
-void TestGroupInfo(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestGroupInfo)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -233,114 +291,114 @@
     sListener.Reset();
 
     // Out-of-order
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_INVALID_ARGUMENT == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1));
+    EXPECT_EQ(CHIP_ERROR_INVALID_ARGUMENT, provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_3));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_3), CHIP_NO_ERROR);
 
     // Duplicated
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupInfoAt(kFabric1, 3, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupInfoAt(kFabric2, 3, kGroupInfo2_3));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupInfoAt(kFabric1, 3, kGroupInfo1_1));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupInfoAt(kFabric2, 3, kGroupInfo2_3));
 
     // Get Group Info
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_INVALID_FABRIC_INDEX == provider->GetGroupInfoAt(kUndefinedFabricIndex, 0, group));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfoAt(kFabric2, 999, group));
+    EXPECT_EQ(CHIP_ERROR_INVALID_FABRIC_INDEX, provider->GetGroupInfoAt(kUndefinedFabricIndex, 0, group));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfoAt(kFabric2, 999, group));
 
-    NL_TEST_ASSERT(apSuite, sListener.latest == kGroupInfo2_3);
-    NL_TEST_ASSERT(apSuite, 6 == sListener.added_count);
-    NL_TEST_ASSERT(apSuite, 0 == sListener.removed_count);
+    EXPECT_EQ(sListener.latest, kGroupInfo2_3);
+    EXPECT_EQ(sListener.added_count, 6u);
+    EXPECT_EQ(sListener.removed_count, 0u);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 2, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 2, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_3);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 2, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_3);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_1);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_1);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 2, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_3);
 
     // Remove Groups
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveGroupInfo(kFabric1, kGroup3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveGroupInfoAt(kFabric2, 0));
-    NL_TEST_ASSERT(apSuite, sListener.latest == kGroupInfo2_1);
-    NL_TEST_ASSERT(apSuite, 6 == sListener.added_count);
-    NL_TEST_ASSERT(apSuite, 2 == sListener.removed_count);
+    EXPECT_EQ(provider->RemoveGroupInfo(kFabric1, kGroup3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveGroupInfoAt(kFabric2, 0), CHIP_NO_ERROR);
+    EXPECT_EQ(sListener.latest, kGroupInfo2_1);
+    EXPECT_EQ(sListener.added_count, 6u);
+    EXPECT_EQ(sListener.removed_count, 2u);
 
     // Remaining entries shift up
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfoAt(kFabric2, 2, group));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_1);
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfoAt(kFabric1, 3, group));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfoAt(kFabric2, 2, group));
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_3);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_1);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfoAt(kFabric1, 3, group));
 
     // Overwrite with new group
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo3_4));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo3_4), CHIP_NO_ERROR);
     // Replace existing group (implicit group remove)
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo3_4));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo3_4), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 2, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo3_4);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 2, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo3_4);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo3_4);
-    NL_TEST_ASSERT(apSuite, sListener.latest == kGroupInfo3_4);
-    NL_TEST_ASSERT(apSuite, 8 == sListener.added_count);
-    NL_TEST_ASSERT(apSuite, 3 == sListener.removed_count);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo3_4);
+    EXPECT_EQ(sListener.latest, kGroupInfo3_4);
+    EXPECT_EQ(sListener.added_count, 8u);
+    EXPECT_EQ(sListener.removed_count, 3u);
 
     // Overwrite existing group, index must match
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo2_2));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_1));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo2_2), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo3_4));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo1_3));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo3_4));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo1_3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_2);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_3);
-    NL_TEST_ASSERT(apSuite, sListener.latest == kGroupInfo3_4);
-    NL_TEST_ASSERT(apSuite, 8 == sListener.added_count);
-    NL_TEST_ASSERT(apSuite, 3 == sListener.removed_count);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_3);
+    EXPECT_EQ(sListener.latest, kGroupInfo3_4);
+    EXPECT_EQ(sListener.added_count, 8u);
+    EXPECT_EQ(sListener.removed_count, 3u);
 
     // By group_id
 
     // Override existing
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfo(kFabric1, kGroupInfo3_5));
+    EXPECT_EQ(provider->SetGroupInfo(kFabric1, kGroupInfo3_5), CHIP_NO_ERROR);
     // New group
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfo(kFabric2, kGroupInfo3_2));
+    EXPECT_EQ(provider->SetGroupInfo(kFabric2, kGroupInfo3_2), CHIP_NO_ERROR);
     // Not found
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfo(kFabric2, kGroup5, group));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfo(kFabric2, kGroup5, group));
     // Existing
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfo(kFabric2, kGroup2, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo3_2);
-    NL_TEST_ASSERT(apSuite, sListener.latest == kGroupInfo3_2);
-    NL_TEST_ASSERT(apSuite, 9 == sListener.added_count);
-    NL_TEST_ASSERT(apSuite, 3 == sListener.removed_count);
+    EXPECT_EQ(provider->GetGroupInfo(kFabric2, kGroup2, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo3_2);
+    EXPECT_EQ(sListener.latest, kGroupInfo3_2);
+    EXPECT_EQ(sListener.added_count, 9u);
+    EXPECT_EQ(sListener.removed_count, 3u);
 }
 
-void TestGroupInfoIterator(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestGroupInfoIterator)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -349,12 +407,12 @@
 
     // Set Group Info
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_2));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_2), CHIP_NO_ERROR);
 
     // Iterate fabric 1
 
@@ -363,17 +421,14 @@
 
     auto it  = provider->IterateGroupInfo(kFabric1);
     size_t i = 0;
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    EXPECT_EQ(expected_f1_count, it->Count());
+    while (it->Next(group) && i < expected_f1_count)
     {
-        NL_TEST_ASSERT(apSuite, expected_f1_count == it->Count());
-        while (it->Next(group) && i < expected_f1_count)
-        {
-            NL_TEST_ASSERT(apSuite, expected_f1[i++] == group);
-        }
-        NL_TEST_ASSERT(apSuite, i == it->Count());
-        it->Release();
+        EXPECT_EQ(expected_f1[i++], group);
     }
+    EXPECT_EQ(i, it->Count());
+    it->Release();
 
     // Iterate fabric 2
 
@@ -381,24 +436,21 @@
     size_t expected_f2_count = sizeof(expected_f2) / sizeof(GroupInfo);
 
     it = provider->IterateGroupInfo(kFabric2);
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    i = 0;
+    EXPECT_EQ(expected_f2_count, it->Count());
+    while (it->Next(group) && i < expected_f2_count)
     {
-        i = 0;
-        NL_TEST_ASSERT(apSuite, expected_f2_count == it->Count());
-        while (it->Next(group) && i < expected_f2_count)
-        {
-            NL_TEST_ASSERT(apSuite, expected_f2[i++] == group);
-        }
-        NL_TEST_ASSERT(apSuite, i == it->Count());
-        it->Release();
+        EXPECT_EQ(expected_f2[i++], group);
     }
+    EXPECT_EQ(i, it->Count());
+    it->Release();
 }
 
-void TestEndpoints(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestEndpoints)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -407,92 +459,92 @@
 
     // Existing groups
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_3));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
 
     // New groups
 
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric2, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric2, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric2, kGroup4, kEndpointId3));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric2, kGroup1, kEndpointId0));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric2, kGroup2, kEndpointId1));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric2, kGroup4, kEndpointId3));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup4, kEndpointId3));
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup1, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup2, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup4, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup4, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup1, kEndpointId0));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup2, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup4, kEndpointId3));
 
     // Remove
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->RemoveEndpoint(kFabric1, kGroup1, kEndpointId4));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->RemoveEndpoint(kFabric1, kGroup1, kEndpointId4));
+    EXPECT_EQ(provider->RemoveEndpoint(kFabric1, kGroup1, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveEndpoint(kFabric1, kGroup2, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->RemoveEndpoint(kFabric2, kGroup5, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveEndpoint(kFabric2, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveEndpoint(kFabric2, kGroup3, kEndpointId2));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->RemoveEndpoint(kFabric2, kGroup5, kEndpointId0));
+    EXPECT_EQ(provider->RemoveEndpoint(kFabric2, kGroup2, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveEndpoint(kFabric2, kGroup3, kEndpointId2), CHIP_NO_ERROR);
 
     // Check removed
 
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
 
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric2, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup4, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup1, kEndpointId0));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric2, kGroup2, kEndpointId1));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup4, kEndpointId3));
 
     // Remove All
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup4, kEndpointId3));
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup3, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup4, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup4, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup3, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup4, kEndpointId3));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveEndpoint(kFabric1, kEndpointId3));
+    EXPECT_EQ(provider->RemoveEndpoint(kFabric1, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup4, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId3));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup3, kEndpointId3));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup4, kEndpointId3));
 }
 
-void TestEndpointIterator(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestEndpointIterator)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -501,18 +553,18 @@
 
     // Set Endpoints
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId4));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId4), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId4));
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId4), CHIP_NO_ERROR);
 
     // Iterate fabric 1
 
@@ -523,20 +575,17 @@
 
     auto it      = provider->IterateEndpoints(kFabric1);
     size_t count = 0;
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    GroupEndpoint output;
+    EXPECT_EQ(expected_f1.size(), it->Count());
+    while (it->Next(output) && count < expected_f1.size())
     {
-        GroupEndpoint output;
-        NL_TEST_ASSERT(apSuite, expected_f1.size() == it->Count());
-        while (it->Next(output) && count < expected_f1.size())
-        {
-            std::pair<chip::GroupId, chip::EndpointId> mapping(output.group_id, output.endpoint_id);
-            NL_TEST_ASSERT(apSuite, expected_f1.count(mapping) > 0);
-            count++;
-        }
-        NL_TEST_ASSERT(apSuite, count == it->Count());
-        it->Release();
+        std::pair<chip::GroupId, chip::EndpointId> mapping(output.group_id, output.endpoint_id);
+        EXPECT_GT(expected_f1.count(mapping), 0u);
+        count++;
     }
+    EXPECT_EQ(count, it->Count());
+    it->Release();
 
     // Iterate fabric 2
 
@@ -546,27 +595,23 @@
     };
 
     it = provider->IterateEndpoints(kFabric2);
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    count = 0;
+    EXPECT_EQ(expected_f2.size(), it->Count());
+    while (it->Next(output) && count < expected_f2.size())
     {
-        count = 0;
-        GroupEndpoint output;
-        NL_TEST_ASSERT(apSuite, expected_f2.size() == it->Count());
-        while (it->Next(output) && count < expected_f2.size())
-        {
-            std::pair<chip::GroupId, chip::EndpointId> mapping(output.group_id, output.endpoint_id);
-            NL_TEST_ASSERT(apSuite, expected_f2.count(mapping) > 0);
-            count++;
-        }
-        NL_TEST_ASSERT(apSuite, count == it->Count());
-        it->Release();
+        std::pair<chip::GroupId, chip::EndpointId> mapping(output.group_id, output.endpoint_id);
+        EXPECT_GT(expected_f2.count(mapping), 0u);
+        count++;
     }
+    EXPECT_EQ(count, it->Count());
+    it->Release();
 }
 
-void TestGroupKeys(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestGroupKeys)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -576,101 +621,101 @@
     // Set Group Info
 
     // Out-of-order
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_INVALID_ARGUMENT == provider->SetGroupKeyAt(kFabric1, 2, kGroup1Keyset0));
+    EXPECT_EQ(CHIP_ERROR_INVALID_ARGUMENT, provider->SetGroupKeyAt(kFabric1, 2, kGroup1Keyset0));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 0, kGroup1Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 1, kGroup1Keyset1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 2, kGroup1Keyset2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 3, kGroup1Keyset3));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 0, kGroup1Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 1, kGroup1Keyset1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 2, kGroup1Keyset2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 3, kGroup1Keyset3), CHIP_NO_ERROR);
     // Duplicated
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupKeyAt(kFabric1, 4, kGroup1Keyset2));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupKeyAt(kFabric1, 4, kGroup1Keyset2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 1, kGroup2Keyset1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 2, kGroup2Keyset2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 3, kGroup2Keyset3));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 1, kGroup2Keyset1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 2, kGroup2Keyset2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 3, kGroup2Keyset3), CHIP_NO_ERROR);
     // Duplicated
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupKeyAt(kFabric2, 4, kGroup2Keyset0));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupKeyAt(kFabric2, 4, kGroup2Keyset0));
 
     // Get Group Info
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_INVALID_FABRIC_INDEX == provider->GetGroupKeyAt(kUndefinedFabricIndex, 0, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric2, 999, pair));
+    EXPECT_EQ(CHIP_ERROR_INVALID_FABRIC_INDEX, provider->GetGroupKeyAt(kUndefinedFabricIndex, 0, pair));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric2, 999, pair));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 3, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 2, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 1, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 0, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset0);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 3, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset3);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 2, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset2);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 1, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset1);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 0, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset0);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 3, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 2, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 1, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 0, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset0);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 3, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset3);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 2, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset2);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 1, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset1);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 0, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset0);
 
     // Remove Groups (remaining entries shift up)
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveGroupKeyAt(kFabric1, 2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveGroupKeyAt(kFabric2, 0));
+    EXPECT_EQ(provider->RemoveGroupKeyAt(kFabric1, 2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveGroupKeyAt(kFabric2, 0), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric1, 3, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 2, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 1, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 0, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup1Keyset0);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric1, 3, pair));
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 2, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset3);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 1, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset1);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 0, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup1Keyset0);
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric2, 3, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 2, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 1, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 0, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset1);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric2, 3, pair));
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 2, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset3);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 1, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset2);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 0, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset1);
 
     // Overwrite, (group_id, keyset_id) must be unique
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupKeyAt(kFabric1, 2, kGroup1Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 2, kGroup3Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_DUPLICATE_KEY_ID == provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 0, kGroup3Keyset1));
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupKeyAt(kFabric1, 2, kGroup1Keyset0));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 2, kGroup3Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(CHIP_ERROR_DUPLICATE_KEY_ID, provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset2));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 0, kGroup3Keyset1), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric1, 2, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup3Keyset0);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric1, 2, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup3Keyset0);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 0, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup3Keyset1);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 0, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup3Keyset1);
 
     // Remove all
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveGroupKeys(kFabric1));
+    EXPECT_EQ(provider->RemoveGroupKeys(kFabric1), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric1, 3, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric1, 2, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric1, 1, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric1, 0, pair));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric1, 3, pair));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric1, 2, pair));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric1, 1, pair));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric1, 0, pair));
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupKeyAt(kFabric2, 3, pair));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 2, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 1, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup2Keyset2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupKeyAt(kFabric2, 0, pair));
-    NL_TEST_ASSERT(apSuite, pair == kGroup3Keyset1);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupKeyAt(kFabric2, 3, pair));
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 2, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset3);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 1, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup2Keyset2);
+    EXPECT_EQ(provider->GetGroupKeyAt(kFabric2, 0, pair), CHIP_NO_ERROR);
+    EXPECT_EQ(pair, kGroup3Keyset1);
 }
 
-void TestGroupKeyIterator(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestGroupKeyIterator)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -679,17 +724,17 @@
 
     // Set Group Info
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 0, kGroup3Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 1, kGroup3Keyset1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 2, kGroup3Keyset2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 3, kGroup3Keyset3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 4, kGroup1Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR != provider->SetGroupKeyAt(kFabric1, 5, kGroup1Keyset1));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 0, kGroup3Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 1, kGroup3Keyset1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 2, kGroup3Keyset2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 3, kGroup3Keyset3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 4, kGroup1Keyset0), CHIP_NO_ERROR);
+    EXPECT_NE(CHIP_NO_ERROR, provider->SetGroupKeyAt(kFabric1, 5, kGroup1Keyset1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 1, kGroup2Keyset1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 2, kGroup2Keyset2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 3, kGroup2Keyset3));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 1, kGroup2Keyset1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 2, kGroup2Keyset2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 3, kGroup2Keyset3), CHIP_NO_ERROR);
 
     // Iterate fabric 1
 
@@ -698,17 +743,14 @@
 
     auto it      = provider->IterateGroupKeys(kFabric1);
     size_t count = 0;
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    EXPECT_EQ(expected_f1_count, it->Count());
+    while (it->Next(pair) && count < expected_f1_count)
     {
-        NL_TEST_ASSERT(apSuite, expected_f1_count == it->Count());
-        while (it->Next(pair) && count < expected_f1_count)
-        {
-            NL_TEST_ASSERT(apSuite, expected_f1[count++] == pair);
-        }
-        NL_TEST_ASSERT(apSuite, count == it->Count());
-        it->Release();
+        EXPECT_EQ(expected_f1[count++], pair);
     }
+    EXPECT_EQ(count, it->Count());
+    it->Release();
 
     // Iterate fabric 2
 
@@ -716,24 +758,21 @@
     size_t expected_f2_count = sizeof(expected_f2) / sizeof(GroupKey);
 
     it = provider->IterateGroupKeys(kFabric2);
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    count = 0;
+    EXPECT_EQ(expected_f2_count, it->Count());
+    while (it->Next(pair) && count < expected_f2_count)
     {
-        count = 0;
-        NL_TEST_ASSERT(apSuite, expected_f2_count == it->Count());
-        while (it->Next(pair) && count < expected_f2_count)
-        {
-            NL_TEST_ASSERT(apSuite, expected_f2[count++] == pair);
-        }
-        NL_TEST_ASSERT(apSuite, count == it->Count());
-        it->Release();
+        EXPECT_EQ(expected_f2[count++], pair);
     }
+    EXPECT_EQ(count, it->Count());
+    it->Release();
 }
 
-void TestKeySets(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestKeySets)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -742,104 +781,104 @@
 
     // Add KeySets
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR != provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet4));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1));
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet3), CHIP_NO_ERROR);
+    EXPECT_NE(CHIP_NO_ERROR, provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet4));
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1), CHIP_NO_ERROR);
 
     // Get KeySets
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId3, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet3));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId3, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet3));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet1));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId1, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet2));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId2, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId3, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet3));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId3, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet3));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet2));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId2, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet1));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId1, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
     // Remove Keysets
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->RemoveKeySet(kFabric1, 0xffff));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->RemoveKeySet(kFabric1, 0xffff));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric1, kKeysetId1)); // First
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric1, kKeysetId3)); // Last
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric2, kKeysetId2)); // Middle
+    EXPECT_EQ(provider->RemoveKeySet(kFabric1, kKeysetId1), CHIP_NO_ERROR); // First
+    EXPECT_EQ(provider->RemoveKeySet(kFabric1, kKeysetId3), CHIP_NO_ERROR); // Last
+    EXPECT_EQ(provider->RemoveKeySet(kFabric2, kKeysetId2), CHIP_NO_ERROR); // Middle
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, kKeysetId3, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, kKeysetId3, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, kKeysetId1, keyset));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet2));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId2, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId3, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet3));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId3, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet3));
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric2, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet1));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric2, kKeysetId2, keyset));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId1, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
     // Remove all
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->RemoveKeySet(kFabric1, kKeysetId3));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->RemoveKeySet(kFabric1, kKeysetId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric1, kKeysetId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric1, kKeysetId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric2, kKeysetId3));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->RemoveKeySet(kFabric2, kKeysetId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric2, kKeysetId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric2, kKeysetId0));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->RemoveKeySet(kFabric1, kKeysetId3));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->RemoveKeySet(kFabric1, kKeysetId1));
+    EXPECT_EQ(provider->RemoveKeySet(kFabric1, kKeysetId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveKeySet(kFabric1, kKeysetId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveKeySet(kFabric2, kKeysetId3), CHIP_NO_ERROR);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->RemoveKeySet(kFabric2, kKeysetId2));
+    EXPECT_EQ(provider->RemoveKeySet(kFabric2, kKeysetId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->RemoveKeySet(kFabric2, kKeysetId0), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, kKeysetId3, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric2, kKeysetId3, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric2, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric2, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric2, kKeysetId0, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, kKeysetId3, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, kKeysetId1, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, kKeysetId0, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, kKeysetId2, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric2, kKeysetId3, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric2, kKeysetId2, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric2, kKeysetId1, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric2, kKeysetId0, keyset));
 }
 
-void TestIpk(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestIpk)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
 
     // Make sure IPK set is not found on a fresh provider
     KeySet ipkOperationalKeySet;
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
 
     // Add a non-IPK key, make sure the IPK set is not found
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet3));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet3), CHIP_NO_ERROR);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
 
     const uint8_t kIpkEpochKeyFromSpec[] = { 0x23, 0x5b, 0xf7, 0xe6, 0x28, 0x23, 0xd3, 0x58,
                                              0xdc, 0xa4, 0xba, 0x50, 0xb1, 0x53, 0x5f, 0x4b };
@@ -849,55 +888,51 @@
     memcpy(&fabric1KeySet0.epoch_keys[0].key, &kIpkEpochKeyFromSpec[0], sizeof(kIpkEpochKeyFromSpec));
 
     // Set a single IPK, validate key derivation follows spec
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, fabric1KeySet0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, fabric1KeySet0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet), CHIP_NO_ERROR);
 
     // Make sure the derived key matches spec test vector
     const uint8_t kExpectedIpkFromSpec[] = { 0xa6, 0xf5, 0x30, 0x6b, 0xaf, 0x6d, 0x05, 0x0a,
                                              0xf2, 0x3b, 0xa4, 0xbd, 0x6b, 0x9d, 0xd9, 0x60 };
 
-    NL_TEST_ASSERT(apSuite, 0 == ipkOperationalKeySet.keyset_id);
-    NL_TEST_ASSERT(apSuite, 1 == ipkOperationalKeySet.num_keys_used);
-    NL_TEST_ASSERT(apSuite, SecurityPolicy::kTrustFirst == ipkOperationalKeySet.policy);
-    NL_TEST_ASSERT(apSuite, 1234 == ipkOperationalKeySet.epoch_keys[0].start_time);
-    NL_TEST_ASSERT(apSuite,
-                   0 == memcmp(ipkOperationalKeySet.epoch_keys[0].key, kExpectedIpkFromSpec, sizeof(kExpectedIpkFromSpec)));
+    EXPECT_EQ(ipkOperationalKeySet.keyset_id, 0u);
+    EXPECT_EQ(ipkOperationalKeySet.num_keys_used, 1u);
+    EXPECT_EQ(SecurityPolicy::kTrustFirst, ipkOperationalKeySet.policy);
+    EXPECT_EQ(ipkOperationalKeySet.epoch_keys[0].start_time, 1234u);
+    EXPECT_EQ(memcmp(ipkOperationalKeySet.epoch_keys[0].key, kExpectedIpkFromSpec, sizeof(kExpectedIpkFromSpec)), 0);
 
     // Remove IPK, verify removal
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveKeySet(kFabric1, kKeysetId0));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
+    EXPECT_EQ(provider->RemoveKeySet(kFabric1, kKeysetId0), CHIP_NO_ERROR);
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
 
     // Set a single IPK with the SetSingleIpkEpochKey helper, validate key derivation follows spec
-    NL_TEST_ASSERT(
-        apSuite,
-        CHIP_NO_ERROR ==
-            chip::Credentials::SetSingleIpkEpochKey(provider, kFabric1, ByteSpan(kIpkEpochKeyFromSpec), kCompressedFabricId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet));
+    EXPECT_EQ(chip::Credentials::SetSingleIpkEpochKey(provider, kFabric1, ByteSpan(kIpkEpochKeyFromSpec), kCompressedFabricId1),
+              CHIP_NO_ERROR);
+    EXPECT_EQ(provider->GetIpkKeySet(kFabric1, ipkOperationalKeySet), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, 0 == ipkOperationalKeySet.keyset_id);
-    NL_TEST_ASSERT(apSuite, 1 == ipkOperationalKeySet.num_keys_used);
-    NL_TEST_ASSERT(apSuite, SecurityPolicy::kTrustFirst == ipkOperationalKeySet.policy);
-    NL_TEST_ASSERT(apSuite, 0 == ipkOperationalKeySet.epoch_keys[0].start_time); // default time is zero for SetSingleIpkEpochKey
-    NL_TEST_ASSERT(apSuite,
-                   0 == memcmp(ipkOperationalKeySet.epoch_keys[0].key, kExpectedIpkFromSpec, sizeof(kExpectedIpkFromSpec)));
+    EXPECT_EQ(ipkOperationalKeySet.keyset_id, 0u);
+    EXPECT_EQ(ipkOperationalKeySet.num_keys_used, 1u);
+    EXPECT_EQ(SecurityPolicy::kTrustFirst, ipkOperationalKeySet.policy);
+    EXPECT_EQ(ipkOperationalKeySet.epoch_keys[0].start_time, 0u); // default time is zero for SetSingleIpkEpochKey
+    EXPECT_EQ(memcmp(ipkOperationalKeySet.epoch_keys[0].key, kExpectedIpkFromSpec, sizeof(kExpectedIpkFromSpec)), 0);
 }
 
-void TestKeySetIterator(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestKeySetIterator)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
 
     // Add data to iterate
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1));
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1), CHIP_NO_ERROR);
 
     // Iterate Fabric 1
 
@@ -908,48 +943,42 @@
     };
 
     auto it = provider->IterateKeySets(kFabric1);
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
-    {
-        size_t count = 0;
-        NL_TEST_ASSERT(apSuite, expected_f1.size() == it->Count());
+    ASSERT_TRUE(it);
+    size_t count = 0;
+    EXPECT_EQ(expected_f1.size(), it->Count());
 
-        while (it->Next(keyset) && count < expected_f1.size())
-        {
-            NL_TEST_ASSERT(apSuite, expected_f1.count(keyset.keyset_id) > 0);
-            NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, expected_f1[keyset.keyset_id]));
-            count++;
-        }
-        NL_TEST_ASSERT(apSuite, count == expected_f1.size());
-        it->Release();
+    while (it->Next(keyset) && count < expected_f1.size())
+    {
+        EXPECT_GT(expected_f1.count(keyset.keyset_id), 0u);
+        EXPECT_TRUE(CompareKeySets(keyset, expected_f1[keyset.keyset_id]));
+        count++;
     }
+    EXPECT_EQ(count, expected_f1.size());
+    it->Release();
 
     // Iterate Fabric 2
 
     std::map<uint16_t, const KeySet> expected_f2{ { kKeysetId1, kKeySet1 }, { kKeysetId2, kKeySet2 }, { kKeysetId3, kKeySet3 } };
 
     it = provider->IterateKeySets(kFabric2);
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
-    {
-        size_t count = 0;
-        NL_TEST_ASSERT(apSuite, expected_f2.size() == it->Count());
+    ASSERT_TRUE(it);
+    count = 0;
+    EXPECT_EQ(expected_f2.size(), it->Count());
 
-        while (it->Next(keyset) && count < expected_f2.size())
-        {
-            NL_TEST_ASSERT(apSuite, expected_f2.count(keyset.keyset_id) > 0);
-            NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, expected_f2[keyset.keyset_id]));
-            count++;
-        }
-        NL_TEST_ASSERT(apSuite, count == expected_f2.size());
-        it->Release();
+    while (it->Next(keyset) && count < expected_f2.size())
+    {
+        EXPECT_GT(expected_f2.count(keyset.keyset_id), 0u);
+        EXPECT_TRUE(CompareKeySets(keyset, expected_f2[keyset.keyset_id]));
+        count++;
     }
+    EXPECT_EQ(count, expected_f2.size());
+    it->Release();
 }
 
-void TestPerFabricData(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestPerFabricData)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
@@ -957,163 +986,163 @@
     // Group Info
     GroupInfo group;
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_2));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_2), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_2);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric1, 2, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo1_1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 0, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_1);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 1, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_3);
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 2, group));
-    NL_TEST_ASSERT(apSuite, group == kGroupInfo2_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_3);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_2);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric1, 2, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo1_1);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_1);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_3);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 2, group), CHIP_NO_ERROR);
+    EXPECT_EQ(group, kGroupInfo2_2);
 
     // Endpoints
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId4));
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId4), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup1, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId4));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId0));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId4));
 
     // Keys
 
     KeySet keyset;
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0));
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet1));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId1, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet2));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId2, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId2, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet2));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId2, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet2));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet1));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId1, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric1, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(provider->GetKeySet(kFabric1, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
     //
     // Remove Fabric
     //
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->RemoveFabric(kFabric1));
+    EXPECT_EQ(provider->RemoveFabric(kFabric1), CHIP_NO_ERROR);
 
     // Endpoints
 
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup1, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, !provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, provider->HasEndpoint(kFabric2, kGroup3, kEndpointId4));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId0));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId1));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup1, kEndpointId2));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId1));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId2));
+    EXPECT_FALSE(provider->HasEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId0));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId1));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId2));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId3));
+    EXPECT_TRUE(provider->HasEndpoint(kFabric2, kGroup3, kEndpointId4));
 
     // Group Info
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfoAt(kFabric1, 0, group));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfoAt(kFabric1, 1, group));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetGroupInfoAt(kFabric1, 2, group));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 0, group));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 1, group));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetGroupInfoAt(kFabric2, 2, group));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfoAt(kFabric1, 0, group));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfoAt(kFabric1, 1, group));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetGroupInfoAt(kFabric1, 2, group));
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 0, group), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 1, group), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->GetGroupInfoAt(kFabric2, 2, group), CHIP_NO_ERROR);
 
     // Keys
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId1, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet1));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId1, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet1));
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->GetKeySet(kFabric2, kKeysetId0, keyset));
-    NL_TEST_ASSERT(apSuite, CompareKeySets(keyset, kKeySet0));
+    EXPECT_EQ(provider->GetKeySet(kFabric2, kKeysetId0, keyset), CHIP_NO_ERROR);
+    EXPECT_TRUE(CompareKeySets(keyset, kKeySet0));
 
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, 202, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, 404, keyset));
-    NL_TEST_ASSERT(apSuite, CHIP_ERROR_NOT_FOUND == provider->GetKeySet(kFabric1, 606, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, 202, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, 404, keyset));
+    EXPECT_EQ(CHIP_ERROR_NOT_FOUND, provider->GetKeySet(kFabric1, 606, keyset));
 }
 
-void TestGroupDecryption(nlTestSuite * apSuite, void * apContext)
+TEST_F(TestGroupDataProvider, TestGroupDecryption)
 {
     GroupDataProvider * provider = GetGroupDataProvider();
-    NL_TEST_ASSERT(apSuite, provider);
+    EXPECT_TRUE(provider);
 
     // Reset test
     ResetProvider(provider);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_2));
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 0, kGroupInfo1_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 1, kGroupInfo1_2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric1, 2, kGroupInfo1_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 0, kGroupInfo2_1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 1, kGroupInfo2_3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupInfoAt(kFabric2, 2, kGroupInfo2_2), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup1, kEndpointId4));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3));
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup1, kEndpointId4), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric1, kGroup2, kEndpointId3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId3));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->AddEndpoint(kFabric2, kGroup3, kEndpointId4));
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId3), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->AddEndpoint(kFabric2, kGroup3, kEndpointId4), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet3));
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric1, kCompressedFabricId1, kKeySet2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetKeySet(kFabric2, kCompressedFabricId2, kKeySet3), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 0, kGroup1Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 1, kGroup1Keyset2));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 2, kGroup3Keyset0));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric1, 3, kGroup3Keyset2));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 0, kGroup1Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 1, kGroup1Keyset2), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 2, kGroup3Keyset0), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric1, 3, kGroup3Keyset2), CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset1));
-    NL_TEST_ASSERT(apSuite, CHIP_NO_ERROR == provider->SetGroupKeyAt(kFabric2, 1, kGroup2Keyset3));
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 0, kGroup2Keyset1), CHIP_NO_ERROR);
+    EXPECT_EQ(provider->SetGroupKeyAt(kFabric2, 1, kGroup2Keyset3), CHIP_NO_ERROR);
 
     const size_t kMessageLength            = 10;
     const uint8_t kMessage[kMessageLength] = { 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9 };
@@ -1140,17 +1169,15 @@
 
     // Get the key context
     Crypto::SymmetricKeyContext * key_context = provider->GetKeyContext(kFabric2, kGroup2);
-    NL_TEST_ASSERT(apSuite, nullptr != key_context);
+    ASSERT_NE(nullptr, key_context);
     uint16_t session_id = key_context->GetKeyHash();
 
     // Encrypt the message
-    NL_TEST_ASSERT(
-        apSuite,
-        CHIP_NO_ERROR ==
-            key_context->MessageEncrypt(plaintext, ByteSpan(aad, sizeof(aad)), ByteSpan(nonce, sizeof(nonce)), tag, ciphertext));
+    EXPECT_EQ(key_context->MessageEncrypt(plaintext, ByteSpan(aad, sizeof(aad)), ByteSpan(nonce, sizeof(nonce)), tag, ciphertext),
+              CHIP_NO_ERROR);
 
     // The ciphertext must be different to the original message
-    NL_TEST_ASSERT(apSuite, memcmp(ciphertext.data(), kMessage, sizeof(kMessage)));
+    EXPECT_TRUE(memcmp(ciphertext.data(), kMessage, sizeof(kMessage)));
     key_context->Release();
 
     //
@@ -1164,126 +1191,36 @@
     auto it      = provider->IterateGroupSessions(session_id);
     size_t count = 0, total = 0;
 
-    NL_TEST_ASSERT(apSuite, it);
-    if (it)
+    ASSERT_TRUE(it);
+    total = it->Count();
+    EXPECT_EQ(expected.size(), total);
+    while (it->Next(session))
     {
-        total = it->Count();
-        NL_TEST_ASSERT(apSuite, expected.size() == total);
-        while (it->Next(session))
+        std::pair<FabricIndex, GroupId> found(session.fabric_index, session.group_id);
+        EXPECT_GT(expected.count(found), 0u);
+        ASSERT_NE(session.keyContext, nullptr);
+        // Assert aboves doesn't actually exit, we call continue so that we can call it->Release() outside of
+        // loop.
+        if (session.keyContext == nullptr)
         {
-            std::pair<FabricIndex, GroupId> found(session.fabric_index, session.group_id);
-            NL_TEST_ASSERT(apSuite, expected.count(found) > 0);
-            NL_TEST_ASSERT(apSuite, session.keyContext != nullptr);
-            // Assert aboves doesn't actually exit, we call continue so that we can call it->Release() outside of
-            // loop.
-            if (session.keyContext == nullptr)
-            {
-                continue;
-            }
-
-            // Decrypt the ciphertext
-            NL_TEST_ASSERT(apSuite,
-                           CHIP_NO_ERROR ==
-                               session.keyContext->MessageDecrypt(ciphertext, ByteSpan(aad, sizeof(aad)),
-                                                                  ByteSpan(nonce, sizeof(nonce)), tag, plaintext));
-
-            // The new plaintext must match the original message
-            NL_TEST_ASSERT(apSuite, 0 == memcmp(plaintext.data(), kMessage, sizeof(kMessage)));
-            count++;
+            continue;
         }
-        NL_TEST_ASSERT(apSuite, count == total);
-        it->Release();
+
+        // Decrypt the ciphertext
+        EXPECT_EQ(session.keyContext->MessageDecrypt(ciphertext, ByteSpan(aad, sizeof(aad)), ByteSpan(nonce, sizeof(nonce)), tag,
+                                                     plaintext),
+                  CHIP_NO_ERROR);
+
+        // The new plaintext must match the original message
+        EXPECT_EQ(memcmp(plaintext.data(), kMessage, sizeof(kMessage)), 0);
+        count++;
     }
+    EXPECT_EQ(count, total);
+    it->Release();
 }
 
 } // namespace TestGroups
 } // namespace app
 } // namespace chip
 
-namespace {
-
-static chip::TestPersistentStorageDelegate sDelegate;
-static chip::Crypto::DefaultSessionKeystore sSessionKeystore;
-static GroupDataProviderImpl sProvider(chip::app::TestGroups::kMaxGroupsPerFabric, chip::app::TestGroups::kMaxGroupKeysPerFabric);
-
-static EpochKey kEpochKeys0[] = {
-    { 0x0000000000000000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
-    { 0x1111111111111111, { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f } },
-    { 0x2222222222222222, { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f } }
-};
-static EpochKey kEpochKeys1[] = {
-    { 0x3333333333333333, { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f } },
-    { 0x4444444444444444, { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f } },
-    { 0x5555555555555555, { 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f } },
-};
-static EpochKey kEpochKeys2[] = {
-    { 0xaaaaaaaaaaaaaaaa, { 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf } },
-    { 0xbbbbbbbbbbbbbbbb, { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf } },
-    { 0xcccccccccccccccc, { 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf } },
-};
-static EpochKey kEpochKeys3[] = {
-    { 0xdddddddddddddddd, { 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf } },
-    { 0xeeeeeeeeeeeeeeee, { 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef } },
-    { 0xffffffffffffffff, { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff } },
-};
-
-/**
- *  Set up the test suite.
- */
-int Test_Setup(void * inContext)
-{
-    VerifyOrReturnError(CHIP_NO_ERROR == chip::Platform::MemoryInit(), FAILURE);
-
-    // Initialize Group Data Provider
-    sProvider.SetStorageDelegate(&sDelegate);
-    sProvider.SetSessionKeystore(&sSessionKeystore);
-    sProvider.SetListener(&chip::app::TestGroups::sListener);
-    VerifyOrReturnError(CHIP_NO_ERROR == sProvider.Init(), FAILURE);
-    SetGroupDataProvider(&sProvider);
-
-    memcpy(chip::app::TestGroups::kKeySet0.epoch_keys, kEpochKeys0, sizeof(kEpochKeys0));
-    memcpy(chip::app::TestGroups::kKeySet1.epoch_keys, kEpochKeys1, sizeof(kEpochKeys1));
-    memcpy(chip::app::TestGroups::kKeySet2.epoch_keys, kEpochKeys2, sizeof(kEpochKeys2));
-    memcpy(chip::app::TestGroups::kKeySet3.epoch_keys, kEpochKeys3, sizeof(kEpochKeys3));
-
-    return SUCCESS;
-}
-
-/**
- *  Tear down the test suite.
- */
-int Test_Teardown(void * inContext)
-{
-    GroupDataProvider * provider = GetGroupDataProvider();
-    if (nullptr != provider)
-    {
-        provider->Finish();
-    }
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
-const nlTest sTests[] = { NL_TEST_DEF("TestStorageDelegate", chip::app::TestGroups::TestStorageDelegate),
-                          NL_TEST_DEF("TestGroupInfo", chip::app::TestGroups::TestGroupInfo),
-                          NL_TEST_DEF("TestGroupInfoIterator", chip::app::TestGroups::TestGroupInfoIterator),
-                          NL_TEST_DEF("TestEndpoints", chip::app::TestGroups::TestEndpoints),
-                          NL_TEST_DEF("TestEndpointIterator", chip::app::TestGroups::TestEndpointIterator),
-                          NL_TEST_DEF("TestGroupKeys", chip::app::TestGroups::TestGroupKeys),
-                          NL_TEST_DEF("TestGroupKeyIterator", chip::app::TestGroups::TestGroupKeyIterator),
-                          NL_TEST_DEF("TestKeySets", chip::app::TestGroups::TestKeySets),
-                          NL_TEST_DEF("TestKeySetIterator", chip::app::TestGroups::TestKeySetIterator),
-                          NL_TEST_DEF("TestIpk", chip::app::TestGroups::TestIpk),
-                          NL_TEST_DEF("TestPerFabricData", chip::app::TestGroups::TestPerFabricData),
-                          NL_TEST_DEF("TestGroupDecryption", chip::app::TestGroups::TestGroupDecryption),
-                          NL_TEST_SENTINEL() };
-} // namespace
-
-int TestGroups()
-{
-    nlTestSuite theSuite = { "GroupDataProvider", &sTests[0], &Test_Setup, &Test_Teardown };
-
-    nlTestRunner(&theSuite, nullptr);
-    return (nlTestRunnerStats(&theSuite));
-}
-
-CHIP_REGISTER_TEST_SUITE(TestGroups)
+namespace {} // namespace
diff --git a/src/credentials/tests/TestPersistentStorageOpCertStore.cpp b/src/credentials/tests/TestPersistentStorageOpCertStore.cpp
index 12d4ac8..c1a57e0 100644
--- a/src/credentials/tests/TestPersistentStorageOpCertStore.cpp
+++ b/src/credentials/tests/TestPersistentStorageOpCertStore.cpp
@@ -19,13 +19,12 @@
 #include <inttypes.h>
 
 #include <credentials/PersistentStorageOpCertStore.h>
+#include <gtest/gtest.h>
 #include <lib/support/CHIPMem.h>
 #include <lib/support/CodeUtils.h>
 #include <lib/support/DefaultStorageKeyAllocator.h>
 #include <lib/support/Span.h>
 #include <lib/support/TestPersistentStorageDelegate.h>
-#include <lib/support/UnitTestRegistration.h>
-#include <nlunit-test.h>
 
 using namespace chip;
 using namespace chip::Credentials;
@@ -47,19 +46,25 @@
 const uint8_t kTestNocBuf[] = { 'n', 'o', 'c' };
 const ByteSpan kTestNocSpan{ kTestNocBuf };
 
-void TestAddNocFlow(nlTestSuite * inSuite, void * inContext)
+struct TestPersistentStorageOpCertStore : public ::testing::Test
+{
+    static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
+    static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
+};
+
+TEST_F(TestPersistentStorageOpCertStore, TestAddNocFlow)
 {
     TestPersistentStorageDelegate storageDelegate;
     PersistentStorageOpCertStore opCertStore;
 
     // Failure before Init
     CHIP_ERROR err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u);
 
     // Init succeeds
     err = opCertStore.Init(&storageDelegate);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Manually add existing root for the FabricIndex, should fail AddNewTrustedRootCertForFabric for
     // same fabric but succeed GetCertificate.
@@ -67,53 +72,52 @@
 
     err = storageDelegate.SyncSetKeyValue(DefaultStorageKeyAllocator::FabricRCAC(kFabricIndex1).KeyName(), kTestRcacBufExists,
                                           sizeof(kTestRcacBufExists));
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 1);
-    NL_TEST_ASSERT(inSuite,
-                   opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kRcac) == true); //< From manual add
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 1u);
+    EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kRcac)); //< From manual add
 
     err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
 
     uint8_t largeBuf[400];
     MutableByteSpan largeSpan{ largeBuf };
 
     err = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+    EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
 
     largeSpan = MutableByteSpan{ largeBuf };
 
     err = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
 
     // Adding root for another FabricIndex should work
     err = opCertStore.AddNewTrustedRootCertForFabric(kUndefinedFabricIndex, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_FABRIC_INDEX);
+    EXPECT_EQ(err, CHIP_ERROR_INVALID_FABRIC_INDEX);
 
     err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex2, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 1); //< Storage count did not yet increase
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 1u); //< Storage count did not yet increase
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
 
     // Should be able to read pending RCAC right away
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
     // Trying to commit with pending RCAC but no NOC should fail but leave everything as-is
     err = opCertStore.CommitOpCertsForFabric(kFabricIndex2);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
 
     // Trying to do AddNewOpCertsForFabric for fabric different that with pending RCAC should fail
     err = opCertStore.AddNewOpCertsForFabric(kOtherFabricIndex, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_FABRIC_INDEX);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
+    EXPECT_EQ(err, CHIP_ERROR_INVALID_FABRIC_INDEX);
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
 
     // Clear other bad cases from storage for now
     storageDelegate.ClearStorage();
@@ -125,128 +129,127 @@
 
     err = storageDelegate.SyncSetKeyValue(DefaultStorageKeyAllocator::FabricICAC(kFabricIndex2).KeyName(), kTestIcacBufExists,
                                           sizeof(kTestIcacBufExists));
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 1);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 1u);
 
     err = storageDelegate.SyncSetKeyValue(DefaultStorageKeyAllocator::FabricNOC(kFabricIndex2).KeyName(), kTestNocBufExists,
                                           sizeof(kTestNocBufExists));
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 2);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 2u);
 
-    NL_TEST_ASSERT(inSuite,
-                   opCertStore.HasCertificateForFabric(kFabricIndex2, CertChainElement::kIcac) == true);         //< From manual add
-    NL_TEST_ASSERT(inSuite, opCertStore.HasCertificateForFabric(kFabricIndex2, CertChainElement::kNoc) == true); //< From manual add
+    EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex2, CertChainElement::kIcac)); //< From manual add
+    EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex2, CertChainElement::kNoc));  //< From manual add
 
     err = opCertStore.AddNewOpCertsForFabric(kFabricIndex2, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
 
     storageDelegate.SyncDeleteKeyValue(DefaultStorageKeyAllocator::FabricICAC(kFabricIndex2).KeyName());
     storageDelegate.SyncDeleteKeyValue(DefaultStorageKeyAllocator::FabricNOC(kFabricIndex2).KeyName());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u);
 
     // Trying to do AddNewOpCertsForFabric for same fabric as that with pending RCAC should succeed
     err = opCertStore.AddNewOpCertsForFabric(kFabricIndex2, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
     // Should be able to get the pending cert even if not in persisted storage
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kIcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
 
     // Trying to do AddNewOpCertsForFabric a second time after success before commit should fail,
     // but leave state as-is
     err = opCertStore.AddNewOpCertsForFabric(kFabricIndex2, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
 
     // Should be able to get the pending cert even if not in persisted storage, after an API error
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kIcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
 
     // Trying to commit with wrong FabricIndex should fail
     err = opCertStore.CommitOpCertsForFabric(kOtherFabricIndex);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_FABRIC_INDEX);
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
+    EXPECT_EQ(err, CHIP_ERROR_INVALID_FABRIC_INDEX);
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
 
     // Commiting new certs should succeed on correct fabric
     err = opCertStore.CommitOpCertsForFabric(kFabricIndex2);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
 
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< All certs now committed
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< All certs now committed
 
     // Should be able to get the committed certs
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kIcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex2, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
 
     opCertStore.Finish();
 }
 
-void TestUpdateNocFlow(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestPersistentStorageOpCertStore, TestUpdateNocFlow)
 {
     TestPersistentStorageDelegate storageDelegate;
     PersistentStorageOpCertStore opCertStore;
 
     // Failure before Init
     CHIP_ERROR err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u);
 
     // Init succeeds
     err = opCertStore.Init(&storageDelegate);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Add a new pending trusted root to test for UpdateOpCertsForFabric failure on new root present
     err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
     // Trying to do an UpdateOpCertsForFabric with new root pending should fail
     err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
     // Revert state for next tests
     opCertStore.RevertPendingOpCerts();
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
     // Manually add root, ICAC and NOC to validate update since existing chain required
     const uint8_t kTestRcacBufExists[] = { 'r', 'c', 'a', 'c', ' ', 'e', 'x', 'i', 's', 't', 's' };
@@ -259,385 +262,382 @@
     {
         err = storageDelegate.SyncSetKeyValue(DefaultStorageKeyAllocator::FabricRCAC(kFabricIndex1).KeyName(), kTestRcacBufExists,
                                               sizeof(kTestRcacBufExists));
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 1);
-        NL_TEST_ASSERT(inSuite,
-                       opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kRcac) == true); //< From manual add
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 1u);
+        EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kRcac)); //< From manual add
 
         err = storageDelegate.SyncSetKeyValue(DefaultStorageKeyAllocator::FabricICAC(kFabricIndex1).KeyName(), kTestIcacBufExists,
                                               sizeof(kTestIcacBufExists));
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 2);
-        NL_TEST_ASSERT(inSuite,
-                       opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kIcac) == true); //< From manual add
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 2u);
+        EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kIcac)); //< From manual add
 
         err = storageDelegate.SyncSetKeyValue(DefaultStorageKeyAllocator::FabricNOC(kFabricIndex1).KeyName(), kTestNocBufExists,
                                               sizeof(kTestNocBufExists));
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3);
-        NL_TEST_ASSERT(inSuite,
-                       opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kNoc) == true); //< From manual add
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 3u);
+        EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kNoc)); //< From manual add
 
         // Test that we can manually stored certs
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacBufExists }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacBufExists }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocBufExists }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocBufExists }));
     }
 
     // Update fails on fabric with wrong FabricIndex
     err = opCertStore.UpdateOpCertsForFabric(kOtherFabricIndex, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
     // Update succeeds on fabric with existing data
     err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain() == true);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u);
 
     // Can read back existing root unchanged
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
 
     // NOC chain elements see the pending updated certs
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacBuf }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacBuf }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocBuf }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocBuf }));
 
     // Trying update again fails
     err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain() == true);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u);
 
     // Trying to add a new root after update, before commit/revert fails
     err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain() == true);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u);
 
     // Trying to add new opcerts for any fabric after update, before commit/revert fails
     err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
 
     err = opCertStore.AddNewOpCertsForFabric(kFabricIndex2, kTestNocSpan, kTestIcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
 
     // Committing writes the new values (we even "background-remove" the old ICAC/NOC before commit)
     storageDelegate.SyncDeleteKeyValue(DefaultStorageKeyAllocator::FabricICAC(kFabricIndex1).KeyName());
     storageDelegate.SyncDeleteKeyValue(DefaultStorageKeyAllocator::FabricNOC(kFabricIndex1).KeyName());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 1); //< Root remains
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 1u); //< Root remains
 
     err = opCertStore.CommitOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< All certs now committed
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< All certs now committed
 
     // Should be able to get the committed cert even if not in persisted storage, after an API error
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
 
     // Calling revert doesn't undo the work we just did
     opCertStore.RevertPendingOpCerts();
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< All certs now committed
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< All certs now committed
 
     // Verify the revert after commit left all data alone
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacBufExists }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
 
     // Verify that RemoveOpCertsForFabric fails on fabric with no data
     err = opCertStore.RemoveOpCertsForFabric(kFabricIndex2);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_FABRIC_INDEX);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3);
+    EXPECT_EQ(err, CHIP_ERROR_INVALID_FABRIC_INDEX);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u);
 
     // Verify that RemoveOpCertsForFabric works for fabric we just updated
     err = opCertStore.RemoveOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); // All keys gone
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); // All keys gone
 
     opCertStore.Finish();
 }
 
-void TestReverts(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestPersistentStorageOpCertStore, TestReverts)
 {
     TestPersistentStorageDelegate storageDelegate;
     PersistentStorageOpCertStore opCertStore;
 
     // Failure before Init
     CHIP_ERROR err = opCertStore.RemoveOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0);
+    EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u);
 
     // Init succeeds
     err = opCertStore.Init(&storageDelegate);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Add a new pending trusted root
     uint8_t largeBuf[400];
     MutableByteSpan largeSpan{ largeBuf };
 
     err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
     // Verify we can see the new trusted root
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestRcacSpan));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_TRUE(largeSpan.data_equal(kTestRcacSpan));
 
     // Verify that after revert, we can't see the root anymore
     opCertStore.RevertPendingOpCerts();
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
     largeSpan = MutableByteSpan{ largeBuf };
     err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-    NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+    EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
 
     {
         // Add new root again, to then test review of AddNewTrustedCertificates
         err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
         // Add NOC chain
         err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(opCertStore.HasPendingNocChain());
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
     }
 
     // Make sure we can see all pending certs before revert
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestRcacSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestRcacSpan));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestIcacSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestIcacSpan));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestNocSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestNocSpan));
     }
 
     // Revert
     opCertStore.RevertPendingOpCerts();
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
     // Verify that after revert, we can't see the root or chain anymore
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
     }
 
     // Start again to add a new set, but then let's commit
     {
         // Add new root again, to then test review of AddNewTrustedCertificates
         err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
         // Add NOC chain
         err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, kTestIcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(opCertStore.HasPendingNocChain());
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
     }
 
     // Commiting new certs should succeed on correct fabric
     err = opCertStore.CommitOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
 
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< All certs now committed
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< All certs now committed
 
     // Should be able to get the committed certs
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
     }
 
     const uint8_t kNewNoc[] = { 'n', 'o', 'c', ' ', 'n', 'e', 'w' };
 
     // Updating certs should work (NO ICAC)
     err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, ByteSpan{ kNewNoc }, ByteSpan{});
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< No change to keys
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< No change to keys
 
     // Should see committed root, pending NOC, absent ICAC
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kIcac));
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
+        EXPECT_FALSE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kIcac));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kNewNoc }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kNewNoc }));
     }
 
     // Revert, should be back at previous state
     opCertStore.RevertPendingOpCerts();
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< Storage count did not yet change
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< Storage count did not yet change
 
     // Should be able to get the previously committed certs
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestIcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestNocSpan }));
     }
 
     // Try again to update with missing ICAC and commit
     err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, ByteSpan{ kNewNoc }, ByteSpan{});
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< No change to keys
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< No change to keys
 
     err = opCertStore.CommitOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 2); //< ICAC cert should be gone
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 2u); //< ICAC cert should be gone
 
     // Should see committed root, new NOC, absent ICAC
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
-        NL_TEST_ASSERT(inSuite, opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kRcac));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+        EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kRcac));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kIcac));
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
+        EXPECT_FALSE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kIcac));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kNewNoc }));
-        NL_TEST_ASSERT(inSuite, opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kNoc));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kNewNoc }));
+        EXPECT_TRUE(opCertStore.HasCertificateForFabric(kFabricIndex1, CertChainElement::kNoc));
     }
 
     opCertStore.Finish();
 }
 
-void TestRevertAddNoc(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestPersistentStorageOpCertStore, TestRevertAddNoc)
 {
     TestPersistentStorageDelegate storageDelegate;
     PersistentStorageOpCertStore opCertStore;
 
     // Init succeeds
     CHIP_ERROR err = opCertStore.Init(&storageDelegate);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Add a new pending trusted root
     uint8_t largeBuf[400];
@@ -646,63 +646,63 @@
     {
         // Add new root
         err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
         // Add NOC chain, with NO ICAC
         err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, ByteSpan{});
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(opCertStore.HasPendingNocChain());
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
     }
 
     // Make sure we get expected pending state before revert
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestRcacSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestRcacSpan));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestNocSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestNocSpan));
     }
 
     // Revert using RemoveOpCertsForFabric
     err = opCertStore.RemoveOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
     // Add again, and commit
     {
         // Add new root
         err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
         // Add NOC chain, with NO ICAC
         err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, ByteSpan{});
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(opCertStore.HasPendingNocChain());
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
         err = opCertStore.CommitOpCertsForFabric(kFabricIndex1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 2); //< We have RCAC, NOC, no ICAC
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_FALSE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 2u); //< We have RCAC, NOC, no ICAC
     }
 
     // Update to add an ICAC
@@ -711,65 +711,65 @@
 
     // Updating certs should work (NO ICAC)
     err = opCertStore.UpdateOpCertsForFabric(kFabricIndex1, ByteSpan{ kNewNoc }, ByteSpan{ kNewIcac });
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 2); //< No change to keys
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_TRUE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 2u); //< No change to keys
 
     // Should see committed root, pending NOC, pending ICAC
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kNewIcac }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kNewIcac }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kNewNoc }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kNewNoc }));
     }
 
     // Commit, should see the new ICAC appear.
     err = opCertStore.CommitOpCertsForFabric(kFabricIndex1);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 3); //< We have RCAC, NOC, ICAC
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 3u); //< We have RCAC, NOC, ICAC
 
     // Should see committed root, new NOC, new ICAC
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kTestRcacSpan }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kNewIcac }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kNewIcac }));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(ByteSpan{ kNewNoc }));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(ByteSpan{ kNewNoc }));
     }
 
     opCertStore.Finish();
 }
 
-void TestRevertPendingOpCertsExceptRoot(nlTestSuite * inSuite, void * inContext)
+TEST_F(TestPersistentStorageOpCertStore, TestRevertPendingOpCertsExceptRoot)
 {
     TestPersistentStorageDelegate storageDelegate;
     PersistentStorageOpCertStore opCertStore;
 
     // Init succeeds
     CHIP_ERROR err = opCertStore.Init(&storageDelegate);
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
     // Add a new pending trusted root
     uint8_t largeBuf[400];
@@ -778,111 +778,66 @@
     {
         // Add new root
         err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
         // Add NOC chain, with NO ICAC
         err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, ByteSpan{});
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(opCertStore.HasPendingNocChain());
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
     }
 
     // Make sure we get expected pending state before revert
     {
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kRcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestRcacSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestRcacSpan));
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kIcac, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_NOT_FOUND);
+        EXPECT_EQ(err, CHIP_ERROR_NOT_FOUND);
 
         largeSpan = MutableByteSpan{ largeBuf };
         err       = opCertStore.GetCertificate(kFabricIndex1, CertChainElement::kNoc, largeSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, largeSpan.data_equal(kTestNocSpan));
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(largeSpan.data_equal(kTestNocSpan));
     }
 
     // Revert using RevertPendingOpCertsExceptRoot
     opCertStore.RevertPendingOpCertsExceptRoot();
-    NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-    NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-    NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+    EXPECT_TRUE(opCertStore.HasPendingRootCert());
+    EXPECT_FALSE(opCertStore.HasPendingNocChain());
+    EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
     // Add again, and commit
     {
         // Add new root: should fail, since it should still be pending
         err = opCertStore.AddNewTrustedRootCertForFabric(kFabricIndex1, kTestRcacSpan);
-        NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INCORRECT_STATE);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
+        EXPECT_EQ(err, CHIP_ERROR_INCORRECT_STATE);
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
 
         // Add NOC chain, with NO ICAC
         err = opCertStore.AddNewOpCertsForFabric(kFabricIndex1, kTestNocSpan, ByteSpan{});
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, opCertStore.HasPendingRootCert() == true);
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 0); //< Storage count did not yet increase
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_TRUE(opCertStore.HasPendingNocChain());
+        EXPECT_TRUE(opCertStore.HasPendingRootCert());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 0u); //< Storage count did not yet increase
 
         err = opCertStore.CommitOpCertsForFabric(kFabricIndex1);
-        NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingRootCert());
-        NL_TEST_ASSERT(inSuite, !opCertStore.HasPendingNocChain());
-        NL_TEST_ASSERT(inSuite, storageDelegate.GetNumKeys() == 2); //< We have RCAC, NOC, no ICAC
+        EXPECT_EQ(err, CHIP_NO_ERROR);
+        EXPECT_FALSE(opCertStore.HasPendingRootCert());
+        EXPECT_FALSE(opCertStore.HasPendingNocChain());
+        EXPECT_EQ(storageDelegate.GetNumKeys(), 2u); //< We have RCAC, NOC, no ICAC
     }
 
     opCertStore.Finish();
 }
 
-/**
- *   Test Suite. It lists all the test functions.
- */
-static const nlTest sTests[] = {
-    NL_TEST_DEF("Test AddNOC-like flows PersistentStorageOpCertStore", TestAddNocFlow),
-    NL_TEST_DEF("Test UpdateNOC-like flows PersistentStorageOpCertStore", TestUpdateNocFlow),
-    NL_TEST_DEF("Test revert operations of PersistentStorageOpCertStore", TestReverts),
-    NL_TEST_DEF("Test revert operations with AddNOC of PersistentStorageOpCertStore", TestRevertAddNoc),
-    NL_TEST_DEF("Test revert operations using RevertPendingOpCertsExceptRoot", TestRevertPendingOpCertsExceptRoot),
-    NL_TEST_SENTINEL()
-};
-
-/**
- *  Set up the test suite.
- */
-int Test_Setup(void * inContext)
-{
-    CHIP_ERROR error = chip::Platform::MemoryInit();
-    VerifyOrReturnError(error == CHIP_NO_ERROR, FAILURE);
-    return SUCCESS;
-}
-
-/**
- *  Tear down the test suite.
- */
-int Test_Teardown(void * inContext)
-{
-    chip::Platform::MemoryShutdown();
-    return SUCCESS;
-}
-
 } // namespace
-
-/**
- *  Main
- */
-int TestPersistentStorageOpCertStore()
-{
-    nlTestSuite theSuite = { "PersistentStorageOpCertStore tests", &sTests[0], Test_Setup, Test_Teardown };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestPersistentStorageOpCertStore)
diff --git a/src/test_driver/openiotsdk/unit-tests/test_components.txt b/src/test_driver/openiotsdk/unit-tests/test_components.txt
index 83dfc0d..0471f70 100644
--- a/src/test_driver/openiotsdk/unit-tests/test_components.txt
+++ b/src/test_driver/openiotsdk/unit-tests/test_components.txt
@@ -7,7 +7,8 @@
 MinimalMdnsRespondersTests
 CoreTests
 MdnsTests
+CredentialsTest
 PlatformTests
 TestShell
 SetupPayloadTests
-SupportTests
\ No newline at end of file
+SupportTests
diff --git a/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt b/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt
index 50b0fed..d9801e9 100644
--- a/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt
+++ b/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt
@@ -1,6 +1,5 @@
 AppTests
 BDXTests
-CredentialsTest
 DataModelTests
 InetLayerTests
 MessagingLayerTests