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

Side by Side Diff: delta_performer_unittest.cc

Issue 3521016: AU: Start checkpointing update progress. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: address review comments 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_performer.cc ('k') | download_action.h » ('j') | 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>
11 11
12 #include <base/scoped_ptr.h>
13 #include <base/string_util.h>
12 #include <google/protobuf/repeated_field.h> 14 #include <google/protobuf/repeated_field.h>
13 #include <gtest/gtest.h> 15 #include <gtest/gtest.h>
14 16
15 #include "base/scoped_ptr.h"
16 #include "base/string_util.h"
17 #include "update_engine/delta_diff_generator.h" 17 #include "update_engine/delta_diff_generator.h"
18 #include "update_engine/delta_performer.h" 18 #include "update_engine/delta_performer.h"
19 #include "update_engine/graph_types.h" 19 #include "update_engine/graph_types.h"
20 #include "update_engine/payload_signer.h" 20 #include "update_engine/payload_signer.h"
21 #include "update_engine/prefs_mock.h"
21 #include "update_engine/test_utils.h" 22 #include "update_engine/test_utils.h"
22 #include "update_engine/update_metadata.pb.h" 23 #include "update_engine/update_metadata.pb.h"
23 #include "update_engine/utils.h" 24 #include "update_engine/utils.h"
24 25
25 namespace chromeos_update_engine { 26 namespace chromeos_update_engine {
26 27
27 using std::min; 28 using std::min;
28 using std::string; 29 using std::string;
29 using std::vector; 30 using std::vector;
31 using testing::_;
32 using testing::Return;
30 33
31 extern const char* kUnittestPrivateKeyPath; 34 extern const char* kUnittestPrivateKeyPath;
32 extern const char* kUnittestPublicKeyPath; 35 extern const char* kUnittestPublicKeyPath;
33 36
34 class DeltaPerformerTest : public ::testing::Test { }; 37 class DeltaPerformerTest : public ::testing::Test { };
35 38
36 TEST(DeltaPerformerTest, ExtentsToByteStringTest) { 39 TEST(DeltaPerformerTest, ExtentsToByteStringTest) {
37 uint64_t test[] = {1, 1, 4, 2, kSparseHole, 1, 0, 1}; 40 uint64_t test[] = {1, 1, 4, 2, kSparseHole, 1, 0, 1};
38 COMPILE_ASSERT(arraysize(test) % 2 == 0, array_size_uneven); 41 COMPILE_ASSERT(arraysize(test) % 2 == 0, array_size_uneven);
39 const uint64_t block_size = 4096; 42 const uint64_t block_size = 4096;
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 old_kernel, 201 old_kernel,
199 new_kernel, 202 new_kernel,
200 delta_path, 203 delta_path,
201 kUnittestPrivateKeyPath)); 204 kUnittestPrivateKeyPath));
202 } 205 }
203 206
204 // Read delta into memory. 207 // Read delta into memory.
205 vector<char> delta; 208 vector<char> delta;
206 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); 209 EXPECT_TRUE(utils::ReadFile(delta_path, &delta));
207 210
211 uint64_t manifest_metadata_size;
212
208 // Check that the null signature blob exists 213 // Check that the null signature blob exists
209 { 214 {
210 LOG(INFO) << "delta size: " << delta.size(); 215 LOG(INFO) << "delta size: " << delta.size();
211 DeltaArchiveManifest manifest; 216 DeltaArchiveManifest manifest;
212 const int kManifestSizeOffset = 12; 217 const int kManifestSizeOffset = 12;
213 const int kManifestOffset = 20; 218 const int kManifestOffset = 20;
214 uint64_t manifest_size = 0; 219 uint64_t manifest_size = 0;
215 memcpy(&manifest_size, &delta[kManifestSizeOffset], sizeof(manifest_size)); 220 memcpy(&manifest_size, &delta[kManifestSizeOffset], sizeof(manifest_size));
216 manifest_size = be64toh(manifest_size); 221 manifest_size = be64toh(manifest_size);
217 LOG(INFO) << "manifest size: " << manifest_size; 222 LOG(INFO) << "manifest size: " << manifest_size;
218 EXPECT_TRUE(manifest.ParseFromArray(&delta[kManifestOffset], 223 EXPECT_TRUE(manifest.ParseFromArray(&delta[kManifestOffset],
219 manifest_size)); 224 manifest_size));
220 EXPECT_TRUE(manifest.has_signatures_offset()); 225 EXPECT_TRUE(manifest.has_signatures_offset());
226 manifest_metadata_size = kManifestOffset + manifest_size;
221 227
222 Signatures sigs_message; 228 Signatures sigs_message;
223 EXPECT_TRUE(sigs_message.ParseFromArray( 229 EXPECT_TRUE(sigs_message.ParseFromArray(
224 &delta[kManifestOffset + manifest_size + manifest.signatures_offset()], 230 &delta[manifest_metadata_size + manifest.signatures_offset()],
225 manifest.signatures_size())); 231 manifest.signatures_size()));
226 EXPECT_EQ(1, sigs_message.signatures_size()); 232 EXPECT_EQ(1, sigs_message.signatures_size());
227 const Signatures_Signature& signature = sigs_message.signatures(0); 233 const Signatures_Signature& signature = sigs_message.signatures(0);
228 EXPECT_EQ(1, signature.version()); 234 EXPECT_EQ(1, signature.version());
229 235
230 uint64_t expected_sig_data_length = 0; 236 uint64_t expected_sig_data_length = 0;
231 EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath, 237 EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath,
232 &expected_sig_data_length)); 238 &expected_sig_data_length));
233 EXPECT_EQ(expected_sig_data_length, manifest.signatures_size()); 239 EXPECT_EQ(expected_sig_data_length, manifest.signatures_size());
234 EXPECT_FALSE(signature.data().empty()); 240 EXPECT_FALSE(signature.data().empty());
235 } 241 }
236 242
243 PrefsMock prefs;
244 EXPECT_CALL(prefs, SetInt64(kPrefsManifestMetadataSize,
245 manifest_metadata_size)).WillOnce(Return(true));
246 EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextOperation, _))
247 .WillRepeatedly(Return(true));
248 EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextDataOffset, _))
249 .WillRepeatedly(Return(true));
250 EXPECT_CALL(prefs, SetString(kPrefsUpdateStateSignedSHA256Context, _))
251 .WillRepeatedly(Return(true));
252
237 // Update the A image in place. 253 // Update the A image in place.
238 DeltaPerformer performer; 254 DeltaPerformer performer(&prefs);
239 255
240 EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0)); 256 EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0));
241 EXPECT_TRUE(performer.OpenKernel(old_kernel.c_str())); 257 EXPECT_TRUE(performer.OpenKernel(old_kernel.c_str()));
242 258
243 // Write at some number of bytes per operation. Arbitrarily chose 5. 259 // Write at some number of bytes per operation. Arbitrarily chose 5.
244 const size_t kBytesPerWrite = 5; 260 const size_t kBytesPerWrite = 5;
245 for (size_t i = 0; i < delta.size(); i += kBytesPerWrite) { 261 for (size_t i = 0; i < delta.size(); i += kBytesPerWrite) {
246 size_t count = min(delta.size() - i, kBytesPerWrite); 262 size_t count = min(delta.size() - i, kBytesPerWrite);
247 EXPECT_EQ(count, performer.Write(&delta[i], count)); 263 EXPECT_EQ(count, performer.Write(&delta[i], count));
248 } 264 }
249 265
250 // Wrapper around close. Returns 0 on success or -errno on error. 266 // Wrapper around close. Returns 0 on success or -errno on error.
251 EXPECT_EQ(0, performer.Close()); 267 EXPECT_EQ(0, performer.Close());
252 268
253 CompareFilesByBlock(old_kernel, new_kernel); 269 CompareFilesByBlock(old_kernel, new_kernel);
254 270
255 vector<char> updated_kernel_partition; 271 vector<char> updated_kernel_partition;
256 EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition)); 272 EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition));
257 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string, 273 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string,
258 strlen(new_data_string))); 274 strlen(new_data_string)));
259 275
260 EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath)); 276 EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath));
261 EXPECT_TRUE(performer.VerifyPayload(kUnittestPublicKeyPath)); 277 EXPECT_TRUE(performer.VerifyPayload(kUnittestPublicKeyPath));
262 } 278 }
263 279
264 } // namespace chromeos_update_engine 280 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « delta_performer.cc ('k') | download_action.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698