From bbc37b4997a5ca84649ff884d2c07058dff7314a Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Fri, 13 May 2022 14:47:16 -0700 Subject: [PATCH 1/9] 12543 --- .../UserDirectedCommissioningServer.cpp | 1 - .../tests/TestUdcMessages.cpp | 54 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp b/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp index 88c3d0a4ec7234..ef18a52190d141 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp @@ -173,7 +173,6 @@ void UserDirectedCommissioningServer::OnCommissionableNodeFound(const Dnssd::Dis client->SetLongDiscriminator(nodeData.commissionData.longDiscriminator); client->SetVendorId(nodeData.commissionData.vendorId); client->SetProductId(nodeData.commissionData.productId); - client->SetDeviceName(nodeData.commissionData.deviceName); client->SetRotatingId(nodeData.commissionData.rotatingId, nodeData.commissionData.rotatingIdLen); // Call the registered mUserConfirmationProvider, if any. diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index 7c2fe6279e49e9..d93ce253ee09d0 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -267,6 +267,59 @@ void TestUDCClients(nlTestSuite * inSuite, void * inContext) NL_TEST_ASSERT(inSuite, (expirationTime - System::Clock::Milliseconds64(1)) < state->GetExpirationTime()); } +void TestUDCClientState(nlTestSuite * inSuite, void * inContext) +{ + UDCClients<3> mUdcClients; + const char * instanceName1 = "test1"; + Inet::IPAddress address; + Inet::IPAddress::FromString("127.0.0.1", address); + uint16_t port = 333; + uint16_t longDiscriminator = 1234; + uint16_t vendorId = 1111; + uint16_t productId = 2222; + const char * deviceName = "test name"; + uint8_t rotatingId[50] = {}; + size_t rotatingIdLen = 0; + char rotatingIdString[chip::Dnssd::kMaxRotatingIdLen * 2 + 1] = "92873498273948734534"; + Encoding::BytesToUppercaseHexString(rotatingId, rotatingIdLen, rotatingIdString, sizeof(rotatingIdString)); + + // test base case + UDCClientState * state = mUdcClients.FindUDCClientState(instanceName1); + NL_TEST_ASSERT(inSuite, state == nullptr); + + // add a default state + NL_TEST_ASSERT(inSuite, CHIP_NO_ERROR == mUdcClients.CreateNewUDCClientState(instanceName1, &state)); + + // get the state + state = mUdcClients.FindUDCClientState(instanceName1); + NL_TEST_ASSERT(inSuite, nullptr != state); + NL_TEST_ASSERT(inSuite, strcmp(state->GetInstanceName(), instanceName1) == 0); + + state->SetPeerAddress(chip::Transport::PeerAddress::UDP(address, port)); + NL_TEST_ASSERT(inSuite, port == state->GetPeerAddress().GetPort()); + + state->SetDeviceName(deviceName); + NL_TEST_ASSERT(inSuite, strcmp(state->GetDeviceName(), deviceName) == 0); + + state->SetLongDiscriminator(longDiscriminator); + NL_TEST_ASSERT(inSuite, longDiscriminator == state->GetLongDiscriminator()); + + state->SetVendorId(vendorId); + NL_TEST_ASSERT(inSuite, vendorId == state->GetVendorId()); + + state->SetProductId(productId); + NL_TEST_ASSERT(inSuite, productId == state->GetProductId()); + + state->SetRotatingId(rotatingId, rotatingIdLen); + NL_TEST_ASSERT(inSuite, rotatingIdLen == state->GetRotatingIdLength()); + + const uint8_t * testRotatingId = state->GetRotatingId(); + for (size_t i = 0; i < rotatingIdLen; i++) + { + NL_TEST_ASSERT(inSuite, testRotatingId[i] == rotatingId[i]); + } +} + // Test Suite /** @@ -280,6 +333,7 @@ static const nlTest sTests[] = NL_TEST_DEF("TestUDCServerInstanceNameResolver", TestUDCServerInstanceNameResolver), NL_TEST_DEF("TestUserDirectedCommissioningClientMessage", TestUserDirectedCommissioningClientMessage), NL_TEST_DEF("TestUDCClients", TestUDCClients), + NL_TEST_DEF("TestUDCClientState", TestUDCClientState), NL_TEST_SENTINEL() }; From c4f81367cb2a3fd844227d6f7595707e3067474d Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Fri, 13 May 2022 15:25:33 -0700 Subject: [PATCH 2/9] Add overflow test --- .../UDCClientState.h | 11 ++-- .../tests/TestUdcMessages.cpp | 50 +++++++++++++++---- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/protocols/user_directed_commissioning/UDCClientState.h b/src/protocols/user_directed_commissioning/UDCClientState.h index 25a47f55e2a1eb..faeb837e85a2ef 100644 --- a/src/protocols/user_directed_commissioning/UDCClientState.h +++ b/src/protocols/user_directed_commissioning/UDCClientState.h @@ -58,10 +58,10 @@ class UDCClientState public: UDCClientState() : mPeerAddress(PeerAddress::Uninitialized()) {} - UDCClientState(UDCClientState &&) = default; - UDCClientState(const UDCClientState &) = default; + UDCClientState(UDCClientState &&) = default; + UDCClientState(const UDCClientState &) = default; UDCClientState & operator=(const UDCClientState &) = default; - UDCClientState & operator=(UDCClientState &&) = default; + UDCClientState & operator=(UDCClientState &&) = default; const PeerAddress GetPeerAddress() const { return mPeerAddress; } void SetPeerAddress(const PeerAddress & address) { mPeerAddress = address; } @@ -85,8 +85,9 @@ class UDCClientState size_t GetRotatingIdLength() const { return mRotatingIdLen; } void SetRotatingId(const uint8_t * rotatingId, size_t rotatingIdLen) { - memcpy(mRotatingId, rotatingId, rotatingIdLen); - mRotatingIdLen = rotatingIdLen; + size_t maxSize = ArraySize(mRotatingId); + mRotatingIdLen = (maxSize < rotatingIdLen) ? maxSize : rotatingIdLen; + memcpy(mRotatingId, rotatingId, mRotatingIdLen); } UDCClientProcessingState GetUDCClientProcessingState() const { return mUDCClientProcessingState; } diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index d93ce253ee09d0..311d54e73318b1 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -15,7 +16,16 @@ using namespace chip; using namespace chip::Protocols::UserDirectedCommissioning; +using namespace chip::Dnssd; +using namespace chip::Dnssd::Internal; +ByteSpan GetSpan(char * key) +{ + size_t len = strlen(key); + // Stop the string from being null terminated to ensure the code makes no assumptions. + key[len] = '1'; + return ByteSpan(reinterpret_cast(key), len); +} class DLL_EXPORT TestCallback : public UserConfirmationProvider, public InstanceNameResolver { public: @@ -273,15 +283,28 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) const char * instanceName1 = "test1"; Inet::IPAddress address; Inet::IPAddress::FromString("127.0.0.1", address); - uint16_t port = 333; - uint16_t longDiscriminator = 1234; - uint16_t vendorId = 1111; - uint16_t productId = 2222; - const char * deviceName = "test name"; - uint8_t rotatingId[50] = {}; - size_t rotatingIdLen = 0; - char rotatingIdString[chip::Dnssd::kMaxRotatingIdLen * 2 + 1] = "92873498273948734534"; - Encoding::BytesToUppercaseHexString(rotatingId, rotatingIdLen, rotatingIdString, sizeof(rotatingIdString)); + uint16_t port = 333; + uint16_t longDiscriminator = 1234; + uint16_t vendorId = 1111; + uint16_t productId = 2222; + const char * deviceName = "test name"; + + // Rotating ID is given as up to 50 hex bytes + char rotatingIdString[chip::Dnssd::kMaxRotatingIdLen * 2 + 1]; + uint8_t rotatingId[chip::Dnssd::kMaxRotatingIdLen]; + size_t rotatingIdLen; + strcpy(rotatingIdString, "92873498273948734534"); + GetRotatingDeviceId(GetSpan(rotatingIdString), rotatingId, &rotatingIdLen); + + // create a Rotating ID longer than kMaxRotatingIdLen + char rotatingIdLongString[chip::Dnssd::kMaxRotatingIdLen * 2 + 1]; + uint8_t rotatingIdLong[chip::Dnssd::kMaxRotatingIdLen]; + size_t rotatingIdLongLen; + strcpy(rotatingIdLongString, + "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); + GetRotatingDeviceId(GetSpan(rotatingIdLongString), rotatingIdLong, &rotatingIdLongLen); + + NL_TEST_ASSERT(inSuite, rotatingIdLongLen > chip::Dnssd::kMaxRotatingIdLen); // test base case UDCClientState * state = mUdcClients.FindUDCClientState(instanceName1); @@ -318,6 +341,15 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) { NL_TEST_ASSERT(inSuite, testRotatingId[i] == rotatingId[i]); } + + state->SetRotatingId(rotatingIdLong, rotatingIdLongLen); + NL_TEST_ASSERT(inSuite, chip::Dnssd::kMaxRotatingIdLen == state->GetRotatingIdLength()); + + const uint8_t * testRotatingIdLong = state->GetRotatingId(); + for (size_t i = 0; i < chip::Dnssd::kMaxRotatingIdLen; i++) + { + NL_TEST_ASSERT(inSuite, testRotatingIdLong[i] == rotatingIdLong[i]); + } } // Test Suite From 95ed81c35a64c8ff2a210236c986a821bd46574c Mon Sep 17 00:00:00 2001 From: "restyled-io[bot]" <32688539+restyled-io[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 15:26:21 -0700 Subject: [PATCH 3/9] Restyled by clang-format (#18451) Co-authored-by: Restyled.io --- src/protocols/user_directed_commissioning/UDCClientState.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/protocols/user_directed_commissioning/UDCClientState.h b/src/protocols/user_directed_commissioning/UDCClientState.h index faeb837e85a2ef..0c5736d89b479e 100644 --- a/src/protocols/user_directed_commissioning/UDCClientState.h +++ b/src/protocols/user_directed_commissioning/UDCClientState.h @@ -58,10 +58,10 @@ class UDCClientState public: UDCClientState() : mPeerAddress(PeerAddress::Uninitialized()) {} - UDCClientState(UDCClientState &&) = default; - UDCClientState(const UDCClientState &) = default; + UDCClientState(UDCClientState &&) = default; + UDCClientState(const UDCClientState &) = default; UDCClientState & operator=(const UDCClientState &) = default; - UDCClientState & operator=(UDCClientState &&) = default; + UDCClientState & operator=(UDCClientState &&) = default; const PeerAddress GetPeerAddress() const { return mPeerAddress; } void SetPeerAddress(const PeerAddress & address) { mPeerAddress = address; } From b18243c822dffbde9b62aa255499f8823b6cb37a Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Sat, 14 May 2022 07:22:27 -0700 Subject: [PATCH 4/9] debug CI --- .../user_directed_commissioning/tests/TestUdcMessages.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index 311d54e73318b1..ad9831e8eb772c 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -24,7 +24,7 @@ ByteSpan GetSpan(char * key) size_t len = strlen(key); // Stop the string from being null terminated to ensure the code makes no assumptions. key[len] = '1'; - return ByteSpan(reinterpret_cast(key), len); + return ByteSpan(Uint8::from_char(key), len); } class DLL_EXPORT TestCallback : public UserConfirmationProvider, public InstanceNameResolver { @@ -304,6 +304,7 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); GetRotatingDeviceId(GetSpan(rotatingIdLongString), rotatingIdLong, &rotatingIdLongLen); + printf(" max length %zu, long length %zu\n", chip::Dnssd::kMaxRotatingIdLen, rotatingIdLongLen); NL_TEST_ASSERT(inSuite, rotatingIdLongLen > chip::Dnssd::kMaxRotatingIdLen); // test base case @@ -343,6 +344,9 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) } state->SetRotatingId(rotatingIdLong, rotatingIdLongLen); + + printf(" max length %zu, long length %zu, current length %zu\n", chip::Dnssd::kMaxRotatingIdLen, rotatingIdLongLen, + state->GetRotatingIdLength()); NL_TEST_ASSERT(inSuite, chip::Dnssd::kMaxRotatingIdLen == state->GetRotatingIdLength()); const uint8_t * testRotatingIdLong = state->GetRotatingId(); From 39f67e1703281cb70db7df671cbf0a28104737c5 Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Mon, 16 May 2022 17:12:13 -0700 Subject: [PATCH 5/9] fix boundary test case --- .../tests/TestUdcMessages.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index ad9831e8eb772c..7b3c03cf049b6d 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -300,11 +300,16 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) char rotatingIdLongString[chip::Dnssd::kMaxRotatingIdLen * 2 + 1]; uint8_t rotatingIdLong[chip::Dnssd::kMaxRotatingIdLen]; size_t rotatingIdLongLen; - strcpy(rotatingIdLongString, - "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); - GetRotatingDeviceId(GetSpan(rotatingIdLongString), rotatingIdLong, &rotatingIdLongLen); + strcpy( + rotatingIdLongString, + "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); - printf(" max length %zu, long length %zu\n", chip::Dnssd::kMaxRotatingIdLen, rotatingIdLongLen); + const ByteSpan & value = GetSpan(rotatingIdLongString); + rotatingIdLongLen = Encoding::HexToBytes(reinterpret_cast(value.data()), value.size(), rotatingIdLong, + chip::Dnssd::kMaxRotatingIdLen * 2); + + printf("str len=%zu max length %zu, long length %zu\n", strlen(rotatingIdLongString), chip::Dnssd::kMaxRotatingIdLen, + rotatingIdLongLen); NL_TEST_ASSERT(inSuite, rotatingIdLongLen > chip::Dnssd::kMaxRotatingIdLen); // test base case From 56ca04ea3257924ed70f460d6b01603aa9ad0d93 Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Mon, 16 May 2022 17:28:47 -0700 Subject: [PATCH 6/9] fix lint --- .../user_directed_commissioning/tests/TestUdcMessages.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index 7b3c03cf049b6d..425fd722101ba4 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -308,8 +308,8 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) rotatingIdLongLen = Encoding::HexToBytes(reinterpret_cast(value.data()), value.size(), rotatingIdLong, chip::Dnssd::kMaxRotatingIdLen * 2); - printf("str len=%zu max length %zu, long length %zu\n", strlen(rotatingIdLongString), chip::Dnssd::kMaxRotatingIdLen, - rotatingIdLongLen); + // printf("str len=%zu max length %zu, long length %zu\n", strlen(rotatingIdLongString), chip::Dnssd::kMaxRotatingIdLen, + // rotatingIdLongLen); NL_TEST_ASSERT(inSuite, rotatingIdLongLen > chip::Dnssd::kMaxRotatingIdLen); // test base case @@ -350,8 +350,8 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) state->SetRotatingId(rotatingIdLong, rotatingIdLongLen); - printf(" max length %zu, long length %zu, current length %zu\n", chip::Dnssd::kMaxRotatingIdLen, rotatingIdLongLen, - state->GetRotatingIdLength()); + // printf(" max length %zu, long length %zu, current length %zu\n", chip::Dnssd::kMaxRotatingIdLen, rotatingIdLongLen, + // state->GetRotatingIdLength()); NL_TEST_ASSERT(inSuite, chip::Dnssd::kMaxRotatingIdLen == state->GetRotatingIdLength()); const uint8_t * testRotatingIdLong = state->GetRotatingId(); From 3d2c2f7ff31f182175ba7800b1e927e5714ccf2c Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Mon, 16 May 2022 17:58:49 -0700 Subject: [PATCH 7/9] fix CI --- .../user_directed_commissioning/tests/TestUdcMessages.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index 425fd722101ba4..96ba421ba6774f 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -297,8 +297,8 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) GetRotatingDeviceId(GetSpan(rotatingIdString), rotatingId, &rotatingIdLen); // create a Rotating ID longer than kMaxRotatingIdLen - char rotatingIdLongString[chip::Dnssd::kMaxRotatingIdLen * 2 + 1]; - uint8_t rotatingIdLong[chip::Dnssd::kMaxRotatingIdLen]; + char rotatingIdLongString[chip::Dnssd::kMaxRotatingIdLen * 4 + 1]; + uint8_t rotatingIdLong[chip::Dnssd::kMaxRotatingIdLen * 2]; size_t rotatingIdLongLen; strcpy( rotatingIdLongString, From bc8220cf2fcadc1e5431ee8a9cafe87f523c773b Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Tue, 17 May 2022 06:31:39 -0700 Subject: [PATCH 8/9] fix CI --- .../user_directed_commissioning/tests/TestUdcMessages.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index 96ba421ba6774f..0c524106e3e077 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -308,8 +308,6 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) rotatingIdLongLen = Encoding::HexToBytes(reinterpret_cast(value.data()), value.size(), rotatingIdLong, chip::Dnssd::kMaxRotatingIdLen * 2); - // printf("str len=%zu max length %zu, long length %zu\n", strlen(rotatingIdLongString), chip::Dnssd::kMaxRotatingIdLen, - // rotatingIdLongLen); NL_TEST_ASSERT(inSuite, rotatingIdLongLen > chip::Dnssd::kMaxRotatingIdLen); // test base case @@ -350,8 +348,6 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) state->SetRotatingId(rotatingIdLong, rotatingIdLongLen); - // printf(" max length %zu, long length %zu, current length %zu\n", chip::Dnssd::kMaxRotatingIdLen, rotatingIdLongLen, - // state->GetRotatingIdLength()); NL_TEST_ASSERT(inSuite, chip::Dnssd::kMaxRotatingIdLen == state->GetRotatingIdLength()); const uint8_t * testRotatingIdLong = state->GetRotatingId(); From 4ca20f7082864be446f5931473f89b2c748ba99d Mon Sep 17 00:00:00 2001 From: "restyled-io[bot]" <32688539+restyled-io[bot]@users.noreply.github.com> Date: Tue, 17 May 2022 06:32:36 -0700 Subject: [PATCH 9/9] Restyled by clang-format (#18493) Co-authored-by: Restyled.io --- .../user_directed_commissioning/tests/TestUdcMessages.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp index 0c524106e3e077..9cbe13582c68fa 100644 --- a/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp +++ b/src/protocols/user_directed_commissioning/tests/TestUdcMessages.cpp @@ -306,7 +306,7 @@ void TestUDCClientState(nlTestSuite * inSuite, void * inContext) const ByteSpan & value = GetSpan(rotatingIdLongString); rotatingIdLongLen = Encoding::HexToBytes(reinterpret_cast(value.data()), value.size(), rotatingIdLong, - chip::Dnssd::kMaxRotatingIdLen * 2); + chip::Dnssd::kMaxRotatingIdLen * 2); NL_TEST_ASSERT(inSuite, rotatingIdLongLen > chip::Dnssd::kMaxRotatingIdLen);