bootstrapping_device_lister_unittest.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1// Copyright 2014 The Chromium 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 "base/bind.h"
6#include "chrome/browser/local_discovery/wifi/bootstrapping_device_lister.h"
7#include "chrome/browser/local_discovery/wifi/mock_wifi_manager.h"
8#include "components/onc/onc_constants.h"
9#include "testing/gmock/include/gmock/gmock.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12using testing::StrictMock;
13using testing::Mock;
14
15namespace local_discovery {
16
17namespace wifi {
18
19namespace {
20
21class MockableUpdateCallback {
22 public:
23  void UpdateCallback(bool available,
24                      const BootstrappingDeviceDescription& description) {
25    UpdateCallbackInternal(available,
26                           description.device_network_id,
27                           description.device_ssid,
28                           description.device_name,
29                           description.device_kind,
30                           description.connection_status);
31  }
32
33  MOCK_METHOD6(UpdateCallbackInternal,
34               void(bool available,
35                    const std::string& network_id,
36                    const std::string& ssid,
37                    const std::string& name,
38                    const std::string& kind,
39                    BootstrappingDeviceDescription::ConnectionStatus status));
40
41  BootstrappingDeviceLister::UpdateCallback callback() {
42    return base::Bind(&MockableUpdateCallback::UpdateCallback,
43                      base::Unretained(this));
44  }
45};
46
47class BootstrappingDeviceListerTest : public ::testing::Test {
48 public:
49  BootstrappingDeviceListerTest()
50      : lister_(&mock_wifi_manager_, mockable_callback_.callback()) {}
51
52  ~BootstrappingDeviceListerTest() {}
53
54  StrictMock<MockableUpdateCallback> mockable_callback_;
55  StrictMock<MockWifiManager> mock_wifi_manager_;
56  BootstrappingDeviceLister lister_;
57};
58
59TEST_F(BootstrappingDeviceListerTest, ListSingleDevice) {
60  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
61  lister_.Start();
62  Mock::VerifyAndClearExpectations(&mock_wifi_manager_);
63
64  std::vector<NetworkProperties> network_property_list;
65
66  NetworkProperties network;
67  network.guid = "MyInternalID";
68  network.ssid = "MyDevice@camNprv";
69  network.connection_state = onc::connection_state::kNotConnected;
70
71  network_property_list.push_back(network);
72
73  NetworkProperties network2;
74  network2.guid = "MyInternalID2";
75  network2.ssid = "SomeRandomNetwork";
76  network2.connection_state = onc::connection_state::kNotConnected;
77
78  network_property_list.push_back(network2);
79
80  EXPECT_CALL(
81      mockable_callback_,
82      UpdateCallbackInternal(true,
83                             "MyInternalID",
84                             "MyDevice@camNprv",
85                             "MyDevice",
86                             "camera",
87                             BootstrappingDeviceDescription::NOT_CONFIGURED));
88  mock_wifi_manager_.CallSSIDListCallback(network_property_list);
89}
90
91TEST_F(BootstrappingDeviceListerTest, AddRemoveDevice) {
92  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
93  lister_.Start();
94  Mock::VerifyAndClearExpectations(&mock_wifi_manager_);
95
96  std::vector<NetworkProperties> network_property_list;
97
98  NetworkProperties network;
99  network.guid = "MyInternalID";
100  network.ssid = "MyDevice@camNprv";
101  network.connection_state = onc::connection_state::kNotConnected;
102
103  network_property_list.push_back(network);
104
105  std::vector<NetworkProperties> network_property_list2;
106
107  NetworkProperties network2;
108  network2.guid = "MyInternalID2";
109  network2.ssid = "MyDevice2@priFprv";
110  network2.connection_state = onc::connection_state::kNotConnected;
111
112  network_property_list2.push_back(network2);
113
114  EXPECT_CALL(
115      mockable_callback_,
116      UpdateCallbackInternal(true,
117                             "MyInternalID",
118                             "MyDevice@camNprv",
119                             "MyDevice",
120                             "camera",
121                             BootstrappingDeviceDescription::NOT_CONFIGURED));
122  mock_wifi_manager_.CallSSIDListCallback(network_property_list);
123
124  Mock::VerifyAndClearExpectations(&mock_wifi_manager_);
125
126  EXPECT_CALL(
127      mockable_callback_,
128      UpdateCallbackInternal(false,
129                             "MyInternalID",
130                             "MyDevice@camNprv",
131                             "MyDevice",
132                             "camera",
133                             BootstrappingDeviceDescription::NOT_CONFIGURED));
134  EXPECT_CALL(mockable_callback_,
135              UpdateCallbackInternal(true,
136                                     "MyInternalID2",
137                                     "MyDevice2@priFprv",
138                                     "MyDevice2",
139                                     "printer",
140                                     BootstrappingDeviceDescription::OFFLINE));
141  mock_wifi_manager_.CallNetworkListObservers(network_property_list2);
142}
143
144TEST_F(BootstrappingDeviceListerTest, EdgeCases) {
145  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
146  lister_.Start();
147  Mock::VerifyAndClearExpectations(&mock_wifi_manager_);
148
149  std::vector<NetworkProperties> network_property_list;
150
151  NetworkProperties network;
152  network.guid = "MyInternalID";
153  network.ssid = "MyDevice@camprv";
154  network.connection_state = onc::connection_state::kNotConnected;
155
156  NetworkProperties network2;
157  network2.guid = "MyInternalID2";
158  network2.ssid = "MyDevice2@unkNprv";
159  network2.connection_state = onc::connection_state::kNotConnected;
160
161  NetworkProperties network3;
162  network3.guid = "MyInternalID3";
163  network3.ssid = "MyDevice3camNprv";
164  network3.connection_state = onc::connection_state::kNotConnected;
165
166  NetworkProperties network4;
167  network4.guid = "MyInternalID4";
168  network4.ssid = "MyDevice4@camNnpr";
169  network4.connection_state = onc::connection_state::kNotConnected;
170
171  NetworkProperties network5;
172  network5.guid = "MyInternalID5";
173  network5.ssid = "MyDevice5@With@At@Signs@camOprv";
174  network5.connection_state = onc::connection_state::kNotConnected;
175
176  network_property_list.push_back(network);
177  network_property_list.push_back(network2);
178  network_property_list.push_back(network3);
179  network_property_list.push_back(network4);
180  network_property_list.push_back(network5);
181
182  EXPECT_CALL(
183      mockable_callback_,
184      UpdateCallbackInternal(true,
185                             "MyInternalID2",
186                             "MyDevice2@unkNprv",
187                             "MyDevice2",
188                             "device",
189                             BootstrappingDeviceDescription::NOT_CONFIGURED));
190
191  EXPECT_CALL(mockable_callback_,
192              UpdateCallbackInternal(true,
193                                     "MyInternalID5",
194                                     "MyDevice5@With@At@Signs@camOprv",
195                                     "MyDevice5@With@At@Signs",
196                                     "camera",
197                                     BootstrappingDeviceDescription::ONLINE));
198  mock_wifi_manager_.CallSSIDListCallback(network_property_list);
199}
200
201}  // namespace
202
203}  // namespace wifi
204
205}  // namespace local_discovery
206