Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix and re-enable Zephyr native tests #37333

Merged
merged 6 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .github/workflows/examples-nrfconnect.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,12 @@ jobs:
nrfconnect nrf7002dk_nrf5340_cpuapp all-clusters-app \
examples/all-clusters-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
/tmp/bloat_reports/
# Disable native build until next release
# - name: Run unit tests for Zephyr native_posix_64 platform
# if: github.event_name == 'push' || steps.changed_paths.outputs.tests == 'true' || steps.changed_paths.outputs.nrfconnect == 'true'
# run: |
# scripts/run_in_build_env.sh "./scripts/build/build_examples.py --target nrf-native-posix-64-tests build"
- name: Run unit tests for Zephyr native_posix_64 platform
if: github.event_name == 'push' || steps.changed_paths.outputs.tests == 'true' || steps.changed_paths.outputs.nrfconnect == 'true'
run: |
# Temporarily fix link issue
sed -i '151s/<LINK_FLAGS> //' /opt/NordicSemiconductor/nrfconnect/zephyr/cmake/linker/ld/target.cmake
scripts/run_in_build_env.sh "./scripts/build/build_examples.py --target nrf-native-posix-64-tests build"
- name: Uploading Failed Test Logs
uses: actions/upload-artifact@v4
if: ${{ failure() && !env.ACT }}
Expand Down
89 changes: 46 additions & 43 deletions src/app/icd/server/tests/TestICDMonitoringTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@
#include <lib/support/DefaultStorageKeyAllocator.h>
#include <lib/support/TestPersistentStorageDelegate.h>

#if CHIP_CRYPTO_PSA
#include <crypto/CHIPCryptoPALPSA.h>
#endif

using namespace chip;
using namespace chip::app::Clusters::IcdManagement;

Expand Down Expand Up @@ -65,7 +69,30 @@ constexpr uint8_t kKeyBuffer3a[] = {
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f
};

