network_screen_browsertest.cc revision 4a5e2dc747d50c653511c68ccb2cfbfb740bd5a7
1// Copyright (c) 2010 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 <string> 6 7#include "app/combobox_model.h" 8#include "app/l10n_util.h" 9#include "base/message_loop.h" 10#include "base/scoped_ptr.h" 11#include "base/string16.h" 12#include "base/string_number_conversions.h" 13#include "base/utf_string_conversions.h" 14#include "chrome/browser/chromeos/cros/cros_library.h" 15#include "chrome/browser/chromeos/cros/mock_login_library.h" 16#include "chrome/browser/chromeos/cros/mock_network_library.h" 17#include "chrome/browser/chromeos/cros/network_library.h" 18#include "chrome/browser/chromeos/login/mock_screen_observer.h" 19#include "chrome/browser/chromeos/login/network_screen.h" 20#include "chrome/browser/chromeos/login/network_selection_view.h" 21#include "chrome/browser/chromeos/login/view_screen.h" 22#include "chrome/browser/chromeos/login/wizard_controller.h" 23#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" 24#include "chrome/browser/chromeos/login/wizard_screen.h" 25#include "chrome/test/ui_test_utils.h" 26#include "grit/generated_resources.h" 27#include "testing/gmock/include/gmock/gmock.h" 28#include "testing/gtest/include/gtest/gtest.h" 29#include "views/controls/button/text_button.h" 30#include "views/controls/combobox/combobox.h" 31 32namespace chromeos { 33using ::testing::AnyNumber; 34using ::testing::InvokeWithoutArgs; 35using ::testing::Return; 36using ::testing::ReturnRef; 37using ::testing::_; 38using ::testing::A; 39using views::Button; 40 41class DummyButtonListener : public views::ButtonListener { 42 public: 43 virtual void ButtonPressed(views::Button* sender, 44 const views::Event& event) {} 45}; 46 47class NetworkScreenTest : public WizardInProcessBrowserTest { 48 public: 49 NetworkScreenTest(): WizardInProcessBrowserTest("network"), 50 mock_login_library_(NULL), 51 mock_network_library_(NULL) { 52 } 53 54 protected: 55 virtual void SetUpInProcessBrowserTestFixture() { 56 cros_mock_->InitStatusAreaMocks(); 57 mock_network_library_ = cros_mock_->mock_network_library(); 58 mock_login_library_ = new MockLoginLibrary(); 59 cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true); 60 EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady()) 61 .Times(1); 62 63 // Minimal set of expectations needed on NetworkScreen initialization. 64 // Status bar expectations are defined with RetiresOnSaturation() so 65 // these mocks will be active once status bar is initialized. 66 EXPECT_CALL(*mock_network_library_, active_network()) 67 .Times(AnyNumber()) 68 .WillRepeatedly((Return((const Network*)(NULL)))) 69 .RetiresOnSaturation(); 70 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 71 .Times(2) 72 .WillRepeatedly(Return(false)); 73 EXPECT_CALL(*mock_network_library_, ethernet_connecting()) 74 .Times(2) 75 .WillRepeatedly(Return(false)); 76 EXPECT_CALL(*mock_network_library_, wifi_connected()) 77 .Times(1) 78 .WillRepeatedly(Return(false)); 79 EXPECT_CALL(*mock_network_library_, wifi_connecting()) 80 .Times(2) 81 .WillRepeatedly(Return(false)); 82 EXPECT_CALL(*mock_network_library_, cellular_connected()) 83 .Times(1) 84 .WillRepeatedly(Return(false)); 85 EXPECT_CALL(*mock_network_library_, cellular_connecting()) 86 .Times(2) 87 .WillRepeatedly(Return(false)); 88 EXPECT_CALL(*mock_network_library_, ethernet_available()) 89 .Times(1) 90 .WillRepeatedly((Return(true))) 91 .RetiresOnSaturation(); 92 EXPECT_CALL(*mock_network_library_, ethernet_enabled()) 93 .Times(1) 94 .WillRepeatedly((Return(true))) 95 .RetiresOnSaturation(); 96 EXPECT_CALL(*mock_network_library_, wifi_available()) 97 .Times(1) 98 .WillRepeatedly((Return(false))) 99 .RetiresOnSaturation(); 100 EXPECT_CALL(*mock_network_library_, wifi_enabled()) 101 .Times(1) 102 .WillRepeatedly((Return(true))) 103 .RetiresOnSaturation(); 104 EXPECT_CALL(*mock_network_library_, cellular_available()) 105 .Times(1) 106 .WillRepeatedly((Return(false))) 107 .RetiresOnSaturation(); 108 EXPECT_CALL(*mock_network_library_, cellular_enabled()) 109 .Times(1) 110 .WillRepeatedly((Return(true))) 111 .RetiresOnSaturation(); 112 113 // Add a Connecting for prewarming auth url check. 114 EXPECT_CALL(*mock_network_library_, Connecting()) 115 .Times(1) 116 .WillRepeatedly(Return(false)); 117 // Add a Connected for prewarming auth url check. 118 EXPECT_CALL(*mock_network_library_, Connected()) 119 .Times(4) 120 .WillRepeatedly(Return(false)); 121 // Add an Observer for prewarming auth url check. 122 EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_)) 123 .Times(3); 124 EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver(_)) 125 .Times(2); 126 127 cros_mock_->SetStatusAreaMocksExpectations(); 128 } 129 130 virtual void TearDownInProcessBrowserTestFixture() { 131 CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); 132 cros_mock_->test_api()->SetLoginLibrary(NULL, false); 133 } 134 135 void EmulateContinueButtonExit(NetworkScreen* network_screen) { 136 scoped_ptr<MockScreenObserver> 137 mock_screen_observer(new MockScreenObserver()); 138 EXPECT_CALL(*mock_screen_observer, 139 OnExit(ScreenObserver::NETWORK_CONNECTED)) 140 .Times(1); 141 EXPECT_CALL(*mock_network_library_, Connected()) 142 .WillOnce(Return(true)); 143 controller()->set_observer(mock_screen_observer.get()); 144 DummyButtonListener button_listener; 145 views::TextButton button(&button_listener, L"Button"); 146 views::MouseEvent event(views::Event::ET_MOUSE_RELEASED, 147 0, 0, 148 views::Event::EF_LEFT_BUTTON_DOWN); 149 network_screen->ButtonPressed(&button, event); 150 ui_test_utils::RunAllPendingInMessageLoop(); 151 controller()->set_observer(NULL); 152 } 153 154 MockLoginLibrary* mock_login_library_; 155 MockNetworkLibrary* mock_network_library_; 156 157 private: 158 DISALLOW_COPY_AND_ASSIGN(NetworkScreenTest); 159}; 160 161IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) { 162 ASSERT_TRUE(controller()); 163 NetworkScreen* network_screen = controller()->GetNetworkScreen(); 164 ASSERT_TRUE(network_screen != NULL); 165 ASSERT_EQ(network_screen, controller()->current_screen()); 166 167 NetworkSelectionView* network_view = network_screen->view(); 168 ASSERT_TRUE(network_view != NULL); 169 EXPECT_FALSE(network_view->IsContinueEnabled()); 170 171 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 172 .WillOnce((Return(false))); 173 EXPECT_CALL(*mock_network_library_, wifi_connected()) 174 .WillOnce((Return(false))); 175 EXPECT_CALL(*mock_network_library_, cellular_connected()) 176 .WillOnce((Return(false))); 177 EXPECT_CALL(*mock_network_library_, ethernet_connecting()) 178 .WillOnce((Return(true))); 179 180 network_screen->OnNetworkManagerChanged(mock_network_library_); 181 EXPECT_FALSE(network_view->IsContinueEnabled()); 182 EXPECT_FALSE(network_view->IsConnecting()); 183 184 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 185 .WillOnce(Return(true)); 186 EXPECT_CALL(*mock_network_library_, Connected()) 187 .WillOnce(Return(true)); 188 189 network_screen->OnNetworkManagerChanged(mock_network_library_); 190 EXPECT_TRUE(network_view->IsContinueEnabled()); 191 192 EmulateContinueButtonExit(network_screen); 193} 194 195IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) { 196 ASSERT_TRUE(controller()); 197 NetworkScreen* network_screen = controller()->GetNetworkScreen(); 198 ASSERT_TRUE(network_screen != NULL); 199 ASSERT_EQ(network_screen, controller()->current_screen()); 200 201 NetworkSelectionView* network_view = network_screen->view(); 202 ASSERT_TRUE(network_view != NULL); 203 EXPECT_FALSE(network_view->IsContinueEnabled()); 204 205 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 206 .WillOnce((Return(false))); 207 EXPECT_CALL(*mock_network_library_, wifi_connected()) 208 .WillOnce((Return(false))); 209 EXPECT_CALL(*mock_network_library_, cellular_connected()) 210 .WillOnce((Return(false))); 211 EXPECT_CALL(*mock_network_library_, ethernet_connecting()) 212 .WillOnce((Return(false))); 213 EXPECT_CALL(*mock_network_library_, wifi_connecting()) 214 .WillOnce((Return(true))); 215 scoped_ptr<WifiNetwork> wifi(new WifiNetwork()); 216 EXPECT_CALL(*mock_network_library_, wifi_network()) 217 .WillOnce(Return(wifi.get())); 218 219 network_screen->OnNetworkManagerChanged(mock_network_library_); 220 EXPECT_FALSE(network_view->IsContinueEnabled()); 221 EXPECT_FALSE(network_view->IsConnecting()); 222 223 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 224 .WillOnce(Return(true)); 225 EXPECT_CALL(*mock_network_library_, Connected()) 226 .WillOnce(Return(true)); 227 228 network_screen->OnNetworkManagerChanged(mock_network_library_); 229 EXPECT_TRUE(network_view->IsContinueEnabled()); 230 231 EmulateContinueButtonExit(network_screen); 232} 233 234IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) { 235 ASSERT_TRUE(controller()); 236 NetworkScreen* network_screen = controller()->GetNetworkScreen(); 237 ASSERT_TRUE(network_screen != NULL); 238 ASSERT_EQ(network_screen, controller()->current_screen()); 239 240 NetworkSelectionView* network_view = network_screen->view(); 241 ASSERT_TRUE(network_view != NULL); 242 EXPECT_FALSE(network_view->IsContinueEnabled()); 243 244 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 245 .WillOnce((Return(false))); 246 EXPECT_CALL(*mock_network_library_, wifi_connected()) 247 .WillOnce((Return(false))); 248 EXPECT_CALL(*mock_network_library_, cellular_connected()) 249 .WillOnce((Return(false))); 250 EXPECT_CALL(*mock_network_library_, ethernet_connecting()) 251 .WillOnce((Return(false))); 252 EXPECT_CALL(*mock_network_library_, wifi_connecting()) 253 .WillOnce((Return(false))); 254 EXPECT_CALL(*mock_network_library_, cellular_connecting()) 255 .WillOnce((Return(true))); 256 scoped_ptr<CellularNetwork> cellular(new CellularNetwork()); 257 EXPECT_CALL(*mock_network_library_, cellular_network()) 258 .WillOnce(Return(cellular.get())); 259 260 network_screen->OnNetworkManagerChanged(mock_network_library_); 261 EXPECT_FALSE(network_view->IsContinueEnabled()); 262 EXPECT_FALSE(network_view->IsConnecting()); 263 264 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 265 .WillOnce(Return(true)); 266 EXPECT_CALL(*mock_network_library_, Connected()) 267 .WillOnce(Return(true)); 268 269 network_screen->OnNetworkManagerChanged(mock_network_library_); 270 EXPECT_TRUE(network_view->IsContinueEnabled()); 271 272 EmulateContinueButtonExit(network_screen); 273} 274 275IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) { 276 ASSERT_TRUE(controller()); 277 NetworkScreen* network_screen = controller()->GetNetworkScreen(); 278 ASSERT_TRUE(network_screen != NULL); 279 ASSERT_EQ(network_screen, controller()->current_screen()); 280 281 NetworkSelectionView* network_view = network_screen->view(); 282 ASSERT_TRUE(network_view != NULL); 283 EXPECT_FALSE(network_view->IsContinueEnabled()); 284 285 EXPECT_CALL(*mock_network_library_, ethernet_connected()) 286 .WillOnce((Return(false))); 287 EXPECT_CALL(*mock_network_library_, wifi_connected()) 288 .WillOnce((Return(false))); 289 EXPECT_CALL(*mock_network_library_, cellular_connected()) 290 .WillOnce((Return(false))); 291 EXPECT_CALL(*mock_network_library_, ethernet_connecting()) 292 .WillOnce((Return(false))); 293 EXPECT_CALL(*mock_network_library_, wifi_connecting()) 294 .WillOnce((Return(true))); 295 scoped_ptr<WifiNetwork> wifi(new WifiNetwork()); 296 EXPECT_CALL(*mock_network_library_, wifi_network()) 297 .WillOnce(Return(wifi.get())); 298 EXPECT_CALL(*mock_network_library_, Connected()) 299 .WillOnce(Return(false)); 300 301 network_screen->OnNetworkManagerChanged(mock_network_library_); 302 EXPECT_FALSE(network_view->IsContinueEnabled()); 303 EXPECT_FALSE(network_view->IsConnecting()); 304 305 network_screen->OnConnectionTimeout(); 306 EXPECT_FALSE(network_view->IsContinueEnabled()); 307 EXPECT_FALSE(network_view->IsConnecting()); 308 309 // Close infobubble with error message - it makes test stable. 310 network_screen->ClearErrors(); 311} 312 313} // namespace chromeos 314