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

Side by Side Diff: delta_performer_unittest.cc

Issue 3748001: AU: Don't send rootfs hashes along with the delta payload. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: rebase Created 10 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 | Annotate | Revision Log
« no previous file with comments | « delta_diff_generator.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 <sys/mount.h> 5 #include <sys/mount.h>
6 #include <inttypes.h> 6 #include <inttypes.h>
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { 116 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) {
117 string a_img, b_img; 117 string a_img, b_img;
118 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); 118 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL));
119 ScopedPathUnlinker a_img_unlinker(a_img); 119 ScopedPathUnlinker a_img_unlinker(a_img);
120 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); 120 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL));
121 ScopedPathUnlinker b_img_unlinker(b_img); 121 ScopedPathUnlinker b_img_unlinker(b_img);
122 122
123 CreateExtImageAtPath(a_img, NULL); 123 CreateExtImageAtPath(a_img, NULL);
124 CreateExtImageAtPath(b_img, NULL); 124 CreateExtImageAtPath(b_img, NULL);
125 125
126 int image_size = static_cast<int>(utils::FileSize(a_img));
127
128 // Extend the "partitions" holding the file system a bit.
129 EXPECT_EQ(0, System(base::StringPrintf(
130 "dd if=/dev/zero of=%s seek=%d bs=1 count=1",
131 a_img.c_str(),
132 image_size + 1024 * 1024 - 1)));
133 EXPECT_EQ(0, System(base::StringPrintf(
134 "dd if=/dev/zero of=%s seek=%d bs=1 count=1",
135 b_img.c_str(),
136 image_size + 1024 * 1024 - 1)));
137 EXPECT_EQ(image_size + 1024 * 1024, utils::FileSize(a_img));
138 EXPECT_EQ(image_size + 1024 * 1024, utils::FileSize(b_img));
139
126 // Make some changes to the A image. 140 // Make some changes to the A image.
127 { 141 {
128 string a_mnt; 142 string a_mnt;
129 ScopedLoopMounter b_mounter(a_img, &a_mnt, 0); 143 ScopedLoopMounter b_mounter(a_img, &a_mnt, 0);
130 144
131 EXPECT_TRUE(utils::WriteFile(StringPrintf("%s/hardtocompress", 145 EXPECT_TRUE(utils::WriteFile(StringPrintf("%s/hardtocompress",
132 a_mnt.c_str()).c_str(), 146 a_mnt.c_str()).c_str(),
133 reinterpret_cast<const char*>(kRandomString), 147 reinterpret_cast<const char*>(kRandomString),
134 sizeof(kRandomString) - 1)); 148 sizeof(kRandomString) - 1));
135 // Write 1 MiB of 0xff to try to catch the case where writing a bsdiff 149 // Write 1 MiB of 0xff to try to catch the case where writing a bsdiff
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 EXPECT_EQ(1, signature.version()); 253 EXPECT_EQ(1, signature.version());
240 254
241 uint64_t expected_sig_data_length = 0; 255 uint64_t expected_sig_data_length = 0;
242 EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath, 256 EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath,
243 &expected_sig_data_length)); 257 &expected_sig_data_length));
244 EXPECT_EQ(expected_sig_data_length, manifest.signatures_size()); 258 EXPECT_EQ(expected_sig_data_length, manifest.signatures_size());
245 EXPECT_FALSE(signature.data().empty()); 259 EXPECT_FALSE(signature.data().empty());
246 260
247 EXPECT_EQ(old_kernel_data.size(), manifest.old_kernel_info().size()); 261 EXPECT_EQ(old_kernel_data.size(), manifest.old_kernel_info().size());
248 EXPECT_EQ(new_kernel_data.size(), manifest.new_kernel_info().size()); 262 EXPECT_EQ(new_kernel_data.size(), manifest.new_kernel_info().size());
249 EXPECT_EQ(utils::FileSize(a_img), manifest.old_rootfs_info().size()); 263 EXPECT_EQ(image_size, manifest.old_rootfs_info().size());
250 EXPECT_EQ(utils::FileSize(b_img), manifest.new_rootfs_info().size()); 264 EXPECT_EQ(image_size, manifest.new_rootfs_info().size());
251 265
252 EXPECT_FALSE(manifest.old_kernel_info().hash().empty()); 266 EXPECT_FALSE(manifest.old_kernel_info().hash().empty());
253 EXPECT_FALSE(manifest.new_kernel_info().hash().empty()); 267 EXPECT_FALSE(manifest.new_kernel_info().hash().empty());
254 EXPECT_FALSE(manifest.old_rootfs_info().hash().empty()); 268 EXPECT_FALSE(manifest.old_rootfs_info().hash().empty());
255 EXPECT_FALSE(manifest.new_rootfs_info().hash().empty()); 269 EXPECT_FALSE(manifest.new_rootfs_info().hash().empty());
256 } 270 }
257 271
258 PrefsMock prefs; 272 PrefsMock prefs;
259 EXPECT_CALL(prefs, SetInt64(kPrefsManifestMetadataSize, 273 EXPECT_CALL(prefs, SetInt64(kPrefsManifestMetadataSize,
260 manifest_metadata_size)).WillOnce(Return(true)); 274 manifest_metadata_size)).WillOnce(Return(true));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 delta.size())); 314 delta.size()));
301 EXPECT_TRUE(performer.VerifyAppliedUpdate(a_img, old_kernel)); 315 EXPECT_TRUE(performer.VerifyAppliedUpdate(a_img, old_kernel));
302 } 316 }
303 317
304 TEST(DeltaPerformerTest, NewFullUpdateTest) { 318 TEST(DeltaPerformerTest, NewFullUpdateTest) {
305 vector<char> new_root(20 * 1024 * 1024); 319 vector<char> new_root(20 * 1024 * 1024);
306 vector<char> new_kern(16 * 1024 * 1024); 320 vector<char> new_kern(16 * 1024 * 1024);
307 const off_t kChunkSize = 128 * 1024; 321 const off_t kChunkSize = 128 * 1024;
308 FillWithData(&new_root); 322 FillWithData(&new_root);
309 FillWithData(&new_kern); 323 FillWithData(&new_kern);
324 // Assume hashes take 2 MiB beyond the rootfs.
325 off_t new_rootfs_size = new_root.size() - 2 * 1024 * 1024;
310 326
311 string new_root_path; 327 string new_root_path;
312 EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_R.XXXXXX", 328 EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_R.XXXXXX",
313 &new_root_path, 329 &new_root_path,
314 NULL)); 330 NULL));
315 ScopedPathUnlinker new_root_path_unlinker(new_root_path); 331 ScopedPathUnlinker new_root_path_unlinker(new_root_path);
316 EXPECT_TRUE(WriteFileVector(new_root_path, new_root)); 332 EXPECT_TRUE(WriteFileVector(new_root_path, new_root));
317 333
318 string new_kern_path; 334 string new_kern_path;
319 EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_K.XXXXXX", 335 EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_K.XXXXXX",
(...skipping 12 matching lines...) Expand all
332 348
333 off_t out_blobs_length = 0; 349 off_t out_blobs_length = 0;
334 350
335 Graph graph; 351 Graph graph;
336 vector<DeltaArchiveManifest_InstallOperation> kernel_ops; 352 vector<DeltaArchiveManifest_InstallOperation> kernel_ops;
337 vector<Vertex::Index> final_order; 353 vector<Vertex::Index> final_order;
338 354
339 EXPECT_TRUE(DeltaDiffGenerator::ReadFullUpdateFromDisk(&graph, 355 EXPECT_TRUE(DeltaDiffGenerator::ReadFullUpdateFromDisk(&graph,
340 new_kern_path, 356 new_kern_path,
341 new_root_path, 357 new_root_path,
358 new_rootfs_size,
342 out_blobs_fd, 359 out_blobs_fd,
343 &out_blobs_length, 360 &out_blobs_length,
344 kChunkSize, 361 kChunkSize,
345 &kernel_ops, 362 &kernel_ops,
346 &final_order)); 363 &final_order));
347 EXPECT_EQ(new_root.size() / kChunkSize, graph.size()); 364 EXPECT_EQ(new_rootfs_size / kChunkSize, graph.size());
348 EXPECT_EQ(new_root.size() / kChunkSize, final_order.size()); 365 EXPECT_EQ(new_rootfs_size / kChunkSize, final_order.size());
349 EXPECT_EQ(new_kern.size() / kChunkSize, kernel_ops.size()); 366 EXPECT_EQ(new_kern.size() / kChunkSize, kernel_ops.size());
350 for (size_t i = 0; i < (new_root.size() / kChunkSize); ++i) { 367 for (off_t i = 0; i < (new_rootfs_size / kChunkSize); ++i) {
351 EXPECT_EQ(i, final_order[i]); 368 EXPECT_EQ(i, final_order[i]);
352 EXPECT_EQ(1, graph[i].op.dst_extents_size()); 369 EXPECT_EQ(1, graph[i].op.dst_extents_size());
353 EXPECT_EQ(i * kChunkSize / kBlockSize, 370 EXPECT_EQ(i * kChunkSize / kBlockSize,
354 graph[i].op.dst_extents(0).start_block()) << "i = " << i; 371 graph[i].op.dst_extents(0).start_block()) << "i = " << i;
355 EXPECT_EQ(kChunkSize / kBlockSize, 372 EXPECT_EQ(kChunkSize / kBlockSize,
356 graph[i].op.dst_extents(0).num_blocks()); 373 graph[i].op.dst_extents(0).num_blocks());
357 if (graph[i].op.type() != 374 if (graph[i].op.type() !=
358 DeltaArchiveManifest_InstallOperation_Type_REPLACE) { 375 DeltaArchiveManifest_InstallOperation_Type_REPLACE) {
359 EXPECT_EQ(DeltaArchiveManifest_InstallOperation_Type_REPLACE_BZ, 376 EXPECT_EQ(DeltaArchiveManifest_InstallOperation_Type_REPLACE_BZ,
360 graph[i].op.type()); 377 graph[i].op.type());
(...skipping 11 matching lines...) Expand all
372 op.clear_src_extents(); 389 op.clear_src_extents();
373 *(op.add_src_extents()) = ExtentForRange(5, 3); 390 *(op.add_src_extents()) = ExtentForRange(5, 3);
374 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); 391 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op));
375 *(op.add_dst_extents()) = ExtentForRange(20, 6); 392 *(op.add_dst_extents()) = ExtentForRange(20, 6);
376 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); 393 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op));
377 *(op.add_src_extents()) = ExtentForRange(19, 2); 394 *(op.add_src_extents()) = ExtentForRange(19, 2);
378 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); 395 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op));
379 } 396 }
380 397
381 } // namespace chromeos_update_engine 398 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « delta_diff_generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698