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

Side by Side Diff: filesystem_copier_action_unittest.cc

Issue 3022008: For actions, switch bool success into an exit code. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: switch to all positive error codes. Created 10 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « filesystem_copier_action.cc ('k') | integration_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <glib.h> 5 #include <glib.h>
6 #include <set> 6 #include <set>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 #include <gtest/gtest.h> 9 #include <gtest/gtest.h>
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 15 matching lines...) Expand all
26 bool terminate_early, 26 bool terminate_early,
27 bool use_kernel_partition); 27 bool use_kernel_partition);
28 void SetUp() { 28 void SetUp() {
29 } 29 }
30 void TearDown() { 30 void TearDown() {
31 } 31 }
32 }; 32 };
33 33
34 class FilesystemCopierActionTestDelegate : public ActionProcessorDelegate { 34 class FilesystemCopierActionTestDelegate : public ActionProcessorDelegate {
35 public: 35 public:
36 FilesystemCopierActionTestDelegate() : ran_(false), success_(false) {} 36 FilesystemCopierActionTestDelegate() : ran_(false), code_(kActionCodeError) {}
37 void ExitMainLoop() { 37 void ExitMainLoop() {
38 while (g_main_context_pending(NULL)) { 38 while (g_main_context_pending(NULL)) {
39 g_main_context_iteration(NULL, false); 39 g_main_context_iteration(NULL, false);
40 } 40 }
41 g_main_loop_quit(loop_); 41 g_main_loop_quit(loop_);
42 } 42 }
43 void ProcessingDone(const ActionProcessor* processor, bool success) { 43 void ProcessingDone(const ActionProcessor* processor, ActionExitCode code) {
44 ExitMainLoop(); 44 ExitMainLoop();
45 } 45 }
46 void ProcessingStopped(const ActionProcessor* processor) { 46 void ProcessingStopped(const ActionProcessor* processor) {
47 ExitMainLoop(); 47 ExitMainLoop();
48 } 48 }
49 void ActionCompleted(ActionProcessor* processor, 49 void ActionCompleted(ActionProcessor* processor,
50 AbstractAction* action, 50 AbstractAction* action,
51 bool success) { 51 ActionExitCode code) {
52 if (action->Type() == FilesystemCopierAction::StaticType()) { 52 if (action->Type() == FilesystemCopierAction::StaticType()) {
53 ran_ = true; 53 ran_ = true;
54 success_ = success; 54 code_ = code;
55 } 55 }
56 } 56 }
57 void set_loop(GMainLoop* loop) { 57 void set_loop(GMainLoop* loop) {
58 loop_ = loop; 58 loop_ = loop;
59 } 59 }
60 bool ran() { return ran_; } 60 bool ran() { return ran_; }
61 bool success() { return success_; } 61 ActionExitCode code() { return code_; }
62 private: 62 private:
63 GMainLoop* loop_; 63 GMainLoop* loop_;
64 bool ran_; 64 bool ran_;
65 bool success_; 65 ActionExitCode code_;
66 }; 66 };
67 67
68 struct StartProcessorCallbackArgs { 68 struct StartProcessorCallbackArgs {
69 ActionProcessor* processor; 69 ActionProcessor* processor;
70 FilesystemCopierAction* filesystem_copier_action; 70 FilesystemCopierAction* filesystem_copier_action;
71 bool terminate_early; 71 bool terminate_early;
72 }; 72 };
73 73
74 gboolean StartProcessorInRunLoop(gpointer data) { 74 gboolean StartProcessorInRunLoop(gpointer data) {
75 StartProcessorCallbackArgs* args = 75 StartProcessorCallbackArgs* args =
(...skipping 13 matching lines...) Expand all
89 89
90 DoTest(false, false, true); 90 DoTest(false, false, true);
91 } 91 }
92 void FilesystemCopierActionTest::DoTest(bool run_out_of_space, 92 void FilesystemCopierActionTest::DoTest(bool run_out_of_space,
93 bool terminate_early, 93 bool terminate_early,
94 bool use_kernel_partition) { 94 bool use_kernel_partition) {
95 GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 95 GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE);
96 96
97 string a_loop_file; 97 string a_loop_file;
98 string b_loop_file; 98 string b_loop_file;
99 99
100 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_loop_file.XXXXXX", 100 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_loop_file.XXXXXX",
101 &a_loop_file, 101 &a_loop_file,
102 NULL)); 102 NULL));
103 ScopedPathUnlinker a_loop_file_unlinker(a_loop_file); 103 ScopedPathUnlinker a_loop_file_unlinker(a_loop_file);
104 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_loop_file.XXXXXX", 104 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_loop_file.XXXXXX",
105 &b_loop_file, 105 &b_loop_file,
106 NULL)); 106 NULL));
107 ScopedPathUnlinker b_loop_file_unlinker(b_loop_file); 107 ScopedPathUnlinker b_loop_file_unlinker(b_loop_file);
108 108
109 // Make random data for a, zero filled data for b. 109 // Make random data for a, zero filled data for b.
110 const size_t kLoopFileSize = 10 * 1024 * 1024 + 512; 110 const size_t kLoopFileSize = 10 * 1024 * 1024 + 512;
111 vector<char> a_loop_data(kLoopFileSize); 111 vector<char> a_loop_data(kLoopFileSize);
112 FillWithData(&a_loop_data); 112 FillWithData(&a_loop_data);
113 vector<char> b_loop_data(run_out_of_space ? 113 vector<char> b_loop_data(run_out_of_space ?
114 (kLoopFileSize - 1) : 114 (kLoopFileSize - 1) :
115 kLoopFileSize, 115 kLoopFileSize,
116 '\0'); // Fill with 0s 116 '\0'); // Fill with 0s
117 117
118 // Write data to disk 118 // Write data to disk
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 start_callback_args.filesystem_copier_action = &copier_action; 166 start_callback_args.filesystem_copier_action = &copier_action;
167 start_callback_args.terminate_early = terminate_early; 167 start_callback_args.terminate_early = terminate_early;
168 168
169 g_timeout_add(0, &StartProcessorInRunLoop, &start_callback_args); 169 g_timeout_add(0, &StartProcessorInRunLoop, &start_callback_args);
170 g_main_loop_run(loop); 170 g_main_loop_run(loop);
171 g_main_loop_unref(loop); 171 g_main_loop_unref(loop);
172 172
173 if (!terminate_early) 173 if (!terminate_early)
174 EXPECT_TRUE(delegate.ran()); 174 EXPECT_TRUE(delegate.ran());
175 if (run_out_of_space || terminate_early) { 175 if (run_out_of_space || terminate_early) {
176 EXPECT_FALSE(delegate.success()); 176 EXPECT_EQ(kActionCodeError, delegate.code());
177 return; 177 return;
178 } 178 }
179 EXPECT_TRUE(delegate.success()); 179 EXPECT_EQ(kActionCodeSuccess, delegate.code());
180 180
181 // Make sure everything in the out_image is there 181 // Make sure everything in the out_image is there
182 vector<char> a_out; 182 vector<char> a_out;
183 vector<char> b_out; 183 vector<char> b_out;
184 EXPECT_TRUE(utils::ReadFile(a_dev, &a_out)); 184 EXPECT_TRUE(utils::ReadFile(a_dev, &a_out));
185 EXPECT_TRUE(utils::ReadFile(b_dev, &b_out)); 185 EXPECT_TRUE(utils::ReadFile(b_dev, &b_out));
186 EXPECT_TRUE(ExpectVectorsEq(a_out, b_out)); 186 EXPECT_TRUE(ExpectVectorsEq(a_out, b_out));
187 EXPECT_TRUE(ExpectVectorsEq(a_loop_data, a_out)); 187 EXPECT_TRUE(ExpectVectorsEq(a_loop_data, a_out));
188 188
189 EXPECT_TRUE(collector_action.object() == install_plan); 189 EXPECT_TRUE(collector_action.object() == install_plan);
190 } 190 }
191 191
192 class FilesystemCopierActionTest2Delegate : public ActionProcessorDelegate { 192 class FilesystemCopierActionTest2Delegate : public ActionProcessorDelegate {
193 public: 193 public:
194 void ActionCompleted(ActionProcessor* processor, 194 void ActionCompleted(ActionProcessor* processor,
195 AbstractAction* action, 195 AbstractAction* action,
196 bool success) { 196 ActionExitCode code) {
197 if (action->Type() == FilesystemCopierAction::StaticType()) { 197 if (action->Type() == FilesystemCopierAction::StaticType()) {
198 ran_ = true; 198 ran_ = true;
199 success_ = success; 199 code_ = code;
200 } 200 }
201 } 201 }
202 GMainLoop *loop_; 202 GMainLoop *loop_;
203 bool ran_; 203 bool ran_;
204 bool success_; 204 ActionExitCode code_;
205 }; 205 };
206 206
207 TEST_F(FilesystemCopierActionTest, MissingInputObjectTest) { 207 TEST_F(FilesystemCopierActionTest, MissingInputObjectTest) {
208 ActionProcessor processor; 208 ActionProcessor processor;
209 FilesystemCopierActionTest2Delegate delegate; 209 FilesystemCopierActionTest2Delegate delegate;
210 210
211 processor.set_delegate(&delegate); 211 processor.set_delegate(&delegate);
212 212
213 FilesystemCopierAction copier_action(false); 213 FilesystemCopierAction copier_action(false);
214 ObjectCollectorAction<InstallPlan> collector_action; 214 ObjectCollectorAction<InstallPlan> collector_action;
215 215
216 BondActions(&copier_action, &collector_action); 216 BondActions(&copier_action, &collector_action);
217 217
218 processor.EnqueueAction(&copier_action); 218 processor.EnqueueAction(&copier_action);
219 processor.EnqueueAction(&collector_action); 219 processor.EnqueueAction(&collector_action);
220 processor.StartProcessing(); 220 processor.StartProcessing();
221 EXPECT_FALSE(processor.IsRunning()); 221 EXPECT_FALSE(processor.IsRunning());
222 EXPECT_TRUE(delegate.ran_); 222 EXPECT_TRUE(delegate.ran_);
223 EXPECT_FALSE(delegate.success_); 223 EXPECT_EQ(kActionCodeError, delegate.code_);
224 } 224 }
225 225
226 TEST_F(FilesystemCopierActionTest, FullUpdateTest) { 226 TEST_F(FilesystemCopierActionTest, FullUpdateTest) {
227 ActionProcessor processor; 227 ActionProcessor processor;
228 FilesystemCopierActionTest2Delegate delegate; 228 FilesystemCopierActionTest2Delegate delegate;
229 229
230 processor.set_delegate(&delegate); 230 processor.set_delegate(&delegate);
231 231
232 ObjectFeederAction<InstallPlan> feeder_action; 232 ObjectFeederAction<InstallPlan> feeder_action;
233 const char* kUrl = "http://some/url"; 233 const char* kUrl = "http://some/url";
234 InstallPlan install_plan(true, kUrl, 0, "", "", ""); 234 InstallPlan install_plan(true, kUrl, 0, "", "", "");
235 feeder_action.set_obj(install_plan); 235 feeder_action.set_obj(install_plan);
236 FilesystemCopierAction copier_action(false); 236 FilesystemCopierAction copier_action(false);
237 ObjectCollectorAction<InstallPlan> collector_action; 237 ObjectCollectorAction<InstallPlan> collector_action;
238 238
239 BondActions(&feeder_action, &copier_action); 239 BondActions(&feeder_action, &copier_action);
240 BondActions(&copier_action, &collector_action); 240 BondActions(&copier_action, &collector_action);
241 241
242 processor.EnqueueAction(&feeder_action); 242 processor.EnqueueAction(&feeder_action);
243 processor.EnqueueAction(&copier_action); 243 processor.EnqueueAction(&copier_action);
244 processor.EnqueueAction(&collector_action); 244 processor.EnqueueAction(&collector_action);
245 processor.StartProcessing(); 245 processor.StartProcessing();
246 EXPECT_FALSE(processor.IsRunning()); 246 EXPECT_FALSE(processor.IsRunning());
247 EXPECT_TRUE(delegate.ran_); 247 EXPECT_TRUE(delegate.ran_);
248 EXPECT_TRUE(delegate.success_); 248 EXPECT_EQ(kActionCodeSuccess, delegate.code_);
249 EXPECT_EQ(kUrl, collector_action.object().download_url); 249 EXPECT_EQ(kUrl, collector_action.object().download_url);
250 } 250 }
251 251
252 TEST_F(FilesystemCopierActionTest, NonExistentDriveTest) { 252 TEST_F(FilesystemCopierActionTest, NonExistentDriveTest) {
253 ActionProcessor processor; 253 ActionProcessor processor;
254 FilesystemCopierActionTest2Delegate delegate; 254 FilesystemCopierActionTest2Delegate delegate;
255 255
256 processor.set_delegate(&delegate); 256 processor.set_delegate(&delegate);
257 257
258 ObjectFeederAction<InstallPlan> feeder_action; 258 ObjectFeederAction<InstallPlan> feeder_action;
259 InstallPlan install_plan(false, "", 0, "", "/no/such/file", "/no/such/file"); 259 InstallPlan install_plan(false, "", 0, "", "/no/such/file", "/no/such/file");
260 feeder_action.set_obj(install_plan); 260 feeder_action.set_obj(install_plan);
261 FilesystemCopierAction copier_action(false); 261 FilesystemCopierAction copier_action(false);
262 ObjectCollectorAction<InstallPlan> collector_action; 262 ObjectCollectorAction<InstallPlan> collector_action;
263 263
264 BondActions(&copier_action, &collector_action); 264 BondActions(&copier_action, &collector_action);
265 265
266 processor.EnqueueAction(&feeder_action); 266 processor.EnqueueAction(&feeder_action);
267 processor.EnqueueAction(&copier_action); 267 processor.EnqueueAction(&copier_action);
268 processor.EnqueueAction(&collector_action); 268 processor.EnqueueAction(&collector_action);
269 processor.StartProcessing(); 269 processor.StartProcessing();
270 EXPECT_FALSE(processor.IsRunning()); 270 EXPECT_FALSE(processor.IsRunning());
271 EXPECT_TRUE(delegate.ran_); 271 EXPECT_TRUE(delegate.ran_);
272 EXPECT_FALSE(delegate.success_); 272 EXPECT_EQ(kActionCodeError, delegate.code_);
273 } 273 }
274 274
275 TEST_F(FilesystemCopierActionTest, RunAsRootNoSpaceTest) { 275 TEST_F(FilesystemCopierActionTest, RunAsRootNoSpaceTest) {
276 ASSERT_EQ(0, getuid()); 276 ASSERT_EQ(0, getuid());
277 DoTest(true, false, false); 277 DoTest(true, false, false);
278 } 278 }
279 279
280 TEST_F(FilesystemCopierActionTest, RunAsRootTerminateEarlyTest) { 280 TEST_F(FilesystemCopierActionTest, RunAsRootTerminateEarlyTest) {
281 ASSERT_EQ(0, getuid()); 281 ASSERT_EQ(0, getuid());
282 DoTest(false, true, false); 282 DoTest(false, true, false);
283 } 283 }
284 284
285 } // namespace chromeos_update_engine 285 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « filesystem_copier_action.cc ('k') | integration_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698