AU: delta compress the kernel partition
Add kernel partition to proto buf. Change delta generator to compress
the kernel partition and the delta performer to perform operations to
update the kernel partition. Update unittests to test it.
Also, remove checksums from the protobuf while we're at it, since the
partitions themselves will contains checksums.
BUG=None
TEST=Attached unittest
Review URL: http://codereview.chromium.org/1819002
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 7ce2cf0..fb9aabc 100755
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -154,6 +154,29 @@
sizeof(kRandomString)));
}
+ string old_kernel;
+ EXPECT_TRUE(utils::MakeTempFile("/tmp/old_kernel.XXXXXX", &old_kernel, NULL));
+ ScopedPathUnlinker old_kernel_unlinker(old_kernel);
+
+ string new_kernel;
+ EXPECT_TRUE(utils::MakeTempFile("/tmp/new_kernel.XXXXXX", &new_kernel, NULL));
+ ScopedPathUnlinker new_kernel_unlinker(new_kernel);
+
+ vector<char> old_kernel_data(4096); // Something small for a test
+ vector<char> new_kernel_data(old_kernel_data.size());
+ FillWithData(&old_kernel_data);
+ FillWithData(&new_kernel_data);
+
+ // change the new kernel data
+ const char* new_data_string = "This is new data.";
+ strcpy(&new_kernel_data[0], new_data_string);
+
+ // Write kernels to disk
+ EXPECT_TRUE(utils::WriteFile(
+ old_kernel.c_str(), &old_kernel_data[0], old_kernel_data.size()));
+ EXPECT_TRUE(utils::WriteFile(
+ new_kernel.c_str(), &new_kernel_data[0], new_kernel_data.size()));
+
string delta_path;
EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL));
ScopedPathUnlinker delta_path_unlinker(delta_path);
@@ -166,6 +189,8 @@
a_img,
b_mnt,
b_img,
+ old_kernel,
+ new_kernel,
delta_path));
}
@@ -177,6 +202,7 @@
DeltaPerformer performer;
EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0));
+ EXPECT_TRUE(performer.OpenKernel(old_kernel.c_str()));
// Write at some number of bytes per operation. Arbitrarily chose 5.
const size_t kBytesPerWrite = 5;
@@ -189,6 +215,12 @@
EXPECT_EQ(0, performer.Close());
CompareFilesByBlock("/tmp/a_ref", "/tmp/b_ref");
+ CompareFilesByBlock(old_kernel, new_kernel);
+
+ vector<char> updated_kernel_partition;
+ EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition));
+ EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string,
+ strlen(new_data_string)));
}
} // namespace chromeos_update_engine