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