blob: 380724adb6fa5a3a07be9c26242ab4db5cbdbb56 [file] [log] [blame]
Arman Uguray41cc6342013-03-29 16:34:39 -07001// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/pending_activation_store.h"
6
7#include <base/files/scoped_temp_dir.h>
8#include <base/memory/scoped_ptr.h>
9#include <gmock/gmock.h>
10#include <gtest/gtest.h>
11
12#include "shill/glib.h"
13#include "shill/mock_store.h"
14
15using base::FilePath;
16using ::testing::_;
17using ::testing::DoAll;
18using ::testing::Mock;
19using ::testing::Return;
20using ::testing::SetArgumentPointee;
21
22namespace shill {
23
24class PendingActivationStoreTest : public ::testing::Test {
25 public:
26 PendingActivationStoreTest() : mock_store_(new MockStore()) {}
27
28 protected:
29 void SetMockStore() {
30 store_.storage_.reset(mock_store_.release());
31 }
32
33 GLib glib_;
34 scoped_ptr<MockStore> mock_store_;
35 PendingActivationStore store_;
36};
37
38TEST_F(PendingActivationStoreTest, FileInteractions) {
39 const char kEntry1[] = "1234";
40 const char kEntry2[] = "4321";
41
42 base::ScopedTempDir temp_dir;
43 EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
44
45 EXPECT_TRUE(store_.InitStorage(&glib_, temp_dir.path()));
46
47 EXPECT_EQ(PendingActivationStore::kStateUnknown,
48 store_.GetActivationState(
49 PendingActivationStore::kIdentifierICCID, kEntry1));
50 EXPECT_EQ(PendingActivationStore::kStateUnknown,
51 store_.GetActivationState(
52 PendingActivationStore::kIdentifierICCID, kEntry2));
53 EXPECT_EQ(PendingActivationStore::kStateUnknown,
54 store_.GetActivationState(
55 PendingActivationStore::kIdentifierMEID, kEntry1));
56 EXPECT_EQ(PendingActivationStore::kStateUnknown,
57 store_.GetActivationState(
58 PendingActivationStore::kIdentifierMEID, kEntry2));
59
60 EXPECT_TRUE(store_.SetActivationState(
61 PendingActivationStore::kIdentifierICCID,
62 kEntry1,
63 PendingActivationStore::kStatePending));
64 EXPECT_TRUE(store_.SetActivationState(
65 PendingActivationStore::kIdentifierICCID,
66 kEntry2,
67 PendingActivationStore::kStateActivated));
68
69 EXPECT_EQ(PendingActivationStore::kStatePending,
70 store_.GetActivationState(
71 PendingActivationStore::kIdentifierICCID, kEntry1));
72 EXPECT_EQ(PendingActivationStore::kStateActivated,
73 store_.GetActivationState(
74 PendingActivationStore::kIdentifierICCID, kEntry2));
75 EXPECT_EQ(PendingActivationStore::kStateUnknown,
76 store_.GetActivationState(
77 PendingActivationStore::kIdentifierMEID, kEntry1));
78 EXPECT_EQ(PendingActivationStore::kStateUnknown,
79 store_.GetActivationState(
80 PendingActivationStore::kIdentifierMEID, kEntry2));
81
82 EXPECT_TRUE(store_.SetActivationState(
83 PendingActivationStore::kIdentifierMEID,
84 kEntry1,
85 PendingActivationStore::kStateActivated));
86 EXPECT_TRUE(store_.SetActivationState(
87 PendingActivationStore::kIdentifierMEID,
88 kEntry2,
89 PendingActivationStore::kStatePendingTimeout));
90
91 EXPECT_EQ(PendingActivationStore::kStatePending,
92 store_.GetActivationState(
93 PendingActivationStore::kIdentifierICCID, kEntry1));
94 EXPECT_EQ(PendingActivationStore::kStateActivated,
95 store_.GetActivationState(
96 PendingActivationStore::kIdentifierICCID, kEntry2));
97 EXPECT_EQ(PendingActivationStore::kStateActivated,
98 store_.GetActivationState(
99 PendingActivationStore::kIdentifierMEID, kEntry1));
100 EXPECT_EQ(PendingActivationStore::kStatePendingTimeout,
101 store_.GetActivationState(
102 PendingActivationStore::kIdentifierMEID, kEntry2));
103
104 EXPECT_TRUE(store_.SetActivationState(
105 PendingActivationStore::kIdentifierICCID,
106 kEntry1,
107 PendingActivationStore::kStateActivated));
108 EXPECT_TRUE(store_.SetActivationState(
109 PendingActivationStore::kIdentifierICCID,
110 kEntry2,
111 PendingActivationStore::kStatePending));
112
113 EXPECT_EQ(PendingActivationStore::kStateActivated,
114 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
115 kEntry1));
116 EXPECT_EQ(PendingActivationStore::kStatePending,
117 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
118 kEntry2));
119
120 // Close and reopen the file to verify that the entries persisted.
121 EXPECT_TRUE(store_.InitStorage(&glib_, temp_dir.path()));
122
123 EXPECT_EQ(PendingActivationStore::kStateActivated,
124 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
125 kEntry1));
126 EXPECT_EQ(PendingActivationStore::kStatePending,
127 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
128 kEntry2));
129 EXPECT_EQ(PendingActivationStore::kStateActivated,
130 store_.GetActivationState(
131 PendingActivationStore::kIdentifierMEID, kEntry1));
132 EXPECT_EQ(PendingActivationStore::kStatePendingTimeout,
133 store_.GetActivationState(
134 PendingActivationStore::kIdentifierMEID, kEntry2));
135
136 EXPECT_TRUE(store_.RemoveEntry(
137 PendingActivationStore::kIdentifierMEID, kEntry1));
138 EXPECT_TRUE(store_.RemoveEntry(
139 PendingActivationStore::kIdentifierICCID, kEntry2));
140
141 EXPECT_EQ(PendingActivationStore::kStateUnknown,
142 store_.GetActivationState(
143 PendingActivationStore::kIdentifierMEID, kEntry1));
144 EXPECT_EQ(PendingActivationStore::kStateUnknown,
145 store_.GetActivationState(
146 PendingActivationStore::kIdentifierICCID, kEntry2));
147 EXPECT_EQ(PendingActivationStore::kStateActivated,
148 store_.GetActivationState(
149 PendingActivationStore::kIdentifierICCID, kEntry1));
150 EXPECT_EQ(PendingActivationStore::kStatePendingTimeout,
151 store_.GetActivationState(
152 PendingActivationStore::kIdentifierMEID, kEntry2));
153
154 EXPECT_TRUE(store_.RemoveEntry(
155 PendingActivationStore::kIdentifierICCID, kEntry1));
156 EXPECT_TRUE(store_.RemoveEntry(
157 PendingActivationStore::kIdentifierMEID, kEntry2));
158 EXPECT_EQ(PendingActivationStore::kStateUnknown,
159 store_.GetActivationState(
160 PendingActivationStore::kIdentifierICCID, kEntry1));
161 EXPECT_EQ(PendingActivationStore::kStateUnknown,
162 store_.GetActivationState(
163 PendingActivationStore::kIdentifierMEID, kEntry2));
164
165 EXPECT_TRUE(store_.InitStorage(&glib_, temp_dir.path()));
166
167 EXPECT_EQ(PendingActivationStore::kStateUnknown,
168 store_.GetActivationState(
169 PendingActivationStore::kIdentifierMEID, kEntry1));
170 EXPECT_EQ(PendingActivationStore::kStateUnknown,
171 store_.GetActivationState(
172 PendingActivationStore::kIdentifierICCID, kEntry2));
173 EXPECT_EQ(PendingActivationStore::kStateUnknown,
174 store_.GetActivationState(
175 PendingActivationStore::kIdentifierICCID, kEntry1));
176 EXPECT_EQ(PendingActivationStore::kStateUnknown,
177 store_.GetActivationState(
178 PendingActivationStore::kIdentifierMEID, kEntry2));
179}
180
181TEST_F(PendingActivationStoreTest, GetActivationState) {
182 MockStore *mock_store = mock_store_.get();
183 SetMockStore();
184
185 const char kEntry[] = "12345689";
186
187 // Value not found
188 EXPECT_CALL(*mock_store, GetInt(PendingActivationStore::kIccidGroupId,
189 kEntry,
190 _))
191 .WillOnce(Return(false));
192 EXPECT_EQ(PendingActivationStore::kStateUnknown,
193 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
194 kEntry));
195
196 // File contains invalid entry
197 EXPECT_CALL(*mock_store,
198 GetInt(PendingActivationStore::kMeidGroupId, kEntry, _))
199 .WillOnce(DoAll(SetArgumentPointee<2>(4), Return(true)));
200 EXPECT_EQ(PendingActivationStore::kStateUnknown,
201 store_.GetActivationState(PendingActivationStore::kIdentifierMEID,
202 kEntry));
203 EXPECT_CALL(*mock_store,
204 GetInt(PendingActivationStore::kMeidGroupId, kEntry, _))
205 .WillOnce(DoAll(SetArgumentPointee<2>(0), Return(true)));
206 EXPECT_EQ(PendingActivationStore::kStateUnknown,
207 store_.GetActivationState(PendingActivationStore::kIdentifierMEID,
208 kEntry));
209 Mock::VerifyAndClearExpectations(mock_store);
210
211 // All enum values
212 EXPECT_CALL(*mock_store,
213 GetInt(PendingActivationStore::kIccidGroupId, kEntry, _))
214 .WillOnce(DoAll(SetArgumentPointee<2>(1), Return(true)));
215 EXPECT_EQ(PendingActivationStore::kStatePending,
216 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
217 kEntry));
218 EXPECT_CALL(*mock_store,
219 GetInt(PendingActivationStore::kIccidGroupId, kEntry, _))
220 .WillOnce(DoAll(SetArgumentPointee<2>(2), Return(true)));
221 EXPECT_EQ(PendingActivationStore::kStateActivated,
222 store_.GetActivationState(PendingActivationStore::kIdentifierICCID,
223 kEntry));
224 Mock::VerifyAndClearExpectations(mock_store);
225}
226
227TEST_F(PendingActivationStoreTest, SetActivationState) {
228 MockStore *mock_store = mock_store_.get();
229 SetMockStore();
230
231 const char kEntry[] = "12345689";
232
233 EXPECT_CALL(*mock_store, Flush()).WillRepeatedly(Return(true));
234 EXPECT_CALL(*mock_store,
235 SetInt(PendingActivationStore::kIccidGroupId, kEntry, _))
236 .WillOnce(Return(false));
237 EXPECT_FALSE(store_.SetActivationState(
238 PendingActivationStore::kIdentifierICCID,
239 kEntry,
240 PendingActivationStore::kStateUnknown));
241 EXPECT_FALSE(store_.SetActivationState(
242 PendingActivationStore::kIdentifierICCID,
243 kEntry,
244 PendingActivationStore::kStateUnknown));
245 EXPECT_FALSE(store_.SetActivationState(
246 PendingActivationStore::kIdentifierICCID,
247 kEntry,
248 PendingActivationStore::kStatePending));
249
250 EXPECT_CALL(*mock_store,
251 SetInt(PendingActivationStore::kIccidGroupId, kEntry, _))
252 .WillRepeatedly(Return(true));
253 EXPECT_FALSE(store_.SetActivationState(
254 PendingActivationStore::kIdentifierICCID,
255 kEntry, static_cast<PendingActivationStore::State>(-1)));
256 EXPECT_FALSE(store_.SetActivationState(
257 PendingActivationStore::kIdentifierICCID,
258 kEntry, static_cast<PendingActivationStore::State>(4)));
259 EXPECT_FALSE(store_.SetActivationState(
260 PendingActivationStore::kIdentifierICCID,
261 kEntry, PendingActivationStore::kStateUnknown));
262 EXPECT_TRUE(store_.SetActivationState(
263 PendingActivationStore::kIdentifierICCID,
264 kEntry,
265 PendingActivationStore::kStatePending));
266 EXPECT_TRUE(store_.SetActivationState(
267 PendingActivationStore::kIdentifierICCID,
268 kEntry,
269 PendingActivationStore::kStateActivated));
270}
271
272TEST_F(PendingActivationStoreTest, RemoveEntry) {
273 MockStore *mock_store = mock_store_.get();
274 SetMockStore();
275
276 const char kEntry[] = "12345689";
277
278 EXPECT_CALL(*mock_store, Flush()).WillRepeatedly(Return(true));
279 EXPECT_CALL(*mock_store, DeleteKey(PendingActivationStore::kIccidGroupId,
280 kEntry))
281 .WillOnce(Return(false));
282 EXPECT_FALSE(store_.RemoveEntry(PendingActivationStore::kIdentifierICCID,
283 kEntry));
284 EXPECT_CALL(*mock_store, DeleteKey(PendingActivationStore::kIccidGroupId,
285 kEntry))
286 .WillOnce(Return(true));
287 EXPECT_TRUE(store_.RemoveEntry(PendingActivationStore::kIdentifierICCID,
288 kEntry));
289}
290
291} // namespace shill