/****************************************************************************** * * Copyright 2017 Google, Inc. * * 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 "model/controller/security_manager.h" #include #include #include namespace { const std::string kTestAddr1 = "12:34:56:78:9a:bc"; const std::string kTestAddr2 = "cb:a9:87:65:43:21"; const std::string kTestAddr3 = "cb:a9:56:78:9a:bc"; const std::string kTestAddr4 = "12:34:56:78:9a:bc"; const std::array kTestKey = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10}; } // namespace namespace rootcanal { class SecurityManagerTest : public ::testing::Test { public: SecurityManagerTest() {} ~SecurityManagerTest() override {} }; TEST_F(SecurityManagerTest, WriteKey) { Address btaddr1; Address btaddr2; Address btaddr3; Address btaddr4; SecurityManager sm(3); Address::FromString(kTestAddr1, btaddr1); Address::FromString(kTestAddr2, btaddr2); Address::FromString(kTestAddr3, btaddr3); Address::FromString(kTestAddr4, btaddr4); EXPECT_EQ(1, sm.WriteKey(btaddr1, kTestKey)); EXPECT_EQ(1, sm.WriteKey(btaddr2, kTestKey)); EXPECT_EQ(1, sm.WriteKey(btaddr3, kTestKey)); // Key storage is full. EXPECT_EQ(0, sm.WriteKey(btaddr4, kTestKey)); } TEST_F(SecurityManagerTest, ReadKey) { Address btaddr1; Address btaddr2; Address btaddr3; SecurityManager sm(3); Address::FromString(kTestAddr1, btaddr1); Address::FromString(kTestAddr2, btaddr2); Address::FromString(kTestAddr3, btaddr3); sm.WriteKey(btaddr1, kTestKey); sm.WriteKey(btaddr2, kTestKey); EXPECT_EQ(1, sm.ReadKey(btaddr1)); EXPECT_EQ(1, sm.ReadKey(btaddr2)); EXPECT_EQ(0, sm.ReadKey(btaddr3)); } TEST_F(SecurityManagerTest, ReadAllKeys) { Address btaddr1; Address btaddr2; SecurityManager sm(3); EXPECT_EQ(0, sm.ReadAllKeys()); Address::FromString(kTestAddr1, btaddr1); Address::FromString(kTestAddr2, btaddr1); Address::FromString(kTestAddr3, btaddr1); sm.WriteKey(btaddr1, kTestKey); EXPECT_EQ(1, sm.ReadAllKeys()); sm.WriteKey(btaddr2, kTestKey); EXPECT_EQ(2, sm.ReadAllKeys()); } TEST_F(SecurityManagerTest, DeleteKey) { Address btaddr1; Address btaddr2; Address btaddr3; SecurityManager sm(3); Address::FromString(kTestAddr1, btaddr1); Address::FromString(kTestAddr2, btaddr2); Address::FromString(kTestAddr3, btaddr3); EXPECT_EQ(0, sm.DeleteKey(btaddr2)); sm.WriteKey(btaddr1, kTestKey); EXPECT_EQ(1, sm.ReadAllKeys()); EXPECT_EQ(1, sm.DeleteKey(btaddr1)); EXPECT_EQ(0, sm.ReadAllKeys()); sm.WriteKey(btaddr1, kTestKey); sm.WriteKey(btaddr2, kTestKey); EXPECT_EQ(2, sm.ReadAllKeys()); EXPECT_EQ(1, sm.DeleteKey(btaddr2)); EXPECT_EQ(1, sm.ReadAllKeys()); EXPECT_EQ(0, sm.DeleteKey(btaddr2)); EXPECT_EQ(1, sm.ReadAllKeys()); } TEST_F(SecurityManagerTest, DeleteAllKeys) { Address btaddr1; Address btaddr2; Address btaddr3; SecurityManager sm(3); Address::FromString(kTestAddr1, btaddr1); Address::FromString(kTestAddr2, btaddr2); Address::FromString(kTestAddr3, btaddr3); EXPECT_EQ(0, sm.DeleteAllKeys()); sm.WriteKey(btaddr1, kTestKey); EXPECT_EQ(1, sm.ReadAllKeys()); EXPECT_EQ(1, sm.DeleteAllKeys()); EXPECT_EQ(0, sm.ReadAllKeys()); sm.WriteKey(btaddr1, kTestKey); sm.WriteKey(btaddr2, kTestKey); EXPECT_EQ(2, sm.ReadAllKeys()); EXPECT_EQ(2, sm.DeleteAllKeys()); EXPECT_EQ(0, sm.ReadAllKeys()); } } // namespace rootcanal