TEST(TestICDMonitoringTable, TestEntryAssignationOverload)
struct TestICDMonitoringTable : public ::testing::Test
{
void SetUp() override
{
#if CHIP_CRYPTO_PSA
ASSERT_EQ(psa_crypto_init(), PSA_SUCCESS);
#endif
}

void ValidateHmac128(const Crypto::Hmac128KeyHandle & saved, const Crypto::Hmac128KeyHandle & loaded)
{
#if CHIP_CRYPTO_PSA
EXPECT_NE(saved.As<psa_key_id_t>(), loaded.As<psa_key_id_t>());
EXPECT_GE(loaded.As<psa_key_id_t>(), to_underlying(Crypto::KeyIdBase::ICDKeyRangeStart));
EXPECT_LE(loaded.As<psa_key_id_t>(), to_underlying(Crypto::KeyIdBase::Maximum));
#else
EXPECT_EQ(memcmp(saved.As<Crypto::Symmetric128BitsKeyByteArray>(), loaded.As<Crypto::Symmetric128BitsKeyByteArray>(),
sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
#endif
}
};

TEST_F(TestICDMonitoringTable, TestEntryAssignationOverload)
{
TestSessionKeystoreImpl keystore;
ICDMonitoringEntry entry(&keystore);
Expand Down Expand Up @@ -100,7 +127,7 @@ TEST(TestICDMonitoringTable, TestEntryAssignationOverload)
EXPECT_TRUE(entry2.IsKeyEquivalent(ByteSpan(kKeyBuffer1a)));
}

TEST(TestICDMonitoringTable, TestEntryMaximumSize)
TEST_F(TestICDMonitoringTable, TestEntryMaximumSize)
{
TestPersistentStorageDelegate storage;
TestSessionKeystoreImpl keystore;
Expand All @@ -114,7 +141,7 @@ TEST(TestICDMonitoringTable, TestEntryMaximumSize)
EXPECT_EQ(CHIP_NO_ERROR, table.Set(0, entry));
}

TEST(TestICDMonitoringTable, TestEntryKeyFunctions)
TEST_F(TestICDMonitoringTable, TestEntryKeyFunctions)
{
TestSessionKeystoreImpl keystore;
ICDMonitoringEntry entry(&keystore);
Expand All @@ -140,7 +167,7 @@ TEST(TestICDMonitoringTable, TestEntryKeyFunctions)
EXPECT_EQ(entry.DeleteKey(), CHIP_NO_ERROR);
}

TEST(TestICDMonitoringTable, TestSaveAndLoadRegistrationValue)
TEST_F(TestICDMonitoringTable, TestSaveAndLoadRegistrationValue)
{
TestPersistentStorageDelegate storage;
TestSessionKeystoreImpl keystore;
Expand Down Expand Up @@ -178,9 +205,7 @@ TEST(TestICDMonitoringTable, TestSaveAndLoadRegistrationValue)
EXPECT_EQ(kClientNodeId12, entry.monitoredSubject);
EXPECT_EQ(ClientTypeEnum::kPermanent, entry.clientType);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1a)));
EXPECT_EQ(memcmp(entry1.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry1.hmacKeyHandle, entry.hmacKeyHandle);

// Retrieve second entry
EXPECT_EQ(CHIP_NO_ERROR, loading.Get(1, entry));
Expand All @@ -189,9 +214,7 @@ TEST(TestICDMonitoringTable, TestSaveAndLoadRegistrationValue)
EXPECT_EQ(kClientNodeId11, entry.monitoredSubject);
EXPECT_EQ(ClientTypeEnum::kEphemeral, entry.clientType);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer2a)));
EXPECT_EQ(memcmp(entry2.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry2.hmacKeyHandle, entry.hmacKeyHandle);

// No more entries
EXPECT_EQ(CHIP_ERROR_NOT_FOUND, loading.Get(2, entry));
Expand All @@ -213,9 +236,7 @@ TEST(TestICDMonitoringTable, TestSaveAndLoadRegistrationValue)
EXPECT_EQ(kClientNodeId11, entry.monitoredSubject);
EXPECT_EQ(ClientTypeEnum::kEphemeral, entry.clientType);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer2a)));
EXPECT_EQ(memcmp(entry2.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry2.hmacKeyHandle, entry.hmacKeyHandle);

// Retrieve second entry
EXPECT_EQ(CHIP_NO_ERROR, loading.Get(1, entry));
Expand All @@ -224,12 +245,10 @@ TEST(TestICDMonitoringTable, TestSaveAndLoadRegistrationValue)
EXPECT_EQ(kClientNodeId11, entry.monitoredSubject);
EXPECT_EQ(ClientTypeEnum::kPermanent, entry.clientType);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1b)));
EXPECT_EQ(memcmp(entry4.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry4.hmacKeyHandle, entry.hmacKeyHandle);
}

TEST(TestICDMonitoringTable, TestSaveAllInvalidRegistrationValues)
TEST_F(TestICDMonitoringTable, TestSaveAllInvalidRegistrationValues)
{
TestPersistentStorageDelegate storage;
TestSessionKeystoreImpl keystore;
Expand Down Expand Up @@ -271,7 +290,7 @@ TEST(TestICDMonitoringTable, TestSaveAllInvalidRegistrationValues)
EXPECT_EQ(CHIP_ERROR_INVALID_ARGUMENT, table.Set(0, entry5));
}

