• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright 2017 Google, Inc.
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 #include "model/controller/security_manager.h"
20 
21 #include <gtest/gtest.h>
22 
23 #include <array>
24 #include <string>
25 
26 namespace {
27 const std::string kTestAddr1 = "12:34:56:78:9a:bc";
28 const std::string kTestAddr2 = "cb:a9:87:65:43:21";
29 const std::string kTestAddr3 = "cb:a9:56:78:9a:bc";
30 const std::string kTestAddr4 = "12:34:56:78:9a:bc";
31 const std::array<uint8_t, 16> kTestKey = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
32                                           0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
33                                           0x0d, 0x0e, 0x0f, 0x10};
34 }  // namespace
35 
36 namespace rootcanal {
37 
38 class SecurityManagerTest : public ::testing::Test {
39  public:
SecurityManagerTest()40   SecurityManagerTest() {}
~SecurityManagerTest()41   ~SecurityManagerTest() override {}
42 };
43 
TEST_F(SecurityManagerTest,WriteKey)44 TEST_F(SecurityManagerTest, WriteKey) {
45   Address btaddr1;
46   Address btaddr2;
47   Address btaddr3;
48   Address btaddr4;
49   SecurityManager sm(3);
50 
51   Address::FromString(kTestAddr1, btaddr1);
52   Address::FromString(kTestAddr2, btaddr2);
53   Address::FromString(kTestAddr3, btaddr3);
54   Address::FromString(kTestAddr4, btaddr4);
55 
56   EXPECT_EQ(1, sm.WriteKey(btaddr1, kTestKey));
57   EXPECT_EQ(1, sm.WriteKey(btaddr2, kTestKey));
58   EXPECT_EQ(1, sm.WriteKey(btaddr3, kTestKey));
59   // Key storage is full.
60   EXPECT_EQ(0, sm.WriteKey(btaddr4, kTestKey));
61 }
62 
TEST_F(SecurityManagerTest,ReadKey)63 TEST_F(SecurityManagerTest, ReadKey) {
64   Address btaddr1;
65   Address btaddr2;
66   Address btaddr3;
67   SecurityManager sm(3);
68 
69   Address::FromString(kTestAddr1, btaddr1);
70   Address::FromString(kTestAddr2, btaddr2);
71   Address::FromString(kTestAddr3, btaddr3);
72 
73   sm.WriteKey(btaddr1, kTestKey);
74   sm.WriteKey(btaddr2, kTestKey);
75 
76   EXPECT_EQ(1, sm.ReadKey(btaddr1));
77   EXPECT_EQ(1, sm.ReadKey(btaddr2));
78   EXPECT_EQ(0, sm.ReadKey(btaddr3));
79 }
80 
TEST_F(SecurityManagerTest,ReadAllKeys)81 TEST_F(SecurityManagerTest, ReadAllKeys) {
82   Address btaddr1;
83   Address btaddr2;
84   SecurityManager sm(3);
85 
86   EXPECT_EQ(0, sm.ReadAllKeys());
87 
88   Address::FromString(kTestAddr1, btaddr1);
89   Address::FromString(kTestAddr2, btaddr1);
90   Address::FromString(kTestAddr3, btaddr1);
91 
92   sm.WriteKey(btaddr1, kTestKey);
93 
94   EXPECT_EQ(1, sm.ReadAllKeys());
95 
96   sm.WriteKey(btaddr2, kTestKey);
97 
98   EXPECT_EQ(2, sm.ReadAllKeys());
99 }
100 
TEST_F(SecurityManagerTest,DeleteKey)101 TEST_F(SecurityManagerTest, DeleteKey) {
102   Address btaddr1;
103   Address btaddr2;
104   Address btaddr3;
105   SecurityManager sm(3);
106 
107   Address::FromString(kTestAddr1, btaddr1);
108   Address::FromString(kTestAddr2, btaddr2);
109   Address::FromString(kTestAddr3, btaddr3);
110 
111   EXPECT_EQ(0, sm.DeleteKey(btaddr2));
112 
113   sm.WriteKey(btaddr1, kTestKey);
114 
115   EXPECT_EQ(1, sm.ReadAllKeys());
116 
117   EXPECT_EQ(1, sm.DeleteKey(btaddr1));
118 
119   EXPECT_EQ(0, sm.ReadAllKeys());
120 
121   sm.WriteKey(btaddr1, kTestKey);
122   sm.WriteKey(btaddr2, kTestKey);
123 
124   EXPECT_EQ(2, sm.ReadAllKeys());
125 
126   EXPECT_EQ(1, sm.DeleteKey(btaddr2));
127 
128   EXPECT_EQ(1, sm.ReadAllKeys());
129 
130   EXPECT_EQ(0, sm.DeleteKey(btaddr2));
131 
132   EXPECT_EQ(1, sm.ReadAllKeys());
133 }
134 
TEST_F(SecurityManagerTest,DeleteAllKeys)135 TEST_F(SecurityManagerTest, DeleteAllKeys) {
136   Address btaddr1;
137   Address btaddr2;
138   Address btaddr3;
139   SecurityManager sm(3);
140 
141   Address::FromString(kTestAddr1, btaddr1);
142   Address::FromString(kTestAddr2, btaddr2);
143   Address::FromString(kTestAddr3, btaddr3);
144 
145   EXPECT_EQ(0, sm.DeleteAllKeys());
146 
147   sm.WriteKey(btaddr1, kTestKey);
148 
149   EXPECT_EQ(1, sm.ReadAllKeys());
150 
151   EXPECT_EQ(1, sm.DeleteAllKeys());
152 
153   EXPECT_EQ(0, sm.ReadAllKeys());
154 
155   sm.WriteKey(btaddr1, kTestKey);
156   sm.WriteKey(btaddr2, kTestKey);
157 
158   EXPECT_EQ(2, sm.ReadAllKeys());
159 
160   EXPECT_EQ(2, sm.DeleteAllKeys());
161 
162   EXPECT_EQ(0, sm.ReadAllKeys());
163 }
164 
165 }  // namespace rootcanal
166