| Index: delta_performer_unittest.cc
|
| diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
|
| index 12de8a9a24e1784d2e2e6e5ad20dad154165116c..4a11c693b843183a7482ec92e59538acbf9b4598 100755
|
| --- a/delta_performer_unittest.cc
|
| +++ b/delta_performer_unittest.cc
|
| @@ -34,6 +34,11 @@ using testing::Return;
|
| extern const char* kUnittestPrivateKeyPath;
|
| extern const char* kUnittestPublicKeyPath;
|
|
|
| +namespace {
|
| + const size_t kBlockSize = 4096;
|
| +} // namespace {}
|
| +
|
| +
|
| class DeltaPerformerTest : public ::testing::Test { };
|
|
|
| TEST(DeltaPerformerTest, ExtentsToByteStringTest) {
|
| @@ -85,7 +90,6 @@ void CompareFilesByBlock(const string& a_file, const string& b_file) {
|
| EXPECT_TRUE(utils::ReadFile(b_file, &b_data)) << "file failed: " << b_file;
|
|
|
| EXPECT_EQ(a_data.size(), b_data.size());
|
| - size_t kBlockSize = 4096;
|
| EXPECT_EQ(0, a_data.size() % kBlockSize);
|
| for (size_t i = 0; i < a_data.size(); i += kBlockSize) {
|
| EXPECT_EQ(0, i % kBlockSize);
|
| @@ -277,4 +281,65 @@ TEST(DeltaPerformerTest, RunAsRootSmallImageTest) {
|
| EXPECT_TRUE(performer.VerifyPayload(kUnittestPublicKeyPath));
|
| }
|
|
|
| +TEST(DeltaPerformerTest, NewFullUpdateTest) {
|
| + vector<char> new_root(20 * 1024 * 1024);
|
| + vector<char> new_kern(16 * 1024 * 1024);
|
| + const off_t kChunkSize = 128 * 1024;
|
| + FillWithData(&new_root);
|
| + FillWithData(&new_kern);
|
| +
|
| + string new_root_path;
|
| + EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_R.XXXXXX",
|
| + &new_root_path,
|
| + NULL));
|
| + ScopedPathUnlinker new_root_path_unlinker(new_root_path);
|
| + EXPECT_TRUE(WriteFileVector(new_root_path, new_root));
|
| +
|
| + string new_kern_path;
|
| + EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_K.XXXXXX",
|
| + &new_kern_path,
|
| + NULL));
|
| + ScopedPathUnlinker new_kern_path_unlinker(new_kern_path);
|
| + EXPECT_TRUE(WriteFileVector(new_kern_path, new_kern));
|
| +
|
| + string out_blobs_path;
|
| + int out_blobs_fd;
|
| + EXPECT_TRUE(utils::MakeTempFile("/tmp/NewFullUpdateTest_D.XXXXXX",
|
| + &out_blobs_path,
|
| + &out_blobs_fd));
|
| + ScopedPathUnlinker out_blobs_path_unlinker(out_blobs_path);
|
| + ScopedFdCloser out_blobs_fd_closer(&out_blobs_fd);
|
| +
|
| + off_t out_blobs_length = 0;
|
| +
|
| + Graph graph;
|
| + vector<DeltaArchiveManifest_InstallOperation> kernel_ops;
|
| + vector<Vertex::Index> final_order;
|
| +
|
| + EXPECT_TRUE(DeltaDiffGenerator::ReadFullUpdateFromDisk(&graph,
|
| + new_kern_path,
|
| + new_root_path,
|
| + out_blobs_fd,
|
| + &out_blobs_length,
|
| + kChunkSize,
|
| + &kernel_ops,
|
| + &final_order));
|
| + EXPECT_EQ(new_root.size() / kChunkSize, graph.size());
|
| + EXPECT_EQ(new_root.size() / kChunkSize, final_order.size());
|
| + EXPECT_EQ(new_kern.size() / kChunkSize, kernel_ops.size());
|
| + for (size_t i = 0; i < (new_root.size() / kChunkSize); ++i) {
|
| + EXPECT_EQ(i, final_order[i]);
|
| + EXPECT_EQ(1, graph[i].op.dst_extents_size());
|
| + EXPECT_EQ(i * kChunkSize / kBlockSize,
|
| + graph[i].op.dst_extents(0).start_block()) << "i = " << i;
|
| + EXPECT_EQ(kChunkSize / kBlockSize,
|
| + graph[i].op.dst_extents(0).num_blocks());
|
| + if (graph[i].op.type() !=
|
| + DeltaArchiveManifest_InstallOperation_Type_REPLACE) {
|
| + EXPECT_EQ(DeltaArchiveManifest_InstallOperation_Type_REPLACE_BZ,
|
| + graph[i].op.type());
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace chromeos_update_engine
|
|
|