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