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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 bool WriteSparseFile(const string& path, off_t size) { | 104 bool WriteSparseFile(const string& path, off_t size) { |
105 int fd = open(path.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0644); | 105 int fd = open(path.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0644); |
106 TEST_AND_RETURN_FALSE_ERRNO(fd >= 0); | 106 TEST_AND_RETURN_FALSE_ERRNO(fd >= 0); |
107 ScopedFdCloser fd_closer(&fd); | 107 ScopedFdCloser fd_closer(&fd); |
108 off_t rc = lseek(fd, size + 1, SEEK_SET); | 108 off_t rc = lseek(fd, size + 1, SEEK_SET); |
109 TEST_AND_RETURN_FALSE_ERRNO(rc != static_cast<off_t>(-1)); | 109 TEST_AND_RETURN_FALSE_ERRNO(rc != static_cast<off_t>(-1)); |
110 int return_code = ftruncate(fd, size); | 110 int return_code = ftruncate(fd, size); |
111 TEST_AND_RETURN_FALSE_ERRNO(return_code == 0); | 111 TEST_AND_RETURN_FALSE_ERRNO(return_code == 0); |
112 return true; | 112 return true; |
113 } | 113 } |
114 } | |
115 | 114 |
116 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { | 115 void DoSmallImageTest(bool full_kernel) { |
117 string a_img, b_img; | 116 string a_img, b_img; |
118 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); | 117 EXPECT_TRUE(utils::MakeTempFile("/tmp/a_img.XXXXXX", &a_img, NULL)); |
119 ScopedPathUnlinker a_img_unlinker(a_img); | 118 ScopedPathUnlinker a_img_unlinker(a_img); |
120 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); | 119 EXPECT_TRUE(utils::MakeTempFile("/tmp/b_img.XXXXXX", &b_img, NULL)); |
121 ScopedPathUnlinker b_img_unlinker(b_img); | 120 ScopedPathUnlinker b_img_unlinker(b_img); |
122 | 121 |
123 CreateExtImageAtPath(a_img, NULL); | 122 CreateExtImageAtPath(a_img, NULL); |
124 CreateExtImageAtPath(b_img, NULL); | 123 CreateExtImageAtPath(b_img, NULL); |
125 | 124 |
126 int image_size = static_cast<int>(utils::FileSize(a_img)); | 125 int image_size = static_cast<int>(utils::FileSize(a_img)); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 string delta_path; | 205 string delta_path; |
207 EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL)); | 206 EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL)); |
208 LOG(INFO) << "delta path: " << delta_path; | 207 LOG(INFO) << "delta path: " << delta_path; |
209 ScopedPathUnlinker delta_path_unlinker(delta_path); | 208 ScopedPathUnlinker delta_path_unlinker(delta_path); |
210 { | 209 { |
211 string a_mnt, b_mnt; | 210 string a_mnt, b_mnt; |
212 ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY); | 211 ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY); |
213 ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY); | 212 ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY); |
214 | 213 |
215 EXPECT_TRUE( | 214 EXPECT_TRUE( |
216 DeltaDiffGenerator::GenerateDeltaUpdateFile(a_mnt, | 215 DeltaDiffGenerator::GenerateDeltaUpdateFile( |
217 a_img, | 216 a_mnt, |
218 b_mnt, | 217 a_img, |
219 b_img, | 218 b_mnt, |
220 old_kernel, | 219 b_img, |
221 new_kernel, | 220 full_kernel ? "" : old_kernel, |
222 delta_path, | 221 new_kernel, |
223 kUnittestPrivateKeyPath)); | 222 delta_path, |
| 223 kUnittestPrivateKeyPath)); |
224 } | 224 } |
225 | 225 |
226 // Read delta into memory. | 226 // Read delta into memory. |
227 vector<char> delta; | 227 vector<char> delta; |
228 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); | 228 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); |
229 | 229 |
230 uint64_t manifest_metadata_size; | 230 uint64_t manifest_metadata_size; |
231 | 231 |
232 // Check the metadata. | 232 // Check the metadata. |
233 { | 233 { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string, | 314 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string, |
315 strlen(new_data_string))); | 315 strlen(new_data_string))); |
316 | 316 |
317 EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath)); | 317 EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath)); |
318 EXPECT_TRUE(performer.VerifyPayload( | 318 EXPECT_TRUE(performer.VerifyPayload( |
319 kUnittestPublicKeyPath, | 319 kUnittestPublicKeyPath, |
320 OmahaHashCalculator::OmahaHashOfData(delta), | 320 OmahaHashCalculator::OmahaHashOfData(delta), |
321 delta.size())); | 321 delta.size())); |
322 EXPECT_TRUE(performer.VerifyAppliedUpdate(a_img, old_kernel)); | 322 EXPECT_TRUE(performer.VerifyAppliedUpdate(a_img, old_kernel)); |
323 } | 323 } |
| 324 } |
| 325 |
| 326 TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { |
| 327 DoSmallImageTest(false); |
| 328 } |
| 329 |
| 330 TEST(DeltaPerformerTest, RunAsRootFullKernelSmallImageTest) { |
| 331 DoSmallImageTest(true); |
| 332 } |
324 | 333 |
325 TEST(DeltaPerformerTest, NewFullUpdateTest) { | 334 TEST(DeltaPerformerTest, NewFullUpdateTest) { |
326 vector<char> new_root(20 * 1024 * 1024); | 335 vector<char> new_root(20 * 1024 * 1024); |
327 vector<char> new_kern(16 * 1024 * 1024); | 336 vector<char> new_kern(16 * 1024 * 1024); |
328 const off_t kChunkSize = 128 * 1024; | 337 const off_t kChunkSize = 128 * 1024; |
329 FillWithData(&new_root); | 338 FillWithData(&new_root); |
330 FillWithData(&new_kern); | 339 FillWithData(&new_kern); |
331 // Assume hashes take 2 MiB beyond the rootfs. | 340 // Assume hashes take 2 MiB beyond the rootfs. |
332 off_t new_rootfs_size = new_root.size() - 2 * 1024 * 1024; | 341 off_t new_rootfs_size = new_root.size() - 2 * 1024 * 1024; |
333 | 342 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 op.clear_src_extents(); | 405 op.clear_src_extents(); |
397 *(op.add_src_extents()) = ExtentForRange(5, 3); | 406 *(op.add_src_extents()) = ExtentForRange(5, 3); |
398 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); | 407 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); |
399 *(op.add_dst_extents()) = ExtentForRange(20, 6); | 408 *(op.add_dst_extents()) = ExtentForRange(20, 6); |
400 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); | 409 EXPECT_TRUE(DeltaPerformer::IsIdempotentOperation(op)); |
401 *(op.add_src_extents()) = ExtentForRange(19, 2); | 410 *(op.add_src_extents()) = ExtentForRange(19, 2); |
402 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); | 411 EXPECT_FALSE(DeltaPerformer::IsIdempotentOperation(op)); |
403 } | 412 } |
404 | 413 |
405 } // namespace chromeos_update_engine | 414 } // namespace chromeos_update_engine |
OLD | NEW |