AU: Include old kernel hash for source partition verification.
The hash is included (and, consequently, check by the client) only if a true
delta kernel update is generated.
BUG=7705
TEST=unit tests, generated delta and installed on device
Change-Id: I4483a176b177f3068d699dc962255c92ca601156
Review URL: http://codereview.chromium.org/3762007
diff --git a/delta_diff_generator.cc b/delta_diff_generator.cc
index 3dcd2cb..3011026 100644
--- a/delta_diff_generator.cc
+++ b/delta_diff_generator.cc
@@ -446,7 +446,7 @@
type(in_type),
size(in_size) {}
bool operator <(const DeltaObject& object) const {
- return size < object.size;
+ return (size != object.size) ? (size < object.size) : (name < object.name);
}
string name;
int type;
@@ -618,7 +618,7 @@
TEST_AND_RETURN_FALSE(hasher.Finalize());
const vector<char>& hash = hasher.raw_hash();
info->set_hash(hash.data(), hash.size());
- LOG(INFO) << "hash: " << hasher.hash();
+ LOG(INFO) << partition << ": size=" << size << " hash=" << hasher.hash();
return true;
}
@@ -627,8 +627,12 @@
const string& old_rootfs,
const string& new_rootfs,
DeltaArchiveManifest* manifest) {
- // TODO(petkov): Generate the old kernel info when we stop generating full
- // updates for the kernel partition.
+ if (!old_kernel.empty()) {
+ TEST_AND_RETURN_FALSE(
+ InitializePartitionInfo(true,
+ old_kernel,
+ manifest->mutable_old_kernel_info()));
+ }
TEST_AND_RETURN_FALSE(
InitializePartitionInfo(true,
new_kernel,
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 5a48441..e9d44fa 100755
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -258,9 +258,12 @@
EXPECT_EQ(expected_sig_data_length, manifest.signatures_size());
EXPECT_FALSE(signature.data().empty());
- // TODO(petkov): Add a test once the generator start sending old kernel
- // info.
- EXPECT_FALSE(manifest.has_old_kernel_info());
+ if (full_kernel) {
+ EXPECT_FALSE(manifest.has_old_kernel_info());
+ } else {
+ EXPECT_EQ(old_kernel_data.size(), manifest.old_kernel_info().size());
+ EXPECT_FALSE(manifest.old_kernel_info().hash().empty());
+ }
EXPECT_EQ(new_kernel_data.size(), manifest.new_kernel_info().size());
EXPECT_EQ(image_size, manifest.old_rootfs_info().size());
@@ -288,14 +291,20 @@
// Update the A image in place.
DeltaPerformer performer(&prefs);
+ vector<char> rootfs_hash;
+ EXPECT_EQ(image_size,
+ OmahaHashCalculator::RawHashOfFile(a_img,
+ image_size,
+ &rootfs_hash));
+ performer.set_current_rootfs_hash(&rootfs_hash);
+ vector<char> kernel_hash;
+ EXPECT_TRUE(OmahaHashCalculator::RawHashOfData(old_kernel_data,
+ &kernel_hash));
+ performer.set_current_kernel_hash(&kernel_hash);
+
EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0));
EXPECT_TRUE(performer.OpenKernel(old_kernel.c_str()));
- vector<char> rootfs_hash;
- CHECK_EQ(image_size,
- OmahaHashCalculator::RawHashOfFile(a_img, image_size, &rootfs_hash));
- performer.set_current_rootfs_hash(&rootfs_hash);
-
// Write at some number of bytes per operation. Arbitrarily chose 5.
const size_t kBytesPerWrite = 5;
for (size_t i = 0; i < delta.size(); i += kBytesPerWrite) {