1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/mock_login_library.h"
6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/cros/mock_network_library.h"
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/mock_update_library.h"
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_screen_observer.h"
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/update_screen.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/wizard_controller.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h"
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos {
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::_;
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::AnyNumber;
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::AtLeast;
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Return;
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::ReturnRef;
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::Invoke;
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic void RequestUpdateCheckSuccess(UpdateCallback callback, void* userdata) {
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  callback(userdata, chromeos::UPDATE_RESULT_SUCCESS, NULL);
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass UpdateScreenTest : public WizardInProcessBrowserTest {
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreenTest() : WizardInProcessBrowserTest("update"),
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       mock_login_library_(NULL),
30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       mock_update_library_(NULL),
31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       mock_network_library_(NULL) {}
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected:
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void SetUpInProcessBrowserTestFixture() {
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture();
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    cros_mock_->InitStatusAreaMocks();
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    cros_mock_->SetStatusAreaMocksExpectations();
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    ASSERT_TRUE(CrosLibrary::Get()->EnsureLoaded());
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    mock_login_library_ = new MockLoginLibrary();
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true);
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady())
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1);
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    mock_update_library_ = new MockUpdateLibrary();
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    cros_mock_->test_api()->SetUpdateLibrary(mock_update_library_, true);
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    // UpdateScreen::StartUpdate() will be called by the WizardController
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    // just after creating the update screen, so the expectations for that
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    // should be set up here.
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*mock_update_library_, AddObserver(_))
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1);
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    EXPECT_CALL(*mock_update_library_, RemoveObserver(_))
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(AtLeast(1));
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_))
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        .Times(1)
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        .WillOnce(Invoke(RequestUpdateCheckSuccess));
58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    mock_network_library_ = cros_mock_->mock_network_library();
60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    EXPECT_CALL(*mock_network_library_, Connected())
61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        .Times(1)  // also called by NetworkMenu::InitMenuItems()
62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        .WillRepeatedly((Return(false)))
63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        .RetiresOnSaturation();
64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_))
65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        .Times(1)
66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        .RetiresOnSaturation();
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    EXPECT_CALL(*mock_network_library_, FindWifiDevice())
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        .Times(AnyNumber());
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    EXPECT_CALL(*mock_network_library_, FindEthernetDevice())
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        .Times(AnyNumber());
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void TearDownInProcessBrowserTestFixture() {
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    cros_mock_->test_api()->SetUpdateLibrary(NULL, true);
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture();
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MockLoginLibrary* mock_login_library_;
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MockUpdateLibrary* mock_update_library_;
80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  MockNetworkLibrary* mock_network_library_;
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest);
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) {
87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(controller() != NULL);
88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(mock_screen_observer.get());
90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreen* update_screen = controller()->GetUpdateScreen();
91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_screen != NULL);
92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_EQ(controller()->current_screen(), update_screen);
93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateView* update_view = update_screen->view();
94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_view != NULL);
95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(NULL);
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) {
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(controller() != NULL);
100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(mock_screen_observer.get());
102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreen* update_screen = controller()->GetUpdateScreen();
103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_screen != NULL);
104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_EQ(controller()->current_screen(), update_screen);
105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateLibrary::Status status;
107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_IDLE;
108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_screen_observer, OnExit(ScreenObserver::UPDATE_NOUPDATE))
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1);
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(NULL);
116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) {
119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(controller() != NULL);
120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(mock_screen_observer.get());
122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreen* update_screen = controller()->GetUpdateScreen();
123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_screen != NULL);
124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_EQ(controller()->current_screen(), update_screen);
1254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  update_screen->SetAllUpdatesCritical(true);
126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateLibrary::Status status;
128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_UPDATE_AVAILABLE;
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.new_version = "latest and greatest";
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_DOWNLOADING;
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.download_progress = 0.0;
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.download_progress = 0.5;
144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.download_progress = 1.0;
150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_VERIFYING;
156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_FINALIZING;
162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT;
168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, RebootAfterUpdate())
172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1);
173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(NULL);
176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) {
179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  callback(userdata, chromeos::UPDATE_RESULT_FAILED, NULL);
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) {
183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(controller() != NULL);
184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(mock_screen_observer.get());
186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreen* update_screen = controller()->GetUpdateScreen();
187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_screen != NULL);
188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_EQ(controller()->current_screen(), update_screen);
189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // First, cancel the update that is already in progress.
19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_CALL(*mock_screen_observer,
19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen              OnExit(ScreenObserver::UPDATE_NOUPDATE))
19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      .Times(1);
194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->CancelUpdate();
195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail
197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // issuing the update check this time.
198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, AddObserver(_))
199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1);
200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, RemoveObserver(_))
201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1));
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_))
203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1)
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      .WillOnce(Invoke(RequestUpdateCheckFail));
205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_screen_observer,
206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen              OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE))
207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1);
208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->StartUpdate();
209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(NULL);
211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) {
214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(controller() != NULL);
215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(mock_screen_observer.get());
217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreen* update_screen = controller()->GetUpdateScreen();
218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_screen != NULL);
219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_EQ(controller()->current_screen(), update_screen);
220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateLibrary::Status status;
222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_ERROR;
223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_screen_observer,
227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen              OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE))
228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1);
229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(NULL);
232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) {
235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(controller() != NULL);
236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(mock_screen_observer.get());
238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateScreen* update_screen = controller()->GetUpdateScreen();
239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(update_screen != NULL);
240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_EQ(controller()->current_screen(), update_screen);
241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  UpdateLibrary::Status status;
243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_UPDATE_AVAILABLE;
245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.new_version = "latest and greatest";
246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  status.status = UPDATE_STATUS_ERROR;
252bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_update_library_, status())
253bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(AtLeast(1))
254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .WillRepeatedly(ReturnRef(status));
255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_CALL(*mock_screen_observer,
256bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen              OnExit(ScreenObserver::UPDATE_ERROR_UPDATING))
257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      .Times(1);
258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  update_screen->UpdateStatusChanged(mock_update_library_);
259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  controller()->set_observer(NULL);
261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}  // namespace chromeos
264