TEST(TestICDMonitoringTable, TestSaveLoadRegistrationValueForMultipleFabrics)
TEST_F(TestICDMonitoringTable, TestSaveLoadRegistrationValueForMultipleFabrics)
{
TestPersistentStorageDelegate storage;
TestSessionKeystoreImpl keystore;
Expand Down Expand Up @@ -314,32 +333,26 @@ TEST(TestICDMonitoringTable, TestSaveLoadRegistrationValueForMultipleFabrics)
EXPECT_EQ(kClientNodeId11, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId12, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1a)));
EXPECT_EQ(memcmp(entry1.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry1.hmacKeyHandle, entry.hmacKeyHandle);

// Retrieve fabric1, second entry
EXPECT_EQ(CHIP_NO_ERROR, table1.Get(1, entry));
EXPECT_EQ(kTestFabricIndex1, entry.fabricIndex);
EXPECT_EQ(kClientNodeId12, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId11, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1b)));
EXPECT_EQ(memcmp(entry2.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry2.hmacKeyHandle, entry.hmacKeyHandle);

// Retrieve fabric2, first entry
EXPECT_EQ(CHIP_NO_ERROR, table2.Get(0, entry));
EXPECT_EQ(kTestFabricIndex2, entry.fabricIndex);
EXPECT_EQ(kClientNodeId21, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId22, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer2a)));
EXPECT_EQ(memcmp(entry3.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry3.hmacKeyHandle, entry.hmacKeyHandle);
}

TEST(TestICDMonitoringTable, TestDeleteValidEntryFromStorage)
TEST_F(TestICDMonitoringTable, TestDeleteValidEntryFromStorage)
{
TestPersistentStorageDelegate storage;
TestSessionKeystoreImpl keystore;
Expand Down Expand Up @@ -379,19 +392,15 @@ TEST(TestICDMonitoringTable, TestDeleteValidEntryFromStorage)
EXPECT_EQ(kClientNodeId11, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId12, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1a)));
EXPECT_EQ(memcmp(entry1.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry1.hmacKeyHandle, entry.hmacKeyHandle);

// Retrieve second entry (not modified)
EXPECT_EQ(CHIP_NO_ERROR, table1.Get(1, entry));
EXPECT_EQ(kTestFabricIndex1, entry.fabricIndex);
EXPECT_EQ(kClientNodeId12, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId11, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer2a)));
EXPECT_EQ(memcmp(entry2.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry2.hmacKeyHandle, entry.hmacKeyHandle);

// Remove (existing)
EXPECT_EQ(CHIP_NO_ERROR, table1.Remove(0));
Expand All @@ -405,19 +414,15 @@ TEST(TestICDMonitoringTable, TestDeleteValidEntryFromStorage)
EXPECT_EQ(kClientNodeId12, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId11, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer2a)));
EXPECT_EQ(memcmp(entry2.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry2.hmacKeyHandle, entry.hmacKeyHandle);

// Retrieve fabric2, first entry
EXPECT_EQ(CHIP_NO_ERROR, table2.Get(0, entry));
EXPECT_EQ(kTestFabricIndex2, entry.fabricIndex);
EXPECT_EQ(kClientNodeId21, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId22, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1b)));
EXPECT_EQ(memcmp(entry3.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry3.hmacKeyHandle, entry.hmacKeyHandle);

// Remove all (fabric 1)
EXPECT_EQ(CHIP_NO_ERROR, table1.RemoveAll());
Expand All @@ -429,9 +434,7 @@ TEST(TestICDMonitoringTable, TestDeleteValidEntryFromStorage)
EXPECT_EQ(kClientNodeId21, entry.checkInNodeID);
EXPECT_EQ(kClientNodeId22, entry.monitoredSubject);
EXPECT_TRUE(entry.IsKeyEquivalent(ByteSpan(kKeyBuffer1b)));
EXPECT_EQ(memcmp(entry3.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(),
entry.hmacKeyHandle.As<Crypto::Symmetric128BitsKeyByteArray>(), sizeof(Crypto::Symmetric128BitsKeyByteArray)),
0);
ValidateHmac128(entry3.hmacKeyHandle, entry.hmacKeyHandle);

// Remove all (fabric 2)
EXPECT_EQ(CHIP_NO_ERROR, table2.RemoveAll());
Expand Down
3 changes: 3 additions & 0 deletions src/credentials/tests/TestFabricTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ struct TestFabricTable : public ::testing::Test
{
DeviceLayer::SetConfigurationMgr(&DeviceLayer::ConfigurationManagerImpl::GetDefaultInstance());
ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR);
#if CHIP_CRYPTO_PSA
ASSERT_EQ(psa_crypto_init(), PSA_SUCCESS);
#endif
}
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
};
Expand Down
13 changes: 10 additions & 3 deletions src/crypto/tests/TestChipCryptoPAL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@

