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

Side by Side Diff: download_action_unittest.cc

Issue 3499004: AU: Verify that the actual download size matches the size reported by Omaha. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: extra ; Created 10 years, 3 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 | « download_action.cc ('k') | no next file » | 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) 2009 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium OS 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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 #include <glib.h> 7 #include <glib.h>
8 #include <gmock/gmock.h> 8 #include <gmock/gmock.h>
9 #include <gtest/gtest.h> 9 #include <gtest/gtest.h>
10 #include "update_engine/action_pipe.h" 10 #include "update_engine/action_pipe.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 }; 78 };
79 79
80 gboolean StartProcessorInRunLoop(gpointer data) { 80 gboolean StartProcessorInRunLoop(gpointer data) {
81 ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 81 ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data);
82 processor->StartProcessing(); 82 processor->StartProcessing();
83 return FALSE; 83 return FALSE;
84 } 84 }
85 85
86 void TestWithData(const vector<char>& data, 86 void TestWithData(const vector<char>& data,
87 bool hash_test, 87 bool hash_test,
88 bool size_test,
88 bool use_download_delegate) { 89 bool use_download_delegate) {
89 GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 90 GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE);
90 91
91 // TODO(adlr): see if we need a different file for build bots 92 // TODO(adlr): see if we need a different file for build bots
92 ScopedTempFile output_temp_file; 93 ScopedTempFile output_temp_file;
93 DirectFileWriter writer; 94 DirectFileWriter writer;
94 95
95 // takes ownership of passed in HttpFetcher 96 // takes ownership of passed in HttpFetcher
96 string hash = hash_test ? 97 string hash = hash_test ?
97 OmahaHashCalculator::OmahaHashOfString("random string") : 98 OmahaHashCalculator::OmahaHashOfString("random string") :
98 OmahaHashCalculator::OmahaHashOfData(data); 99 OmahaHashCalculator::OmahaHashOfData(data);
100 uint64_t size = data.size() + (size_test ? 1 : 0);
99 InstallPlan install_plan(true, 101 InstallPlan install_plan(true,
100 "", 102 "",
101 0, 103 size,
102 hash, 104 hash,
103 output_temp_file.GetPath(), 105 output_temp_file.GetPath(),
104 ""); 106 "");
105 ObjectFeederAction<InstallPlan> feeder_action; 107 ObjectFeederAction<InstallPlan> feeder_action;
106 feeder_action.set_obj(install_plan); 108 feeder_action.set_obj(install_plan);
107 DownloadAction download_action(new MockHttpFetcher(&data[0], 109 DownloadAction download_action(new MockHttpFetcher(&data[0],
108 data.size())); 110 data.size()));
109 download_action.SetTestFileWriter(&writer); 111 download_action.SetTestFileWriter(&writer);
110 BondActions(&feeder_action, &download_action); 112 BondActions(&feeder_action, &download_action);
111 DownloadActionDelegateMock download_delegate; 113 DownloadActionDelegateMock download_delegate;
112 if (use_download_delegate) { 114 if (use_download_delegate) {
113 InSequence s; 115 InSequence s;
114 download_action.set_delegate(&download_delegate); 116 download_action.set_delegate(&download_delegate);
115 EXPECT_CALL(download_delegate, SetDownloadStatus(true)).Times(1); 117 EXPECT_CALL(download_delegate, SetDownloadStatus(true)).Times(1);
116 EXPECT_CALL(download_delegate, BytesReceived(_, _)).Times(AtLeast(1)); 118 EXPECT_CALL(download_delegate, BytesReceived(_, _)).Times(AtLeast(1));
117 EXPECT_CALL(download_delegate, SetDownloadStatus(false)).Times(1); 119 EXPECT_CALL(download_delegate, SetDownloadStatus(false)).Times(1);
118 } 120 }
119 DownloadActionTestProcessorDelegate delegate( 121 ActionExitCode expected_code = kActionCodeSuccess;
120 hash_test ? kActionCodeDownloadHashMismatchError : kActionCodeSuccess); 122 if (hash_test)
123 expected_code = kActionCodeDownloadHashMismatchError;
124 else if (size_test)
125 expected_code = kActionCodeDownloadSizeMismatchError;
126 DownloadActionTestProcessorDelegate delegate(expected_code);
121 delegate.loop_ = loop; 127 delegate.loop_ = loop;
122 delegate.expected_data_ = data; 128 delegate.expected_data_ = data;
123 delegate.path_ = output_temp_file.GetPath(); 129 delegate.path_ = output_temp_file.GetPath();
124 ActionProcessor processor; 130 ActionProcessor processor;
125 processor.set_delegate(&delegate); 131 processor.set_delegate(&delegate);
126 processor.EnqueueAction(&feeder_action); 132 processor.EnqueueAction(&feeder_action);
127 processor.EnqueueAction(&download_action); 133 processor.EnqueueAction(&download_action);
128 134
129 g_timeout_add(0, &StartProcessorInRunLoop, &processor); 135 g_timeout_add(0, &StartProcessorInRunLoop, &processor);
130 g_main_loop_run(loop); 136 g_main_loop_run(loop);
131 g_main_loop_unref(loop); 137 g_main_loop_unref(loop);
132 } 138 }
133 } // namespace {} 139 } // namespace {}
134 140
135 TEST(DownloadActionTest, SimpleTest) { 141 TEST(DownloadActionTest, SimpleTest) {
136 vector<char> small; 142 vector<char> small;
137 const char* foo = "foo"; 143 const char* foo = "foo";
138 small.insert(small.end(), foo, foo + strlen(foo)); 144 small.insert(small.end(), foo, foo + strlen(foo));
139 TestWithData(small, false, true); 145 TestWithData(small,
146 false, // hash_test
147 false, // size_test
148 true); // use_download_delegate
140 } 149 }
141 150
142 TEST(DownloadActionTest, LargeTest) { 151 TEST(DownloadActionTest, LargeTest) {
143 vector<char> big(5 * kMockHttpFetcherChunkSize); 152 vector<char> big(5 * kMockHttpFetcherChunkSize);
144 char c = '0'; 153 char c = '0';
145 for (unsigned int i = 0; i < big.size(); i++) { 154 for (unsigned int i = 0; i < big.size(); i++) {
146 big[i] = c; 155 big[i] = c;
147 if ('9' == c) 156 if ('9' == c)
148 c = '0'; 157 c = '0';
149 else 158 else
150 c++; 159 c++;
151 } 160 }
152 TestWithData(big, false, true); 161 TestWithData(big,
162 false, // hash_test
163 false, // size_test
164 true); // use_download_delegate
153 } 165 }
154 166
155 TEST(DownloadActionTest, BadHashTest) { 167 TEST(DownloadActionTest, BadHashTest) {
156 vector<char> small; 168 vector<char> small;
157 const char* foo = "foo"; 169 const char* foo = "foo";
158 small.insert(small.end(), foo, foo + strlen(foo)); 170 small.insert(small.end(), foo, foo + strlen(foo));
159 TestWithData(small, true, true); 171 TestWithData(small,
172 true, // hash_test
173 false, // size_test
174 true); // use_download_delegate
175 }
176
177 TEST(DownloadActionTest, BadSizeTest) {
178 const char* something = "something";
179 vector<char> small(something, something + strlen(something));
180 TestWithData(small,
181 false, // hash_test
182 true, // size_test
183 true); // use_download_delegate
160 } 184 }
161 185
162 TEST(DownloadActionTest, NoDownloadDelegateTest) { 186 TEST(DownloadActionTest, NoDownloadDelegateTest) {
163 vector<char> small; 187 vector<char> small;
164 const char* foo = "foofoo"; 188 const char* foo = "foofoo";
165 small.insert(small.end(), foo, foo + strlen(foo)); 189 small.insert(small.end(), foo, foo + strlen(foo));
166 TestWithData(small, false, false); 190 TestWithData(small,
191 false, // hash_test
192 false, // size_test
193 false); // use_download_delegate
167 } 194 }
168 195
169 namespace { 196 namespace {
170 class TerminateEarlyTestProcessorDelegate : public ActionProcessorDelegate { 197 class TerminateEarlyTestProcessorDelegate : public ActionProcessorDelegate {
171 public: 198 public:
172 void ProcessingStopped(const ActionProcessor* processor) { 199 void ProcessingStopped(const ActionProcessor* processor) {
173 ASSERT_TRUE(loop_); 200 ASSERT_TRUE(loop_);
174 g_main_loop_quit(loop_); 201 g_main_loop_quit(loop_);
175 } 202 }
176 GMainLoop *loop_; 203 GMainLoop *loop_;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 } 314 }
288 315
289 TEST(DownloadActionTest, PassObjectOutTest) { 316 TEST(DownloadActionTest, PassObjectOutTest) {
290 GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 317 GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE);
291 318
292 DirectFileWriter writer; 319 DirectFileWriter writer;
293 320
294 // takes ownership of passed in HttpFetcher 321 // takes ownership of passed in HttpFetcher
295 InstallPlan install_plan(true, 322 InstallPlan install_plan(true,
296 "", 323 "",
297 0, 324 1,
298 OmahaHashCalculator::OmahaHashOfString("x"), 325 OmahaHashCalculator::OmahaHashOfString("x"),
299 "/dev/null", 326 "/dev/null",
300 "/dev/null"); 327 "/dev/null");
301 ObjectFeederAction<InstallPlan> feeder_action; 328 ObjectFeederAction<InstallPlan> feeder_action;
302 feeder_action.set_obj(install_plan); 329 feeder_action.set_obj(install_plan);
303 DownloadAction download_action(new MockHttpFetcher("x", 1)); 330 DownloadAction download_action(new MockHttpFetcher("x", 1));
304 download_action.SetTestFileWriter(&writer); 331 download_action.SetTestFileWriter(&writer);
305 332
306 DownloadActionTestAction test_action; 333 DownloadActionTestAction test_action;
307 test_action.expected_input_object_ = install_plan; 334 test_action.expected_input_object_ = install_plan;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 ActionProcessor processor; 368 ActionProcessor processor;
342 processor.EnqueueAction(&feeder_action); 369 processor.EnqueueAction(&feeder_action);
343 processor.EnqueueAction(&download_action); 370 processor.EnqueueAction(&download_action);
344 processor.StartProcessing(); 371 processor.StartProcessing();
345 ASSERT_FALSE(processor.IsRunning()); 372 ASSERT_FALSE(processor.IsRunning());
346 373
347 g_main_loop_unref(loop); 374 g_main_loop_unref(loop);
348 } 375 }
349 376
350 } // namespace chromeos_update_engine 377 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « download_action.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698