Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Side by Side Diff: testing/ondemandsystem_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « testing/omaha_unittest_version.rc ('k') | testing/resource.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2008-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 //
17 // System level tests for On Demand. Unlike omaha_unittest.cpp, this test
18 // should be run one test at a time view --gtest_filter. The tests all assume
19 // that there is an update available for the app (specified via guid as the
20 // first argument).
21
22 #include "base/basictypes.h"
23 #include "omaha/testing/unit_test.h"
24 #include "omaha/third_party/gtest/include/gtest/gtest.h"
25 #include "omaha/tools/performondemand/performondemand.h"
26 #include "omaha/base/utils.h"
27 #include <windows.h>
28 #include <atltime.h>
29
30 namespace omaha {
31
32 // Lazily define the guid and is_machine (passed in at the command line) global.
33 CString guid;
34 bool is_machine;
35 const int UPDATE_TIMEOUT = 60;
36
37 class OnDemandTest : public testing::Test {
38 protected:
39
40 virtual void SetUp() {
41 wprintf(_T("Initializing\n"));
42 HRESULT hr = CComObject<JobObserver>::CreateInstance(&job_observer);
43 ASSERT_EQ(S_OK, hr);
44 job_holder = job_observer;
45 ASSERT_EQ(Reconnect(), S_OK);
46 }
47
48 virtual HRESULT Reconnect() {
49 on_demand = NULL;
50 if (is_machine) {
51 return on_demand.CoCreateInstance(
52 L"GoogleUpdate.OnDemandCOMClassMachine");
53 } else {
54 return on_demand.CoCreateInstance(
55 L"GoogleUpdate.OnDemandCOMClassUser");
56 }
57 }
58
59 virtual void TearDown() {
60 job_holder = NULL;
61 on_demand = NULL;
62 }
63
64 void WaitForUpdateCompletion(int timeout) {
65 MSG msg;
66 SYSTEMTIME start_system_time = {0};
67 SYSTEMTIME current_system_time = {0};
68 ::GetSystemTime(&start_system_time);
69 CTime start_time(start_system_time);
70 CTimeSpan timeout_period(0, 0, 0, timeout);
71
72 while (::GetMessage(&msg, NULL, 0, 0))
73 {
74 ::TranslateMessage(&msg);
75 ::DispatchMessage(&msg);
76 ::GetSystemTime(&current_system_time);
77 CTime current_time(current_system_time);
78 CTimeSpan elapsed_time = current_time - start_time;
79 if (timeout_period < elapsed_time) {
80 wprintf(_T("Timed out.\n"));
81 break;
82 }
83 }
84
85 PrintSummary();
86 }
87
88 void PrintSummary() {
89 wprintf(_T("Observed: [0x%x]\n"), job_observer->observed);
90 }
91
92 void ExpectSuccessful() {
93 // Make sure we got a succesfful install.
94 char* err_msg = "Did not observe a complete, successful install!";
95 EXPECT_TRUE(job_observer->observed & (
96 // Complete codes we don't expect are intentially commented out.
97 ON_COMPLETE_SUCCESS |
98 //ON_COMPLETE_SUCCESS_CLOSE_UI |
99 //ON_COMPLETE_RESTART_ALL_BROWSERS |
100 //ON_COMPLETE_REBOOT |
101 //ON_COMPLETE_RESTART_BROWSER |
102 ON_COMPLETE_RESTART_ALL_BROWSERS_NOTICE_ONLY
103 //ON_COMPLETE_REBOOT_NOTICE_ONLY |
104 //ON_COMPLETE_RESTART_BROWSER_NOTICE_ONLY |
105 //ON_COMPLETE_RUN_COMMAND
106 )) << err_msg;
107 }
108
109 CComObject<JobObserver>* job_observer;
110 CComPtr<IJobObserver> job_holder;
111 CComPtr<IGoogleUpdate> on_demand;
112 };
113
114 TEST_F(OnDemandTest, BasicUpdate) {
115 wprintf(_T("Starting Update\n"));
116 HRESULT hr = on_demand->Update(guid, job_observer);
117 ASSERT_EQ(S_OK, hr);
118 WaitForUpdateCompletion(UPDATE_TIMEOUT);
119
120 ExpectSuccessful();
121 char* err_msg = "Did not observe a complete, successful install!";
122 EXPECT_TRUE(job_observer->observed & ON_INSTALLING) << err_msg;
123 }
124
125 TEST_F(OnDemandTest, OnDemandDuringAutoUpdate) {
126 wprintf(_T("Starting Update\n"));
127 HRESULT hr = on_demand->Update(guid, job_observer);
128 ASSERT_EQ(S_OK, hr);
129 WaitForUpdateCompletion(UPDATE_TIMEOUT);
130
131 ExpectSuccessful();
132 char* err_msg = "Did not observe a complete, successful install!";
133 EXPECT_TRUE(job_observer->observed & ON_INSTALLING) << err_msg;
134 }
135
136
137 TEST_F(OnDemandTest, UpdateThenNoUpdate) {
138 wprintf(_T("Starting Update\n"));
139 HRESULT hr = on_demand->Update(guid, job_observer);
140 ASSERT_EQ(S_OK, hr);
141 WaitForUpdateCompletion(UPDATE_TIMEOUT);
142
143 ExpectSuccessful();
144 char* err_msg = "Did not observe a complete, successful install!";
145 EXPECT_TRUE(job_observer->observed & ON_INSTALLING) << err_msg;
146
147
148 wprintf(_T("Starting Second Update Request\n"));
149 // Reset the memory of observed actions.
150 job_observer->Reset();
151 hr = on_demand->Update(guid, job_observer);
152 ASSERT_EQ(S_OK, hr);
153 WaitForUpdateCompletion(UPDATE_TIMEOUT);
154
155 ExpectSuccessful();
156 EXPECT_FALSE(job_observer->observed & ON_INSTALLING) << err_msg;
157 }
158
159
160 TEST_F(OnDemandTest, CloseDuringCheckingForUpdates) {
161 wprintf(_T("Starting Update\n"));
162
163 job_observer->AddCloseMode(ON_CHECKING_FOR_UPDATES);
164
165 HRESULT hr = on_demand->Update(guid, job_observer);
166 ASSERT_EQ(S_OK, hr);
167 WaitForUpdateCompletion(UPDATE_TIMEOUT);
168
169 char* err_msg = "Observed a complete install when should have closed!";
170 EXPECT_TRUE(job_observer->observed & ON_COMPLETE_ERROR) << err_msg;
171 EXPECT_FALSE(job_observer->observed & ON_INSTALLING) << err_msg;
172 }
173
174
175 TEST_F(OnDemandTest, CloseDuringDownload) {
176 wprintf(_T("Starting Update\n"));
177
178 job_observer->AddCloseMode(ON_DOWNLOADING);
179
180 HRESULT hr = on_demand->Update(guid, job_observer);
181 ASSERT_EQ(S_OK, hr);
182 WaitForUpdateCompletion(UPDATE_TIMEOUT);
183
184 char* err_msg = "Observed an install when should have closed!";
185 EXPECT_FALSE(job_observer->observed & ON_INSTALLING) << err_msg;
186 }
187
188
189 TEST_F(OnDemandTest, CloseDuringDownloadAndTryAgain) {
190 wprintf(_T("Starting Update\n"));
191
192 job_observer->AddCloseMode(ON_DOWNLOADING);
193
194 HRESULT hr = on_demand->Update(guid, job_observer);
195 ASSERT_EQ(S_OK, hr);
196 WaitForUpdateCompletion(UPDATE_TIMEOUT);
197
198 char* err_msg = "Observed a complete, install when should have closed!";
199 EXPECT_FALSE(job_observer->observed & ON_INSTALLING) << err_msg;
200
201 wprintf(_T("Requesting update.\n"));
202 // Try a second time, but this time don't interfere. An update should ensue.
203 job_observer->Reset();
204 hr = on_demand->Update(guid, job_observer);
205 ASSERT_EQ(S_OK, hr);
206 WaitForUpdateCompletion(UPDATE_TIMEOUT);
207
208 ExpectSuccessful();
209 EXPECT_TRUE(job_observer->observed & ON_INSTALLING) << err_msg;
210 }
211
212
213 TEST_F(OnDemandTest, UpdateWithOmahaUpdateAvailable) {
214 wprintf(_T("Starting Update\n"));
215 HRESULT hr = on_demand->Update(guid, job_observer);
216 ASSERT_EQ(S_OK, hr);
217 WaitForUpdateCompletion(UPDATE_TIMEOUT);
218
219 ExpectSuccessful();
220 char* err_msg = "Did not observe a complete, successful install!";
221 EXPECT_TRUE(job_observer->observed & ON_INSTALLING) << err_msg;
222 }
223
224
225 TEST_F(OnDemandTest, UpdateAfterOmahaUpdate) {
226 // Test shutdown code by first connecting the the com instance, waiting around
227 // for Omaha to update (done by OnDemandTestFactory.py), and then updating.
228 wprintf(_T("Waiting 60 seconds for omaha to update itself.\n"));
229 ::SleepEx(60000, true);
230
231 wprintf(_T("Attempting update on shut-down server.\n"));
232 HRESULT hr = on_demand->Update(guid, job_observer);
233 ASSERT_EQ(hr, HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE)) <<
234 "Goopdate should have shutdown.";
235
236 wprintf(_T("Reconnecting to COM\n"));
237 ASSERT_EQ(Reconnect(), S_OK);
238
239 wprintf(_T("Starting Update\n"));
240 hr = on_demand->Update(guid, job_observer);
241 ASSERT_EQ(S_OK, hr);
242
243 WaitForUpdateCompletion(UPDATE_TIMEOUT);
244
245 ExpectSuccessful();
246 char* err_msg = "Did not observe a complete, successful install!";
247 EXPECT_TRUE(job_observer->observed & ON_INSTALLING) << err_msg;
248 }
249
250
251
252 bool ParseParams(int argc, TCHAR* argv[], CString* guid, bool* is_machine) {
253 ASSERT1(argv);
254 ASSERT1(guid);
255 if (argc < 3) {
256 return false;
257 }
258 *guid = argv[1];
259 // NOTE(cnygaard): I tried static casting from int to bool but it gave me a
260 // nasty warning about losing efficiency.
261 if (0 == _ttoi(argv[2])) {
262 *is_machine = false;
263 } else {
264 *is_machine = true;
265 }
266
267 // Verify that the guid is valid.
268 GUID parsed = StringToGuid(*guid);
269 if (parsed == GUID_NULL) {
270 return false;
271 }
272
273 argc -= 2;
274 testing::InitGoogleTest(&argc, argv+2);
275 return true;
276 }
277
278 } // namespace omaha
279
280 int _tmain(int argc, TCHAR** argv) {
281
282 if (!omaha::ParseParams(argc, argv, &omaha::guid, &omaha::is_machine)) {
283 wprintf(_T("Usage: ondemandsystem_unittest.exe \n"));
284 wprintf(_T(" [{GUID}] [is_machine (0|1)] --gtest_filter=<testname>\n"));
285 return 0;
286 }
287 omaha::FailOnAssert fail_on_assert;
288 CComModule module;
289 scoped_co_init com_apt;
290
291 int result = RUN_ALL_TESTS();
292 return result;
293 }
294
OLDNEW
« no previous file with comments | « testing/omaha_unittest_version.rc ('k') | testing/resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698