network_screen_browsertest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
1// Copyright (c) 2012 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/memory/scoped_ptr.h" 6#include "chrome/browser/chromeos/login/screens/mock_screen_observer.h" 7#include "chrome/browser/chromeos/login/screens/network_screen.h" 8#include "chrome/browser/chromeos/login/screens/wizard_screen.h" 9#include "chrome/browser/chromeos/login/wizard_controller.h" 10#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" 11#include "chrome/browser/chromeos/net/mock_connectivity_state_helper.h" 12#include "chrome/test/base/ui_test_utils.h" 13#include "chromeos/dbus/fake_session_manager_client.h" 14#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" 15#include "content/public/test/test_utils.h" 16#include "testing/gmock/include/gmock/gmock.h" 17#include "testing/gtest/include/gtest/gtest.h" 18#include "third_party/cros_system_api/dbus/service_constants.h" 19#include "ui/views/controls/button/button.h" 20 21using ::testing::_; 22using ::testing::AnyNumber; 23using ::testing::Return; 24using ::testing::ReturnRef; 25using views::Button; 26 27namespace chromeos { 28 29class DummyButtonListener : public views::ButtonListener { 30 public: 31 virtual void ButtonPressed(views::Button* sender, 32 const ui::Event& event) OVERRIDE {} 33}; 34 35class NetworkScreenTest : public WizardInProcessBrowserTest { 36 public: 37 NetworkScreenTest(): WizardInProcessBrowserTest("network"), 38 fake_session_manager_client_(NULL) { 39 } 40 41 protected: 42 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 43 MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager = 44 new MockDBusThreadManagerWithoutGMock; 45 DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); 46 fake_session_manager_client_ = 47 mock_dbus_thread_manager->fake_session_manager_client(); 48 49 mock_connectivity_state_helper_.reset(new MockConnectivityStateHelper); 50 ConnectivityStateHelper::SetForTest(mock_connectivity_state_helper_.get()); 51 SetDefaultMockConnectivityStateHelperExpectations(); 52 53 cros_mock_->InitStatusAreaMocks(); 54 cellular_.reset(new NetworkDevice("cellular")); 55 56 // Minimal set of expectations needed on NetworkScreen initialization. 57 // Status bar expectations are defined with RetiresOnSaturation() so 58 EXPECT_CALL(*mock_connectivity_state_helper_, 59 IsConnectedType(flimflam::kTypeWifi)) 60 .Times(1) 61 .WillRepeatedly(Return(false)); 62 63 cros_mock_->SetStatusAreaMocksExpectations(); 64 } 65 66 virtual void SetUpOnMainThread() OVERRIDE { 67 WizardInProcessBrowserTest::SetUpOnMainThread(); 68 mock_screen_observer_.reset(new MockScreenObserver()); 69 ASSERT_TRUE(WizardController::default_controller() != NULL); 70 network_screen_ = 71 WizardController::default_controller()->GetNetworkScreen(); 72 ASSERT_TRUE(network_screen_ != NULL); 73 ASSERT_EQ(WizardController::default_controller()->current_screen(), 74 network_screen_); 75 network_screen_->screen_observer_ = mock_screen_observer_.get(); 76 ASSERT_TRUE(network_screen_->actor() != NULL); 77 } 78 79 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 80 CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); 81 DBusThreadManager::Shutdown(); 82 ConnectivityStateHelper::SetForTest(NULL); 83 } 84 85 void EmulateContinueButtonExit(NetworkScreen* network_screen) { 86 EXPECT_CALL(*mock_screen_observer_, 87 OnExit(ScreenObserver::NETWORK_CONNECTED)) 88 .Times(1); 89 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnected()) 90 .WillOnce(Return(true)); 91 network_screen->OnContinuePressed(); 92 content::RunAllPendingInMessageLoop(); 93 } 94 95 void SetDefaultMockConnectivityStateHelperExpectations() { 96 EXPECT_CALL(*mock_connectivity_state_helper_, AddNetworkManagerObserver(_)) 97 .Times(AnyNumber()); 98 EXPECT_CALL(*mock_connectivity_state_helper_, 99 RemoveNetworkManagerObserver(_)) 100 .Times(AnyNumber()); 101 EXPECT_CALL(*mock_connectivity_state_helper_, NetworkNameForType(_)) 102 .Times(AnyNumber()) 103 .WillRepeatedly((Return(""))); 104 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnected()) 105 .Times(AnyNumber()) 106 .WillRepeatedly((Return(false))); 107 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnecting()) 108 .Times(AnyNumber()) 109 .WillRepeatedly((Return(false))); 110 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnectedType(_)) 111 .Times(AnyNumber()) 112 .WillRepeatedly((Return(false))); 113 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnectingType(_)) 114 .Times(AnyNumber()) 115 .WillRepeatedly((Return(false))); 116 } 117 118 scoped_ptr<MockScreenObserver> mock_screen_observer_; 119 scoped_ptr<MockConnectivityStateHelper> mock_connectivity_state_helper_; 120 scoped_ptr<NetworkDevice> cellular_; 121 NetworkScreen* network_screen_; 122 FakeSessionManagerClient* fake_session_manager_client_; 123 124 private: 125 DISALLOW_COPY_AND_ASSIGN(NetworkScreenTest); 126}; 127 128IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) { 129 EXPECT_CALL(*mock_connectivity_state_helper_, 130 IsConnectedType(flimflam::kTypeEthernet)) 131 .WillOnce((Return(false))); 132 EXPECT_CALL(*mock_connectivity_state_helper_, 133 IsConnectedType(flimflam::kTypeWifi)) 134 .WillOnce((Return(false))); 135 EXPECT_CALL(*mock_connectivity_state_helper_, 136 IsConnectedType(flimflam::kTypeCellular)) 137 .WillOnce((Return(false))); 138 EXPECT_CALL(*mock_connectivity_state_helper_, 139 IsConnectingType(flimflam::kTypeEthernet)) 140 .WillOnce((Return(true))); 141 // EXPECT_FALSE(actor_->IsContinueEnabled()); 142 network_screen_->NetworkManagerChanged(); 143 144 EXPECT_CALL(*mock_connectivity_state_helper_, 145 IsConnectedType(flimflam::kTypeEthernet)) 146 .WillOnce(Return(true)); 147 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnected()) 148 .Times(2) 149 .WillRepeatedly(Return(true)); 150 // TODO(nkostylev): Add integration with WebUI actor http://crosbug.com/22570 151 // EXPECT_FALSE(actor_->IsContinueEnabled()); 152 // EXPECT_FALSE(actor_->IsConnecting()); 153 network_screen_->NetworkManagerChanged(); 154 155 // EXPECT_TRUE(actor_->IsContinueEnabled()); 156 EmulateContinueButtonExit(network_screen_); 157 EXPECT_EQ( 158 1, fake_session_manager_client_->emit_login_prompt_ready_call_count()); 159} 160 161IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) { 162 EXPECT_CALL(*mock_connectivity_state_helper_, 163 IsConnectedType(flimflam::kTypeEthernet)) 164 .WillOnce((Return(false))); 165 EXPECT_CALL(*mock_connectivity_state_helper_, 166 IsConnectedType(flimflam::kTypeWifi)) 167 .WillOnce((Return(false))); 168 EXPECT_CALL(*mock_connectivity_state_helper_, 169 IsConnectedType(flimflam::kTypeCellular)) 170 .WillOnce((Return(false))); 171 EXPECT_CALL(*mock_connectivity_state_helper_, 172 IsConnectingType(flimflam::kTypeEthernet)) 173 .WillOnce((Return(false))); 174 EXPECT_CALL(*mock_connectivity_state_helper_, 175 IsConnectingType(flimflam::kTypeWifi)) 176 .WillOnce((Return(true))); 177 // EXPECT_FALSE(actor_->IsContinueEnabled()); 178 network_screen_->NetworkManagerChanged(); 179 180 EXPECT_CALL(*mock_connectivity_state_helper_, 181 IsConnectedType(flimflam::kTypeEthernet)) 182 .WillOnce(Return(true)); 183 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnected()) 184 .Times(2) 185 .WillRepeatedly(Return(true)); 186 // TODO(nkostylev): Add integration with WebUI actor http://crosbug.com/22570 187 // EXPECT_FALSE(actor_->IsContinueEnabled()); 188 // EXPECT_FALSE(actor_->IsConnecting()); 189 network_screen_->NetworkManagerChanged(); 190 191 // EXPECT_TRUE(actor_->IsContinueEnabled()); 192 EmulateContinueButtonExit(network_screen_); 193 EXPECT_EQ( 194 1, fake_session_manager_client_->emit_login_prompt_ready_call_count()); 195} 196 197IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) { 198 EXPECT_CALL(*mock_connectivity_state_helper_, 199 IsConnectedType(flimflam::kTypeEthernet)) 200 .WillOnce((Return(false))); 201 EXPECT_CALL(*mock_connectivity_state_helper_, 202 IsConnectedType(flimflam::kTypeWifi)) 203 .WillOnce((Return(false))); 204 EXPECT_CALL(*mock_connectivity_state_helper_, 205 IsConnectedType(flimflam::kTypeCellular)) 206 .WillOnce((Return(false))); 207 EXPECT_CALL(*mock_connectivity_state_helper_, 208 IsConnectingType(flimflam::kTypeEthernet)) 209 .WillOnce((Return(false))); 210 EXPECT_CALL(*mock_connectivity_state_helper_, 211 IsConnectingType(flimflam::kTypeWifi)) 212 .WillOnce((Return(false))); 213 EXPECT_CALL(*mock_connectivity_state_helper_, 214 IsConnectingType(flimflam::kTypeCellular)) 215 .WillOnce((Return(true))); 216 // EXPECT_FALSE(actor_->IsContinueEnabled()); 217 network_screen_->NetworkManagerChanged(); 218 219 EXPECT_CALL(*mock_connectivity_state_helper_, 220 IsConnectedType(flimflam::kTypeEthernet)) 221 .WillOnce(Return(true)); 222 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnected()) 223 .Times(2) 224 .WillRepeatedly(Return(true)); 225 // TODO(nkostylev): Add integration with WebUI actor http://crosbug.com/22570 226 // EXPECT_FALSE(actor_->IsContinueEnabled()); 227 // EXPECT_FALSE(actor_->IsConnecting()); 228 network_screen_->NetworkManagerChanged(); 229 230 // EXPECT_TRUE(actor_->IsContinueEnabled()); 231 EmulateContinueButtonExit(network_screen_); 232 EXPECT_EQ( 233 1, fake_session_manager_client_->emit_login_prompt_ready_call_count()); 234} 235 236IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) { 237 EXPECT_CALL(*mock_connectivity_state_helper_, 238 IsConnectedType(flimflam::kTypeEthernet)) 239 .WillOnce((Return(false))); 240 EXPECT_CALL(*mock_connectivity_state_helper_, 241 IsConnectedType(flimflam::kTypeWifi)) 242 .WillOnce((Return(false))); 243 EXPECT_CALL(*mock_connectivity_state_helper_, 244 IsConnectedType(flimflam::kTypeCellular)) 245 .WillOnce((Return(false))); 246 EXPECT_CALL(*mock_connectivity_state_helper_, 247 IsConnectingType(flimflam::kTypeEthernet)) 248 .WillOnce((Return(false))); 249 EXPECT_CALL(*mock_connectivity_state_helper_, 250 IsConnectingType(flimflam::kTypeWifi)) 251 .WillOnce((Return(true))); 252 // EXPECT_FALSE(actor_->IsContinueEnabled()); 253 network_screen_->NetworkManagerChanged(); 254 255 EXPECT_CALL(*mock_connectivity_state_helper_, IsConnected()) 256 .Times(2) 257 .WillRepeatedly(Return(false)); 258 // TODO(nkostylev): Add integration with WebUI actor http://crosbug.com/22570 259 // EXPECT_FALSE(actor_->IsContinueEnabled()); 260 // EXPECT_FALSE(actor_->IsConnecting()); 261 network_screen_->OnConnectionTimeout(); 262 263 // Close infobubble with error message - it makes the test stable. 264 // EXPECT_FALSE(actor_->IsContinueEnabled()); 265 // EXPECT_FALSE(actor_->IsConnecting()); 266 // actor_->ClearErrors(); 267 EXPECT_EQ( 268 1, fake_session_manager_client_->emit_login_prompt_ready_call_count()); 269} 270 271} // namespace chromeos 272