#if CHIP_CRYPTO_PSA
#include <psa/crypto.h>
extern "C" {
psa_status_t psa_initialize_key_slots(void);
void psa_wipe_all_key_slots(void);
}
#endif

using namespace chip;
Expand Down Expand Up @@ -289,14 +293,17 @@ static void TestAES_CTR_128_Decrypt(const AesCtrTestEntry * vector)

struct TestChipCryptoPAL : public ::testing::Test
{
static void SetUpTestSuite()
static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }

void SetUp() override
{
ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR);
#if CHIP_CRYPTO_PSA
psa_crypto_init();
psa_wipe_all_key_slots();
andy31415 marked this conversation as resolved.
Show resolved Hide resolved
psa_initialize_key_slots();
#endif
}
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
};

TEST_F(TestChipCryptoPAL, TestAES_CTR_128CryptTestVectors)
Expand Down
5 changes: 5 additions & 0 deletions src/system/tests/TestEventLoopHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,12 @@ TEST_F(TestEventLoopHandler, EventLoopHandlerSequence)
});

chip::DeviceLayer::PlatformMgr().RunEventLoop();

#if CHIP_SYSTEM_CONFIG_POSIX_LOCKING
EXPECT_EQ(loopHandler.trace, std::string("1AP2HP3R4"));
#else
EXPECT_EQ(loopHandler.trace, std::string("1APHP2HPHP3R4"));
Damian-Nordic marked this conversation as resolved.
Show resolved Hide resolved
#endif
}

TEST_F(TestEventLoopHandler, EventLoopHandlerWake)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
*/

// Enable cryptographic functions needed by CHIP which can't be enabled via Kconfig
#define MBEDTLS_HKDF_C
#define MBEDTLS_X509_CREATE_C
#define MBEDTLS_X509_CSR_PARSE_C
#define MBEDTLS_X509_CSR_WRITE_C
22 changes: 10 additions & 12 deletions src/test_driver/nrfconnect/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,23 @@ CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=768
CONFIG_MBEDTLS_USER_CONFIG_ENABLE=y
CONFIG_MBEDTLS_USER_CONFIG_FILE="app_mbedtls_config.h"
CONFIG_MBEDTLS_ENTROPY_POLL_ZEPHYR=y
CONFIG_MBEDTLS_ENTROPY_C=y
CONFIG_MBEDTLS_CTR_DRBG_ENABLED=y
CONFIG_MBEDTLS_CIPHER_CCM_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED=y
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_ECDSA_C=y
CONFIG_MBEDTLS_ECP_C=y
CONFIG_MBEDTLS_PK_WRITE_C=y
CONFIG_MBEDTLS_PKCS5_C=y
CONFIG_MBEDTLS_PSA_CRYPTO_C=y
CONFIG_MBEDTLS_MEMORY_DEBUG=y
CONFIG_MBEDTLS_DEBUG=y

# PSA Crypto configuration
CONFIG_PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY=y

# Enable entropy
CONFIG_ENTROPY_GENERATOR=y
CONFIG_PSA_WANT_ALG_HMAC=y
CONFIG_PSA_WANT_ALG_HKDF=y
CONFIG_PSA_WANT_ALG_ECDSA=y
CONFIG_PSA_WANT_ALG_ECDH=y
CONFIG_PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_GENERATE=y
CONFIG_PSA_WANT_KEY_TYPE_AES=y
CONFIG_PSA_WANT_ALG_CCM=y
CONFIG_PSA_WANT_ALG_ECB_NO_PADDING=y
CONFIG_PSA_WANT_ALG_SHA_1=y
CONFIG_PSA_WANT_ECC_SECP_R1_256=y

# Disable OpenThread
CONFIG_NET_L2_OPENTHREAD=n
Expand Down
Loading