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