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