blob: 45248220219938e191f63ac530e49fe86516dafa [file] [log] [blame]
/*
*
* Copyright (c) 2024 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <lib/core/StringBuilderAdapters.h>
#include <pw_unit_test/framework.h>
#include <SilabsTestEventTriggerDelegate.h>
#include <headers/ProvisionedDataProvider.h>
#include <lib/support/Span.h>
using namespace chip;
using namespace chip::DeviceLayer::Silabs::Provision;
namespace {
const uint8_t kTestEnableKey1[TestEventTriggerDelegate::kEnableKeyLength] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
const uint8_t kTestEnableKey2[TestEventTriggerDelegate::kEnableKeyLength] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 };
const uint8_t kInvalidEnableKey[TestEventTriggerDelegate::kEnableKeyLength - 1] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
const uint8_t kZeroEnableKey[TestEventTriggerDelegate::kEnableKeyLength] = { 0 };
class ProviderStub : public ProvisionedDataProvider
{
public:
CHIP_ERROR GetTestEventTriggerKey(MutableByteSpan & keySpan) override
{
VerifyOrReturnError(!forceError, CHIP_ERROR_INTERNAL);
ByteSpan enableKeySpan = ByteSpan(mEnableKey, TestEventTriggerDelegate::kEnableKeyLength);
CopySpanToMutableSpan(enableKeySpan, keySpan);
return CHIP_NO_ERROR;
}
void SetEnableKey(const uint8_t * key, size_t length)
{
if (length == sizeof(mEnableKey))
{
memcpy(mEnableKey, key, length);
}
}
void SetForceError(bool value) { forceError = value; }
private:
uint8_t mEnableKey[TestEventTriggerDelegate::kEnableKeyLength] = { 0 };
bool forceError = false;
};
} // namespace
// Test that a valid key matches
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_ValidKey)
{
ProviderStub provider;
provider.SetEnableKey(kTestEnableKey1, TestEventTriggerDelegate::kEnableKeyLength);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
ByteSpan validKeySpan(kTestEnableKey1);
EXPECT_TRUE(delegate.DoesEnableKeyMatch(validKeySpan));
}
// Test that an invalid key does not match
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_InvalidKey)
{
ProviderStub provider;
provider.SetEnableKey(kTestEnableKey1, TestEventTriggerDelegate::kEnableKeyLength);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
ByteSpan invalidKeySpan(kInvalidEnableKey, TestEventTriggerDelegate::kEnableKeyLength - 1);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(invalidKeySpan));
}
// Test that an empty key does not match
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_EmptyKey)
{
ProviderStub provider;
provider.SetEnableKey(kTestEnableKey1, TestEventTriggerDelegate::kEnableKeyLength);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(ByteSpan(kZeroEnableKey)));
}
// Test that a different valid key does not match
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_DifferentValidKey)
{
ProviderStub provider;
provider.SetEnableKey(kTestEnableKey1, TestEventTriggerDelegate::kEnableKeyLength);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
ByteSpan differentValidKeySpan(kTestEnableKey2);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(differentValidKeySpan));
}
// Test that an empty key matchs when no enable key is set
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_NoKeySet_EmptyKey)
{
ProviderStub provider;
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
EXPECT_TRUE(delegate.DoesEnableKeyMatch(ByteSpan(kZeroEnableKey)));
}
// Test that a valid key does not match when no enable key is set
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_NoKeySet_ValidKey)
{
ProviderStub provider;
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
ByteSpan validKeySpan(kTestEnableKey1);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(validKeySpan));
}
// Test that a valid key does not match when provider is not set
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_NoStorage_ValidKey)
{
SilabsTestEventTriggerDelegate delegate;
ByteSpan validKeySpan(kTestEnableKey1);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(validKeySpan));
}
// Test that an invalid key does not match when provider is not set
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_NoStorage_InvalidKey)
{
SilabsTestEventTriggerDelegate delegate;
ByteSpan invalidKeySpan(kInvalidEnableKey);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(invalidKeySpan));
}
// Test that an empty key matchs when provider is not set
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_NoStorage_EmptyKey)
{
SilabsTestEventTriggerDelegate delegate;
EXPECT_TRUE(delegate.DoesEnableKeyMatch(ByteSpan(kZeroEnableKey)));
}
// Test that a valid key does not match when GetTestEventTriggerKey returns an error
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_GetKeyError_ValidKey)
{
ProviderStub provider;
provider.SetForceError(true);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
ByteSpan validKeySpan(kTestEnableKey1);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(validKeySpan));
}
// Test that an invalid key does not match when GetTestEventTriggerKey returns an error
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_GetKeyError_InvalidKey)
{
ProviderStub provider;
provider.SetForceError(true);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
ByteSpan invalidKeySpan(kInvalidEnableKey);
EXPECT_FALSE(delegate.DoesEnableKeyMatch(invalidKeySpan));
}
// Test that an empty key matchs when GetTestEventTriggerKey returns an error
TEST(TestSilabsTestEventTriggerDelegate, TestDoesEnableKeyMatch_GetKeyError_EmptyKey)
{
ProviderStub provider;
provider.SetForceError(true);
SilabsTestEventTriggerDelegate delegate;
delegate.Init(&provider);
EXPECT_TRUE(delegate.DoesEnableKeyMatch(ByteSpan(kZeroEnableKey)));
}
// Test that Init function initializes the delegate with a valid provider
TEST(TestSilabsTestEventTriggerDelegate, TestInit_ValidProvider)
{
ProviderStub provider;
SilabsTestEventTriggerDelegate delegate;
EXPECT_EQ(delegate.Init(&provider), CHIP_NO_ERROR);
}
// Test that Init function returns an error when initialized with a null provider
TEST(TestSilabsTestEventTriggerDelegate, TestInit_NullProvider)
{
SilabsTestEventTriggerDelegate delegate;
EXPECT_EQ(delegate.Init(nullptr), CHIP_ERROR_INVALID_ARGUMENT);
}