Index: delta_diff_generator_unittest.cc |
diff --git a/delta_diff_generator_unittest.cc b/delta_diff_generator_unittest.cc |
index 0d7b0fe20903fdd423642932c7c429128f672636..d897a0a2f37cf572cf0723445e4d97e9041cd31c 100644 |
--- a/delta_diff_generator_unittest.cc |
+++ b/delta_diff_generator_unittest.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -67,7 +67,8 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootMoveSmallTest) { |
EXPECT_TRUE(DeltaDiffGenerator::ReadFileToDiff(old_path(), |
new_path(), |
&data, |
- &op)); |
+ &op, |
+ true)); |
EXPECT_TRUE(data.empty()); |
EXPECT_TRUE(op.has_type()); |
@@ -95,7 +96,8 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootBsdiffSmallTest) { |
EXPECT_TRUE(DeltaDiffGenerator::ReadFileToDiff(old_path(), |
new_path(), |
&data, |
- &op)); |
+ &op, |
+ true)); |
EXPECT_FALSE(data.empty()); |
EXPECT_TRUE(op.has_type()); |
@@ -125,7 +127,8 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootReplaceSmallTest) { |
EXPECT_TRUE(DeltaDiffGenerator::ReadFileToDiff(old_path(), |
new_path(), |
&data, |
- &op)); |
+ &op, |
+ true)); |
EXPECT_FALSE(data.empty()); |
EXPECT_TRUE(op.has_type()); |
@@ -143,6 +146,36 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootReplaceSmallTest) { |
} |
} |
+TEST_F(DeltaDiffGeneratorTest, RunAsRootBsdiffNoGatherExtentsSmallTest) { |
+ EXPECT_TRUE(utils::WriteFile(old_path().c_str(), |
+ reinterpret_cast<const char*>(kRandomString), |
+ sizeof(kRandomString) - 1)); |
+ EXPECT_TRUE(utils::WriteFile(new_path().c_str(), |
+ reinterpret_cast<const char*>(kRandomString), |
+ sizeof(kRandomString))); |
+ vector<char> data; |
+ DeltaArchiveManifest_InstallOperation op; |
+ EXPECT_TRUE(DeltaDiffGenerator::ReadFileToDiff(old_path(), |
+ new_path(), |
+ &data, |
+ &op, |
+ false)); |
+ EXPECT_FALSE(data.empty()); |
+ |
+ EXPECT_TRUE(op.has_type()); |
+ EXPECT_EQ(DeltaArchiveManifest_InstallOperation_Type_BSDIFF, op.type()); |
+ EXPECT_FALSE(op.has_data_offset()); |
+ EXPECT_FALSE(op.has_data_length()); |
+ EXPECT_EQ(1, op.src_extents_size()); |
+ EXPECT_EQ(0, op.src_extents().Get(0).start_block()); |
+ EXPECT_EQ(1, op.src_extents().Get(0).num_blocks()); |
+ EXPECT_EQ(sizeof(kRandomString) - 1, op.src_length()); |
+ EXPECT_EQ(1, op.dst_extents_size()); |
+ EXPECT_EQ(0, op.dst_extents().Get(0).start_block()); |
+ EXPECT_EQ(1, op.dst_extents().Get(0).num_blocks()); |
+ EXPECT_EQ(sizeof(kRandomString), op.dst_length()); |
+} |
+ |
namespace { |
void AppendExtent(vector<Extent>* vect, uint64_t start, uint64_t length) { |
vect->resize(vect->size() + 1); |
@@ -171,9 +204,9 @@ TEST_F(DeltaDiffGeneratorTest, SubstituteBlocksTest) { |
OpAppendExtent(&op, kSparseHole, 4); // Sparse hole in file |
OpAppendExtent(&op, 3, 1); |
OpAppendExtent(&op, 7, 3); |
- |
+ |
DeltaDiffGenerator::SubstituteBlocks(&vertex, remove_blocks, replace_blocks); |
- |
+ |
EXPECT_EQ(7, op.src_extents_size()); |
EXPECT_EQ(11, op.src_extents(0).start_block()); |
EXPECT_EQ(1, op.src_extents(0).num_blocks()); |
@@ -194,7 +227,7 @@ TEST_F(DeltaDiffGeneratorTest, SubstituteBlocksTest) { |
TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
Graph graph; |
vector<Block> blocks(9); |
- |
+ |
// Create nodes in graph |
{ |
graph.resize(graph.size() + 1); |
@@ -209,7 +242,7 @@ TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
blocks[3].reader = graph.size() - 1; |
blocks[5].reader = graph.size() - 1; |
blocks[7].reader = graph.size() - 1; |
- |
+ |
// Writes to blocks 1, 2, 4 |
extents.clear(); |
graph_utils::AppendBlockToExtents(&extents, 1); |
@@ -234,7 +267,7 @@ TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
blocks[1].reader = graph.size() - 1; |
blocks[2].reader = graph.size() - 1; |
blocks[4].reader = graph.size() - 1; |
- |
+ |
// Writes to blocks 3, 5, 6 |
extents.clear(); |
graph_utils::AppendBlockToExtents(&extents, 3); |
@@ -246,10 +279,10 @@ TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
blocks[5].writer = graph.size() - 1; |
blocks[6].writer = graph.size() - 1; |
} |
- |
+ |
// Create edges |
DeltaDiffGenerator::CreateEdges(&graph, blocks); |
- |
+ |
// Find cycles |
CycleBreaker cycle_breaker; |
set<Edge> cut_edges; |
@@ -261,9 +294,9 @@ TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
vector<CutEdgeVertexes> cuts; |
EXPECT_TRUE(DeltaDiffGenerator::CutEdges(&graph, cut_edges, &cuts)); |
- |
+ |
EXPECT_EQ(3, graph.size()); |
- |
+ |
// Check new node in graph: |
EXPECT_EQ(DeltaArchiveManifest_InstallOperation_Type_MOVE, |
graph.back().op.type()); |
@@ -272,7 +305,7 @@ TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
EXPECT_EQ(kTempBlockStart, graph.back().op.dst_extents(0).start_block()); |
EXPECT_EQ(2, graph.back().op.dst_extents(0).num_blocks()); |
EXPECT_TRUE(graph.back().out_edges.empty()); |
- |
+ |
// Check that old node reads from new blocks |
EXPECT_EQ(2, graph[0].op.src_extents_size()); |
EXPECT_EQ(kTempBlockStart, graph[0].op.src_extents(0).start_block()); |
@@ -305,7 +338,7 @@ TEST_F(DeltaDiffGeneratorTest, CutEdgesTest) { |
EXPECT_EQ(1, graph[1].op.dst_extents(0).num_blocks()); |
EXPECT_EQ(5, graph[1].op.dst_extents(1).start_block()); |
EXPECT_EQ(2, graph[1].op.dst_extents(1).num_blocks()); |
- |
+ |
// Ensure it only depends on the next node |
EXPECT_EQ(1, graph[1].out_edges.size()); |
EXPECT_TRUE(graph[1].out_edges.end() != graph[1].out_edges.find(2)); |
@@ -323,7 +356,7 @@ TEST_F(DeltaDiffGeneratorTest, ReorderBlobsTest) { |
string new_blobs; |
EXPECT_TRUE( |
utils::MakeTempFile("ReorderBlobsTest.new.XXXXXX", &new_blobs, NULL)); |
- |
+ |
DeltaArchiveManifest manifest; |
DeltaArchiveManifest_InstallOperation* op = |
manifest.add_install_operations(); |
@@ -332,11 +365,11 @@ TEST_F(DeltaDiffGeneratorTest, ReorderBlobsTest) { |
op = manifest.add_install_operations(); |
op->set_data_offset(0); |
op->set_data_length(1); |
- |
+ |
EXPECT_TRUE(DeltaDiffGenerator::ReorderDataBlobs(&manifest, |
orig_blobs, |
new_blobs)); |
- |
+ |
string new_data; |
EXPECT_TRUE(utils::ReadFileToString(new_blobs, &new_data)); |
EXPECT_EQ("bcda", new_data); |
@@ -345,7 +378,7 @@ TEST_F(DeltaDiffGeneratorTest, ReorderBlobsTest) { |
EXPECT_EQ(3, manifest.install_operations(0).data_length()); |
EXPECT_EQ(3, manifest.install_operations(1).data_offset()); |
EXPECT_EQ(1, manifest.install_operations(1).data_length()); |
- |
+ |
unlink(orig_blobs.c_str()); |
unlink(new_blobs.c_str()); |
} |
@@ -424,7 +457,7 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootAssignTempBlocksTest) { |
Graph graph(9); |
const vector<Extent> empt; // empty |
const string kFilename = "/foo"; |
- |
+ |
// Some scratch space: |
GenVertex(&graph[0], empt, VectOfExt(200, 1), "", OP_REPLACE); |
GenVertex(&graph[1], empt, VectOfExt(210, 10), "", OP_REPLACE); |
@@ -455,9 +488,9 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootAssignTempBlocksTest) { |
kFilename, |
OP_BSDIFF); |
graph[8].out_edges[7] = EdgeWithReadDep(VectOfExt(120, 50)); |
- |
+ |
graph_utils::DumpGraph(graph); |
- |
+ |
vector<Vertex::Index> final_order; |
@@ -466,13 +499,13 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootAssignTempBlocksTest) { |
EXPECT_TRUE(utils::MakeTempDirectory("/tmp/AssignTempBlocksTest.XXXXXX", |
&temp_dir)); |
ScopedDirRemover temp_dir_remover(temp_dir); |
- |
+ |
const size_t kBlockSize = 4096; |
vector<char> temp_data(kBlockSize * 50); |
FillWithData(&temp_data); |
EXPECT_TRUE(WriteFileVector(temp_dir + kFilename, temp_data)); |
ScopedPathUnlinker filename_unlinker(temp_dir + kFilename); |
- |
+ |
int fd; |
EXPECT_TRUE(utils::MakeTempFile("/tmp/AssignTempBlocksTestData.XXXXXX", |
NULL, |
@@ -487,7 +520,7 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootAssignTempBlocksTest) { |
&data_file_size, |
&final_order)); |
- |
+ |
Graph expected_graph(12); |
GenVertex(&expected_graph[0], empt, VectOfExt(200, 1), "", OP_REPLACE); |
GenVertex(&expected_graph[1], empt, VectOfExt(210, 10), "", OP_REPLACE); |
@@ -519,7 +552,7 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootAssignTempBlocksTest) { |
OP_BSDIFF); |
expected_graph[6].out_edges[5] = EdgeWithReadDep(VectOfExt(40, 11)); |
expected_graph[6].out_edges[10] = EdgeWithWriteDep(VectOfExt(60, 10)); |
- |
+ |
GenVertex(&expected_graph[7], |
VectOfExt(120, 50), |
VectOfExt(60, 40), |
@@ -542,7 +575,7 @@ TEST_F(DeltaDiffGeneratorTest, RunAsRootAssignTempBlocksTest) { |
"", |
OP_MOVE); |
expected_graph[10].out_edges[4] = EdgeWithReadDep(VectOfExt(60, 9)); |
- |
+ |
EXPECT_EQ(12, graph.size()); |
EXPECT_FALSE(graph.back().valid); |
for (Graph::size_type i = 0; i < graph.size() - 1; i++) { |