| OLD | NEW |
| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 bool WriteSparseFile(const string& path, off_t size) { | 85 bool WriteSparseFile(const string& path, off_t size) { |
| 86 int fd = open(path.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0644); | 86 int fd = open(path.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0644); |
| 87 TEST_AND_RETURN_FALSE_ERRNO(fd >= 0); | 87 TEST_AND_RETURN_FALSE_ERRNO(fd >= 0); |
| 88 ScopedFdCloser fd_closer(&fd); | 88 ScopedFdCloser fd_closer(&fd); |
| 89 off_t rc = lseek(fd, size + 1, SEEK_SET); | 89 off_t rc = lseek(fd, size + 1, SEEK_SET); |
| 90 TEST_AND_RETURN_FALSE_ERRNO(rc != static_cast<off_t>(-1)); | 90 TEST_AND_RETURN_FALSE_ERRNO(rc != static_cast<off_t>(-1)); |
| 91 int return_code = ftruncate(fd, size); | 91 int return_code = ftruncate(fd, size); |
| 92 TEST_AND_RETURN_FALSE_ERRNO(return_code == 0); | 92 TEST_AND_RETURN_FALSE_ERRNO(return_code == 0); |
| 93 return true; | 93 return true; |
| 94 } | 94 } |
| 95 } // namespace {} |
| 95 | 96 |
| 96 void DoSmallImageTest(bool full_kernel, bool full_rootfs, bool noop) { | 97 namespace { |
| 98 void DoSmallImageTest(bool full_kernel, bool full_rootfs, bool noop, |
| 99 bool post_sign) { |
| 97 string a_img, b_img; | 100 string a_img, b_img; |
| 98 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); | 101 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); |
| 99 ScopedPathUnlinker a_img_unlinker(a_img); | 102 ScopedPathUnlinker a_img_unlinker(a_img); |
| 100 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); | 103 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); |
| 101 ScopedPathUnlinker b_img_unlinker(b_img); | 104 ScopedPathUnlinker b_img_unlinker(b_img); |
| 102 | 105 |
| 103 CreateExtImageAtPath(a_img, NULL); | 106 CreateExtImageAtPath(a_img, NULL); |
| 104 | 107 |
| 105 int image_size = static_cast<int>(utils::FileSize(a_img)); | 108 int image_size = static_cast<int>(utils::FileSize(a_img)); |
| 106 | 109 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 204 |
| 202 EXPECT_TRUE( | 205 EXPECT_TRUE( |
| 203 DeltaDiffGenerator::GenerateDeltaUpdateFile( | 206 DeltaDiffGenerator::GenerateDeltaUpdateFile( |
| 204 full_rootfs ? "" : a_mnt, | 207 full_rootfs ? "" : a_mnt, |
| 205 full_rootfs ? "" : a_img, | 208 full_rootfs ? "" : a_img, |
| 206 b_mnt, | 209 b_mnt, |
| 207 b_img, | 210 b_img, |
| 208 full_kernel ? "" : old_kernel, | 211 full_kernel ? "" : old_kernel, |
| 209 new_kernel, | 212 new_kernel, |
| 210 delta_path, | 213 delta_path, |
| 211 kUnittestPrivateKeyPath)); | 214 post_sign ? "" : kUnittestPrivateKeyPath)); |
| 215 } |
| 216 |
| 217 if (post_sign) { |
| 218 int signature_size; |
| 219 { |
| 220 const vector<char> data(1, 'x'); |
| 221 vector<char> hash; |
| 222 ASSERT_TRUE(OmahaHashCalculator::RawHashOfData(data, &hash)); |
| 223 vector<char> signature; |
| 224 ASSERT_TRUE(PayloadSigner::SignHash(hash, |
| 225 kUnittestPrivateKeyPath, |
| 226 &signature)); |
| 227 signature_size = signature.size(); |
| 228 } |
| 229 |
| 230 vector<char> hash; |
| 231 ASSERT_TRUE(PayloadSigner::HashPayloadForSigning(delta_path, |
| 232 signature_size, |
| 233 &hash)); |
| 234 vector<char> signature; |
| 235 ASSERT_TRUE(PayloadSigner::SignHash(hash, |
| 236 kUnittestPrivateKeyPath, |
| 237 &signature)); |
| 238 ASSERT_TRUE(PayloadSigner::AddSignatureToPayload(delta_path, |
| 239 signature, |
| 240 delta_path)); |
| 212 } | 241 } |
| 213 | 242 |
| 214 // Read delta into memory. | 243 // Read delta into memory. |
| 215 vector<char> delta; | 244 vector<char> delta; |
| 216 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); | 245 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); |
| 217 | 246 |
| 218 uint64_t manifest_metadata_size; | 247 uint64_t manifest_metadata_size; |
| 219 | 248 |
| 220 // Check the metadata. | 249 // Check the metadata. |
| 221 { | 250 { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 vector<char> expected_new_rootfs_hash; | 373 vector<char> expected_new_rootfs_hash; |
| 345 EXPECT_EQ(image_size, | 374 EXPECT_EQ(image_size, |
| 346 OmahaHashCalculator::RawHashOfFile(b_img, | 375 OmahaHashCalculator::RawHashOfFile(b_img, |
| 347 image_size, | 376 image_size, |
| 348 &expected_new_rootfs_hash)); | 377 &expected_new_rootfs_hash)); |
| 349 EXPECT_TRUE(expected_new_rootfs_hash == new_rootfs_hash); | 378 EXPECT_TRUE(expected_new_rootfs_hash == new_rootfs_hash); |
| 350 } | 379 } |
| 351 } | 380 } |
| 352 | 381 |
| 353 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { | 382 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { |
| 354 DoSmallImageTest(false, false, false); | 383 DoSmallImageTest(false, false, false, false); |
| 355 } | 384 } |
| 356 | 385 |
| 357 TEST(DeltaPerformerTest, RunAsRootFullKernelSmallImageTest) { | 386 TEST(DeltaPerformerTest, RunAsRootFullKernelSmallImageTest) { |
| 358 DoSmallImageTest(true, false, false); | 387 DoSmallImageTest(true, false, false, false); |
| 359 } | 388 } |
| 360 | 389 |
| 361 TEST(DeltaPerformerTest, RunAsRootFullSmallImageTest) { | 390 TEST(DeltaPerformerTest, RunAsRootFullSmallImageTest) { |
| 362 DoSmallImageTest(true, true, false); | 391 DoSmallImageTest(true, true, false, false); |
| 363 } | 392 } |
| 364 | 393 |
| 365 TEST(DeltaPerformerTest, RunAsRootNoopSmallImageTest) { | 394 TEST(DeltaPerformerTest, RunAsRootNoopSmallImageTest) { |
| 366 DoSmallImageTest(false, false, true); | 395 DoSmallImageTest(false, false, true, false); |
| 396 } |
| 397 |
| 398 TEST(DeltaPerformerTest, RunAsRootSmallImagePostSignTest) { |
| 399 DoSmallImageTest(false, false, false, true); |
| 367 } | 400 } |
| 368 | 401 |
| 369 TEST(DeltaPerformerTest, BadDeltaMagicTest) { | 402 TEST(DeltaPerformerTest, BadDeltaMagicTest) { |
| 370 PrefsMock prefs; | 403 PrefsMock prefs; |
| 371 DeltaPerformer performer(&prefs); | 404 DeltaPerformer performer(&prefs); |
| 372 EXPECT_EQ(0, performer.Open("/dev/null", 0, 0)); | 405 EXPECT_EQ(0, performer.Open("/dev/null", 0, 0)); |
| 373 EXPECT_TRUE(performer.OpenKernel("/dev/null")); | 406 EXPECT_TRUE(performer.OpenKernel("/dev/null")); |
| 374 EXPECT_EQ(4, performer.Write("junk", 4)); | 407 EXPECT_EQ(4, performer.Write("junk", 4)); |
| 375 EXPECT_EQ(8, performer.Write("morejunk", 8)); | 408 EXPECT_EQ(8, performer.Write("morejunk", 8)); |
| 376 EXPECT_LT(performer.Write("morejunk", 8), 0); | 409 EXPECT_LT(performer.Write("morejunk", 8), 0); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 387 op.clear_src_extents(); | 420 op.clear_src_extents(); |
| 388 *(op.add_src_extents()) = ExtentForRange(5, 3); | 421 *(op.add_src_extents()) = ExtentForRange(5, 3); |
| 389 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); | 422 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); |
| 390 *(op.add_dst_extents()) = ExtentForRange(20, 6); | 423 *(op.add_dst_extents()) = ExtentForRange(20, 6); |
| 391 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); | 424 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); |
| 392 *(op.add_src_extents()) = ExtentForRange(19, 2); | 425 *(op.add_src_extents()) = ExtentForRange(19, 2); |
| 393 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); | 426 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); |
| 394 } | 427 } |
| 395 | 428 |
| 396 } // namespace chromeos_update_engine | 429 } // namespace chromeos_update_engine |
| OLD | NEW |