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_network_switcher.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;
13
14namespace local_discovery {
15
16namespace wifi {
17
18namespace {
19
20class MockableNetworkSwitchCallback {
21 public:
22  MOCK_METHOD1(OnNetworkSwitch, void(bool success));
23
24  BootstrappingNetworkSwitcher::SuccessCallback callback() {
25    return base::Bind(&MockableNetworkSwitchCallback::OnNetworkSwitch,
26                      base::Unretained(this));
27  }
28};
29
30class BootstrappingNetworkSwitcherTest : public ::testing::Test {
31 public:
32  BootstrappingNetworkSwitcherTest() {
33    NetworkProperties network1;
34    network1.guid = "SampleGUID1";
35    network1.ssid = "SampleSSID1";
36    network1.connection_state = onc::connection_state::kNotConnected;
37
38    NetworkProperties network2;
39    network2.guid = "SampleGUID2";
40    network2.ssid = "SampleSSID2";
41    network2.connection_state = onc::connection_state::kConnected;
42
43    network_properties_.push_back(network1);
44    network_properties_.push_back(network2);
45  }
46
47  ~BootstrappingNetworkSwitcherTest() {}
48
49  NetworkPropertiesList network_properties_;
50  StrictMock<MockableNetworkSwitchCallback> mockable_callback_;
51  StrictMock<MockWifiManager> mock_wifi_manager_;
52  scoped_ptr<BootstrappingNetworkSwitcher> network_switcher_;
53};
54
55TEST_F(BootstrappingNetworkSwitcherTest, EndToEndSuccess) {
56  network_switcher_.reset(new BootstrappingNetworkSwitcher(
57      &mock_wifi_manager_, "SampleConnectSSID", mockable_callback_.callback()));
58
59  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
60  network_switcher_->Connect();
61
62  EXPECT_CALL(mock_wifi_manager_,
63              ConfigureAndConnectNetworkInternal("SampleConnectSSID", ""));
64  mock_wifi_manager_.CallSSIDListCallback(network_properties_);
65
66  EXPECT_CALL(mockable_callback_, OnNetworkSwitch(true));
67  mock_wifi_manager_.CallConfigureAndConnectNetworkCallback(true);
68
69  EXPECT_CALL(mock_wifi_manager_, ConnectToNetworkByIDInternal("SampleGUID2"));
70  network_switcher_->Disconnect();
71}
72
73TEST_F(BootstrappingNetworkSwitcherTest, MidconnnectCancel) {
74  network_switcher_.reset(new BootstrappingNetworkSwitcher(
75      &mock_wifi_manager_, "SampleConnectSSID", mockable_callback_.callback()));
76
77  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
78  network_switcher_->Connect();
79
80  EXPECT_CALL(mock_wifi_manager_,
81              ConfigureAndConnectNetworkInternal("SampleConnectSSID", ""));
82  mock_wifi_manager_.CallSSIDListCallback(network_properties_);
83
84  EXPECT_CALL(mock_wifi_manager_, ConnectToNetworkByIDInternal("SampleGUID2"));
85  network_switcher_->Disconnect();
86}
87
88TEST_F(BootstrappingNetworkSwitcherTest, Failure) {
89  network_switcher_.reset(new BootstrappingNetworkSwitcher(
90      &mock_wifi_manager_, "SampleConnectSSID", mockable_callback_.callback()));
91
92  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
93  network_switcher_->Connect();
94
95  EXPECT_CALL(mock_wifi_manager_,
96              ConfigureAndConnectNetworkInternal("SampleConnectSSID", ""));
97  mock_wifi_manager_.CallSSIDListCallback(network_properties_);
98
99  EXPECT_CALL(mockable_callback_, OnNetworkSwitch(false));
100  mock_wifi_manager_.CallConfigureAndConnectNetworkCallback(false);
101
102  network_switcher_->Disconnect();
103}
104
105TEST_F(BootstrappingNetworkSwitcherTest, RAII) {
106  network_switcher_.reset(new BootstrappingNetworkSwitcher(
107      &mock_wifi_manager_, "SampleConnectSSID", mockable_callback_.callback()));
108
109  EXPECT_CALL(mock_wifi_manager_, GetSSIDListInternal());
110  network_switcher_->Connect();
111
112  EXPECT_CALL(mock_wifi_manager_,
113              ConfigureAndConnectNetworkInternal("SampleConnectSSID", ""));
114  mock_wifi_manager_.CallSSIDListCallback(network_properties_);
115
116  EXPECT_CALL(mock_wifi_manager_, ConnectToNetworkByIDInternal("SampleGUID2"));
117  network_switcher_.reset();
118}
119
120}  // namespace
121
122}  // namespace wifi
123
124}  // namespace local_discovery
125