| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 } // namespace {} |
| 96 | 96 |
| 97 namespace { | 97 namespace { |
| 98 enum SignatureTest { |
| 99 kSignatureNone, // No payload signing. |
| 100 kSignatureGenerator, // Sign the payload at generation time. |
| 101 kSignatureGenerated, // Sign the payload after it's generated. |
| 102 kSignatureGeneratedShell, // Sign the generated payload through shell cmds. |
| 103 }; |
| 104 |
| 105 size_t GetSignatureSize() { |
| 106 const vector<char> data(1, 'x'); |
| 107 vector<char> hash; |
| 108 EXPECT_TRUE(OmahaHashCalculator::RawHashOfData(data, &hash)); |
| 109 vector<char> signature; |
| 110 EXPECT_TRUE(PayloadSigner::SignHash(hash, |
| 111 kUnittestPrivateKeyPath, |
| 112 &signature)); |
| 113 return signature.size(); |
| 114 } |
| 115 |
| 116 void SignGeneratedPayload(const string& payload_path) { |
| 117 int signature_size = GetSignatureSize(); |
| 118 vector<char> hash; |
| 119 ASSERT_TRUE(PayloadSigner::HashPayloadForSigning(payload_path, |
| 120 signature_size, |
| 121 &hash)); |
| 122 vector<char> signature; |
| 123 ASSERT_TRUE(PayloadSigner::SignHash(hash, |
| 124 kUnittestPrivateKeyPath, |
| 125 &signature)); |
| 126 ASSERT_TRUE(PayloadSigner::AddSignatureToPayload(payload_path, |
| 127 signature, |
| 128 payload_path)); |
| 129 EXPECT_TRUE(PayloadSigner::VerifySignedPayload(payload_path, |
| 130 kUnittestPublicKeyPath)); |
| 131 } |
| 132 |
| 133 void SignGeneratedShellPayload(const string& payload_path) { |
| 134 int signature_size = GetSignatureSize(); |
| 135 string hash_file; |
| 136 ASSERT_TRUE(utils::MakeTempFile("/tmp/hash.XXXXXX", &hash_file, NULL)); |
| 137 ScopedPathUnlinker hash_unlinker(hash_file); |
| 138 |
| 139 ASSERT_EQ(0, |
| 140 System(StringPrintf( |
| 141 "./delta_generator -in_file %s -signature_size %d " |
| 142 "-out_hash_file %s", |
| 143 payload_path.c_str(), |
| 144 signature_size, |
| 145 hash_file.c_str()))); |
| 146 |
| 147 string sig_file; |
| 148 ASSERT_TRUE(utils::MakeTempFile("/tmp/signature.XXXXXX", &sig_file, NULL)); |
| 149 ScopedPathUnlinker sig_unlinker(sig_file); |
| 150 ASSERT_EQ(0, |
| 151 System(StringPrintf( |
| 152 "/usr/bin/openssl rsautl -pkcs -sign -inkey %s -in %s -out %s", |
| 153 kUnittestPrivateKeyPath, |
| 154 hash_file.c_str(), |
| 155 sig_file.c_str()))); |
| 156 ASSERT_EQ(0, |
| 157 System(StringPrintf( |
| 158 "./delta_generator -in_file %s -signature_file %s " |
| 159 "-out_file %s", |
| 160 payload_path.c_str(), |
| 161 sig_file.c_str(), |
| 162 payload_path.c_str()))); |
| 163 ASSERT_EQ(0, |
| 164 System(StringPrintf( |
| 165 "./delta_generator -in_file %s -public_key %s", |
| 166 payload_path.c_str(), |
| 167 kUnittestPublicKeyPath))); |
| 168 } |
| 169 |
| 98 void DoSmallImageTest(bool full_kernel, bool full_rootfs, bool noop, | 170 void DoSmallImageTest(bool full_kernel, bool full_rootfs, bool noop, |
| 99 bool post_sign) { | 171 SignatureTest signature_test) { |
| 100 string a_img, b_img; | 172 string a_img, b_img; |
| 101 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); | 173 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); |
| 102 ScopedPathUnlinker a_img_unlinker(a_img); | 174 ScopedPathUnlinker a_img_unlinker(a_img); |
| 103 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); | 175 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); |
| 104 ScopedPathUnlinker b_img_unlinker(b_img); | 176 ScopedPathUnlinker b_img_unlinker(b_img); |
| 105 | 177 |
| 106 CreateExtImageAtPath(a_img, NULL); | 178 CreateExtImageAtPath(a_img, NULL); |
| 107 | 179 |
| 108 int image_size = static_cast<int>(utils::FileSize(a_img)); | 180 int image_size = static_cast<int>(utils::FileSize(a_img)); |
| 109 | 181 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 new_kernel.c_str(), &new_kernel_data[0], new_kernel_data.size())); | 266 new_kernel.c_str(), &new_kernel_data[0], new_kernel_data.size())); |
| 195 | 267 |
| 196 string delta_path; | 268 string delta_path; |
| 197 EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL)); | 269 EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL)); |
| 198 LOG(INFO) << "delta path: " << delta_path; | 270 LOG(INFO) << "delta path: " << delta_path; |
| 199 ScopedPathUnlinker delta_path_unlinker(delta_path); | 271 ScopedPathUnlinker delta_path_unlinker(delta_path); |
| 200 { | 272 { |
| 201 string a_mnt, b_mnt; | 273 string a_mnt, b_mnt; |
| 202 ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY); | 274 ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY); |
| 203 ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY); | 275 ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY); |
| 204 | 276 const string private_key = |
| 277 signature_test == kSignatureGenerator ? kUnittestPrivateKeyPath : ""; |
| 205 EXPECT_TRUE( | 278 EXPECT_TRUE( |
| 206 DeltaDiffGenerator::GenerateDeltaUpdateFile( | 279 DeltaDiffGenerator::GenerateDeltaUpdateFile( |
| 207 full_rootfs ? "" : a_mnt, | 280 full_rootfs ? "" : a_mnt, |
| 208 full_rootfs ? "" : a_img, | 281 full_rootfs ? "" : a_img, |
| 209 b_mnt, | 282 b_mnt, |
| 210 b_img, | 283 b_img, |
| 211 full_kernel ? "" : old_kernel, | 284 full_kernel ? "" : old_kernel, |
| 212 new_kernel, | 285 new_kernel, |
| 213 delta_path, | 286 delta_path, |
| 214 post_sign ? "" : kUnittestPrivateKeyPath)); | 287 private_key)); |
| 215 } | 288 } |
| 216 | 289 |
| 217 if (post_sign) { | 290 if (signature_test == kSignatureGenerated) { |
| 218 int signature_size; | 291 SignGeneratedPayload(delta_path); |
| 219 { | 292 } else if (signature_test == kSignatureGeneratedShell) { |
| 220 const vector<char> data(1, 'x'); | 293 SignGeneratedShellPayload(delta_path); |
| 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)); | |
| 241 EXPECT_TRUE(PayloadSigner::VerifySignedPayload(delta_path, | |
| 242 kUnittestPublicKeyPath)); | |
| 243 } | 294 } |
| 244 | 295 |
| 245 // Read delta into memory. | 296 // Read delta into memory. |
| 246 vector<char> delta; | 297 vector<char> delta; |
| 247 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); | 298 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); |
| 248 | 299 |
| 249 uint64_t manifest_metadata_size; | 300 uint64_t manifest_metadata_size; |
| 250 | 301 |
| 251 // Check the metadata. | 302 // Check the metadata. |
| 252 { | 303 { |
| 253 LOG(INFO) << "delta size: " << delta.size(); | 304 LOG(INFO) << "delta size: " << delta.size(); |
| 254 DeltaArchiveManifest manifest; | 305 DeltaArchiveManifest manifest; |
| 255 const int kManifestSizeOffset = 12; | 306 const int kManifestSizeOffset = 12; |
| 256 const int kManifestOffset = 20; | 307 const int kManifestOffset = 20; |
| 257 uint64_t manifest_size = 0; | 308 uint64_t manifest_size = 0; |
| 258 memcpy(&manifest_size, &delta[kManifestSizeOffset], sizeof(manifest_size)); | 309 memcpy(&manifest_size, &delta[kManifestSizeOffset], sizeof(manifest_size)); |
| 259 manifest_size = be64toh(manifest_size); | 310 manifest_size = be64toh(manifest_size); |
| 260 LOG(INFO) << "manifest size: " << manifest_size; | 311 LOG(INFO) << "manifest size: " << manifest_size; |
| 261 EXPECT_TRUE(manifest.ParseFromArray(&delta[kManifestOffset], | 312 EXPECT_TRUE(manifest.ParseFromArray(&delta[kManifestOffset], |
| 262 manifest_size)); | 313 manifest_size)); |
| 263 EXPECT_TRUE(manifest.has_signatures_offset()); | |
| 264 manifest_metadata_size = kManifestOffset + manifest_size; | 314 manifest_metadata_size = kManifestOffset + manifest_size; |
| 265 | 315 |
| 266 Signatures sigs_message; | 316 if (signature_test == kSignatureNone) { |
| 267 EXPECT_TRUE(sigs_message.ParseFromArray( | 317 EXPECT_FALSE(manifest.has_signatures_offset()); |
| 268 &delta[manifest_metadata_size + manifest.signatures_offset()], | 318 EXPECT_FALSE(manifest.has_signatures_size()); |
| 269 manifest.signatures_size())); | 319 } else { |
| 270 EXPECT_EQ(1, sigs_message.signatures_size()); | 320 EXPECT_TRUE(manifest.has_signatures_offset()); |
| 271 const Signatures_Signature& signature = sigs_message.signatures(0); | 321 EXPECT_TRUE(manifest.has_signatures_size()); |
| 272 EXPECT_EQ(1, signature.version()); | 322 Signatures sigs_message; |
| 323 EXPECT_TRUE(sigs_message.ParseFromArray( |
| 324 &delta[manifest_metadata_size + manifest.signatures_offset()], |
| 325 manifest.signatures_size())); |
| 326 EXPECT_EQ(1, sigs_message.signatures_size()); |
| 327 const Signatures_Signature& signature = sigs_message.signatures(0); |
| 328 EXPECT_EQ(1, signature.version()); |
| 273 | 329 |
| 274 uint64_t expected_sig_data_length = 0; | 330 uint64_t expected_sig_data_length = 0; |
| 275 EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath, | 331 EXPECT_TRUE(PayloadSigner::SignatureBlobLength( |
| 276 &expected_sig_data_length)); | 332 kUnittestPrivateKeyPath, &expected_sig_data_length)); |
| 277 EXPECT_EQ(expected_sig_data_length, manifest.signatures_size()); | 333 EXPECT_EQ(expected_sig_data_length, manifest.signatures_size()); |
| 278 EXPECT_FALSE(signature.data().empty()); | 334 EXPECT_FALSE(signature.data().empty()); |
| 335 } |
| 279 | 336 |
| 280 if (noop) { | 337 if (noop) { |
| 281 EXPECT_EQ(1, manifest.install_operations_size()); | 338 EXPECT_EQ(1, manifest.install_operations_size()); |
| 282 EXPECT_EQ(1, manifest.kernel_install_operations_size()); | 339 EXPECT_EQ(1, manifest.kernel_install_operations_size()); |
| 283 } | 340 } |
| 284 | 341 |
| 285 if (full_kernel) { | 342 if (full_kernel) { |
| 286 EXPECT_FALSE(manifest.has_old_kernel_info()); | 343 EXPECT_FALSE(manifest.has_old_kernel_info()); |
| 287 } else { | 344 } else { |
| 288 EXPECT_EQ(old_kernel_data.size(), manifest.old_kernel_info().size()); | 345 EXPECT_EQ(old_kernel_data.size(), manifest.old_kernel_info().size()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 307 EXPECT_CALL(prefs, SetInt64(kPrefsManifestMetadataSize, | 364 EXPECT_CALL(prefs, SetInt64(kPrefsManifestMetadataSize, |
| 308 manifest_metadata_size)).WillOnce(Return(true)); | 365 manifest_metadata_size)).WillOnce(Return(true)); |
| 309 EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextOperation, _)) | 366 EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextOperation, _)) |
| 310 .WillRepeatedly(Return(true)); | 367 .WillRepeatedly(Return(true)); |
| 311 EXPECT_CALL(prefs, GetInt64(kPrefsUpdateStateNextOperation, _)) | 368 EXPECT_CALL(prefs, GetInt64(kPrefsUpdateStateNextOperation, _)) |
| 312 .WillOnce(Return(false)); | 369 .WillOnce(Return(false)); |
| 313 EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextDataOffset, _)) | 370 EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextDataOffset, _)) |
| 314 .WillRepeatedly(Return(true)); | 371 .WillRepeatedly(Return(true)); |
| 315 EXPECT_CALL(prefs, SetString(kPrefsUpdateStateSHA256Context, _)) | 372 EXPECT_CALL(prefs, SetString(kPrefsUpdateStateSHA256Context, _)) |
| 316 .WillRepeatedly(Return(true)); | 373 .WillRepeatedly(Return(true)); |
| 317 EXPECT_CALL(prefs, SetString(kPrefsUpdateStateSignedSHA256Context, _)) | 374 if (signature_test != kSignatureNone) { |
| 318 .WillOnce(Return(true)); | 375 EXPECT_CALL(prefs, SetString(kPrefsUpdateStateSignedSHA256Context, _)) |
| 376 .WillOnce(Return(true)); |
| 377 } |
| 319 | 378 |
| 320 // Update the A image in place. | 379 // Update the A image in place. |
| 321 DeltaPerformer performer(&prefs); | 380 DeltaPerformer performer(&prefs); |
| 322 | 381 |
| 323 vector<char> rootfs_hash; | 382 vector<char> rootfs_hash; |
| 324 EXPECT_EQ(image_size, | 383 EXPECT_EQ(image_size, |
| 325 OmahaHashCalculator::RawHashOfFile(a_img, | 384 OmahaHashCalculator::RawHashOfFile(a_img, |
| 326 image_size, | 385 image_size, |
| 327 &rootfs_hash)); | 386 &rootfs_hash)); |
| 328 performer.set_current_rootfs_hash(rootfs_hash); | 387 performer.set_current_rootfs_hash(rootfs_hash); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 346 | 405 |
| 347 CompareFilesByBlock(old_kernel, new_kernel); | 406 CompareFilesByBlock(old_kernel, new_kernel); |
| 348 CompareFilesByBlock(a_img, b_img); | 407 CompareFilesByBlock(a_img, b_img); |
| 349 | 408 |
| 350 vector<char> updated_kernel_partition; | 409 vector<char> updated_kernel_partition; |
| 351 EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition)); | 410 EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition)); |
| 352 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string, | 411 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string, |
| 353 strlen(new_data_string))); | 412 strlen(new_data_string))); |
| 354 | 413 |
| 355 EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath)); | 414 EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath)); |
| 356 EXPECT_TRUE(performer.VerifyPayload( | 415 EXPECT_EQ(signature_test != kSignatureNone, |
| 357 kUnittestPublicKeyPath, | 416 performer.VerifyPayload( |
| 358 OmahaHashCalculator::OmahaHashOfData(delta), | 417 kUnittestPublicKeyPath, |
| 359 delta.size())); | 418 OmahaHashCalculator::OmahaHashOfData(delta), |
| 419 delta.size())); |
| 360 | 420 |
| 361 uint64_t new_kernel_size; | 421 uint64_t new_kernel_size; |
| 362 vector<char> new_kernel_hash; | 422 vector<char> new_kernel_hash; |
| 363 uint64_t new_rootfs_size; | 423 uint64_t new_rootfs_size; |
| 364 vector<char> new_rootfs_hash; | 424 vector<char> new_rootfs_hash; |
| 365 EXPECT_TRUE(performer.GetNewPartitionInfo(&new_kernel_size, | 425 EXPECT_TRUE(performer.GetNewPartitionInfo(&new_kernel_size, |
| 366 &new_kernel_hash, | 426 &new_kernel_hash, |
| 367 &new_rootfs_size, | 427 &new_rootfs_size, |
| 368 &new_rootfs_hash)); | 428 &new_rootfs_hash)); |
| 369 EXPECT_EQ(4096, new_kernel_size); | 429 EXPECT_EQ(4096, new_kernel_size); |
| 370 vector<char> expected_new_kernel_hash; | 430 vector<char> expected_new_kernel_hash; |
| 371 EXPECT_TRUE(OmahaHashCalculator::RawHashOfData(new_kernel_data, | 431 EXPECT_TRUE(OmahaHashCalculator::RawHashOfData(new_kernel_data, |
| 372 &expected_new_kernel_hash)); | 432 &expected_new_kernel_hash)); |
| 373 EXPECT_TRUE(expected_new_kernel_hash == new_kernel_hash); | 433 EXPECT_TRUE(expected_new_kernel_hash == new_kernel_hash); |
| 374 EXPECT_EQ(image_size, new_rootfs_size); | 434 EXPECT_EQ(image_size, new_rootfs_size); |
| 375 vector<char> expected_new_rootfs_hash; | 435 vector<char> expected_new_rootfs_hash; |
| 376 EXPECT_EQ(image_size, | 436 EXPECT_EQ(image_size, |
| 377 OmahaHashCalculator::RawHashOfFile(b_img, | 437 OmahaHashCalculator::RawHashOfFile(b_img, |
| 378 image_size, | 438 image_size, |
| 379 &expected_new_rootfs_hash)); | 439 &expected_new_rootfs_hash)); |
| 380 EXPECT_TRUE(expected_new_rootfs_hash == new_rootfs_hash); | 440 EXPECT_TRUE(expected_new_rootfs_hash == new_rootfs_hash); |
| 381 } | 441 } |
| 382 } | 442 } |
| 383 | 443 |
| 384 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { | 444 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { |
| 385 DoSmallImageTest(false, false, false, false); | 445 DoSmallImageTest(false, false, false, kSignatureGenerator); |
| 386 } | 446 } |
| 387 | 447 |
| 388 TEST(DeltaPerformerTest, RunAsRootFullKernelSmallImageTest) { | 448 TEST(DeltaPerformerTest, RunAsRootFullKernelSmallImageTest) { |
| 389 DoSmallImageTest(true, false, false, false); | 449 DoSmallImageTest(true, false, false, kSignatureGenerator); |
| 390 } | 450 } |
| 391 | 451 |
| 392 TEST(DeltaPerformerTest, RunAsRootFullSmallImageTest) { | 452 TEST(DeltaPerformerTest, RunAsRootFullSmallImageTest) { |
| 393 DoSmallImageTest(true, true, false, false); | 453 DoSmallImageTest(true, true, false, kSignatureGenerator); |
| 394 } | 454 } |
| 395 | 455 |
| 396 TEST(DeltaPerformerTest, RunAsRootNoopSmallImageTest) { | 456 TEST(DeltaPerformerTest, RunAsRootNoopSmallImageTest) { |
| 397 DoSmallImageTest(false, false, true, false); | 457 DoSmallImageTest(false, false, true, kSignatureGenerator); |
| 398 } | 458 } |
| 399 | 459 |
| 400 TEST(DeltaPerformerTest, RunAsRootSmallImagePostSignTest) { | 460 TEST(DeltaPerformerTest, RunAsRootSmallImageSignNoneTest) { |
| 401 DoSmallImageTest(false, false, false, true); | 461 DoSmallImageTest(false, false, false, kSignatureNone); |
| 462 } |
| 463 |
| 464 TEST(DeltaPerformerTest, RunAsRootSmallImageSignGeneratedTest) { |
| 465 DoSmallImageTest(false, false, false, kSignatureGenerated); |
| 466 } |
| 467 |
| 468 TEST(DeltaPerformerTest, RunAsRootSmallImageSignGeneratedShellTest) { |
| 469 DoSmallImageTest(false, false, false, kSignatureGeneratedShell); |
| 402 } | 470 } |
| 403 | 471 |
| 404 TEST(DeltaPerformerTest, BadDeltaMagicTest) { | 472 TEST(DeltaPerformerTest, BadDeltaMagicTest) { |
| 405 PrefsMock prefs; | 473 PrefsMock prefs; |
| 406 DeltaPerformer performer(&prefs); | 474 DeltaPerformer performer(&prefs); |
| 407 EXPECT_EQ(0, performer.Open("/dev/null", 0, 0)); | 475 EXPECT_EQ(0, performer.Open("/dev/null", 0, 0)); |
| 408 EXPECT_TRUE(performer.OpenKernel("/dev/null")); | 476 EXPECT_TRUE(performer.OpenKernel("/dev/null")); |
| 409 EXPECT_EQ(4, performer.Write("junk", 4)); | 477 EXPECT_EQ(4, performer.Write("junk", 4)); |
| 410 EXPECT_EQ(8, performer.Write("morejunk", 8)); | 478 EXPECT_EQ(8, performer.Write("morejunk", 8)); |
| 411 EXPECT_LT(performer.Write("morejunk", 8), 0); | 479 EXPECT_LT(performer.Write("morejunk", 8), 0); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 422 op.clear_src_extents(); | 490 op.clear_src_extents(); |
| 423 *(op.add_src_extents()) = ExtentForRange(5, 3); | 491 *(op.add_src_extents()) = ExtentForRange(5, 3); |
| 424 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); | 492 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); |
| 425 *(op.add_dst_extents()) = ExtentForRange(20, 6); | 493 *(op.add_dst_extents()) = ExtentForRange(20, 6); |
| 426 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); | 494 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); |
| 427 *(op.add_src_extents()) = ExtentForRange(19, 2); | 495 *(op.add_src_extents()) = ExtentForRange(19, 2); |
| 428 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); | 496 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); |
| 429 } | 497 } |
| 430 | 498 |
| 431 } // namespace chromeos_update_engine | 499 } // namespace chromeos_update_engine |
| OLD | NEW |