Index: filesystem_copier_action_unittest.cc |
diff --git a/filesystem_copier_action_unittest.cc b/filesystem_copier_action_unittest.cc |
index 032a24da4a15be125ef6880c437030acd9199a09..2ce3cc4fd6db760b2aa0aa35f5c874ccd1516d55 100644 |
--- a/filesystem_copier_action_unittest.cc |
+++ b/filesystem_copier_action_unittest.cc |
@@ -27,9 +27,12 @@ namespace chromeos_update_engine { |
class FilesystemCopierActionTest : public ::testing::Test { |
protected: |
+ // |verify_hash|: 0 - no hash verification, 1 -- successful hash verification, |
+ // 2 -- hash verification failure. |
void DoTest(bool run_out_of_space, |
bool terminate_early, |
- bool use_kernel_partition); |
+ bool use_kernel_partition, |
+ int verify_hash); |
void SetUp() { |
} |
void TearDown() { |
@@ -90,13 +93,14 @@ gboolean StartProcessorInRunLoop(gpointer data) { |
TEST_F(FilesystemCopierActionTest, RunAsRootSimpleTest) { |
ASSERT_EQ(0, getuid()); |
- DoTest(false, false, false); |
- |
- DoTest(false, false, true); |
+ DoTest(false, false, false, 0); |
+ DoTest(false, false, true, 0); |
} |
+ |
void FilesystemCopierActionTest::DoTest(bool run_out_of_space, |
bool terminate_early, |
- bool use_kernel_partition) { |
+ bool use_kernel_partition, |
+ int verify_hash) { |
GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); |
string a_loop_file; |
@@ -142,10 +146,29 @@ void FilesystemCopierActionTest::DoTest(bool run_out_of_space, |
// Set up the action objects |
InstallPlan install_plan; |
install_plan.is_full_update = false; |
- if (use_kernel_partition) |
- install_plan.kernel_install_path = b_dev; |
- else |
- install_plan.install_path = b_dev; |
+ if (verify_hash) { |
+ if (use_kernel_partition) { |
+ install_plan.kernel_install_path = a_dev; |
+ install_plan.kernel_size = |
+ kLoopFileSize - ((verify_hash == 2) ? 1 : 0); |
+ EXPECT_TRUE(OmahaHashCalculator::RawHashOfData( |
+ a_loop_data, |
+ &install_plan.kernel_hash)); |
+ } else { |
+ install_plan.install_path = a_dev; |
+ install_plan.rootfs_size = |
+ kLoopFileSize - ((verify_hash == 2) ? 1 : 0); |
+ EXPECT_TRUE(OmahaHashCalculator::RawHashOfData( |
+ a_loop_data, |
+ &install_plan.rootfs_hash)); |
+ } |
+ } else { |
+ if (use_kernel_partition) { |
+ install_plan.kernel_install_path = b_dev; |
+ } else { |
+ install_plan.install_path = b_dev; |
+ } |
+ } |
ActionProcessor processor; |
FilesystemCopierActionTestDelegate delegate; |
@@ -153,7 +176,8 @@ void FilesystemCopierActionTest::DoTest(bool run_out_of_space, |
processor.set_delegate(&delegate); |
ObjectFeederAction<InstallPlan> feeder_action; |
- FilesystemCopierAction copier_action(use_kernel_partition); |
+ FilesystemCopierAction copier_action(use_kernel_partition, |
+ verify_hash != 0); |
ObjectCollectorAction<InstallPlan> collector_action; |
BondActions(&feeder_action, &copier_action); |
@@ -163,7 +187,9 @@ void FilesystemCopierActionTest::DoTest(bool run_out_of_space, |
processor.EnqueueAction(&copier_action); |
processor.EnqueueAction(&collector_action); |
- copier_action.set_copy_source(a_dev); |
+ if (!verify_hash) { |
+ copier_action.set_copy_source(a_dev); |
+ } |
feeder_action.set_obj(install_plan); |
StartProcessorCallbackArgs start_callback_args; |
@@ -181,21 +207,26 @@ void FilesystemCopierActionTest::DoTest(bool run_out_of_space, |
EXPECT_EQ(kActionCodeError, delegate.code()); |
return; |
} |
+ if (verify_hash == 2) { |
+ EXPECT_EQ(use_kernel_partition ? |
+ kActionCodeNewKernelVerificationError : |
+ kActionCodeNewRootfsVerificationError, |
+ delegate.code()); |
+ return; |
+ } |
EXPECT_EQ(kActionCodeSuccess, delegate.code()); |
// Make sure everything in the out_image is there |
vector<char> a_out; |
- vector<char> b_out; |
EXPECT_TRUE(utils::ReadFile(a_dev, &a_out)); |
- EXPECT_TRUE(utils::ReadFile(b_dev, &b_out)); |
- EXPECT_TRUE(ExpectVectorsEq(a_out, b_out)); |
+ if (!verify_hash) { |
+ vector<char> b_out; |
+ EXPECT_TRUE(utils::ReadFile(b_dev, &b_out)); |
+ EXPECT_TRUE(ExpectVectorsEq(a_out, b_out)); |
+ } |
EXPECT_TRUE(ExpectVectorsEq(a_loop_data, a_out)); |
EXPECT_TRUE(collector_action.object() == install_plan); |
- if (terminate_early) { |
- // sleep so OS can clean up |
- sleep(1); |
- } |
} |
class FilesystemCopierActionTest2Delegate : public ActionProcessorDelegate { |
@@ -219,7 +250,7 @@ TEST_F(FilesystemCopierActionTest, MissingInputObjectTest) { |
processor.set_delegate(&delegate); |
- FilesystemCopierAction copier_action(false); |
+ FilesystemCopierAction copier_action(false, false); |
ObjectCollectorAction<InstallPlan> collector_action; |
BondActions(&copier_action, &collector_action); |
@@ -242,7 +273,7 @@ TEST_F(FilesystemCopierActionTest, FullUpdateTest) { |
const char* kUrl = "http://some/url"; |
InstallPlan install_plan(true, false, kUrl, 0, "", "", ""); |
feeder_action.set_obj(install_plan); |
- FilesystemCopierAction copier_action(false); |
+ FilesystemCopierAction copier_action(false, false); |
ObjectCollectorAction<InstallPlan> collector_action; |
BondActions(&feeder_action, &copier_action); |
@@ -268,7 +299,7 @@ TEST_F(FilesystemCopierActionTest, ResumeTest) { |
const char* kUrl = "http://some/url"; |
InstallPlan install_plan(false, true, kUrl, 0, "", "", ""); |
feeder_action.set_obj(install_plan); |
- FilesystemCopierAction copier_action(false); |
+ FilesystemCopierAction copier_action(false, false); |
ObjectCollectorAction<InstallPlan> collector_action; |
BondActions(&feeder_action, &copier_action); |
@@ -299,7 +330,7 @@ TEST_F(FilesystemCopierActionTest, NonExistentDriveTest) { |
"/no/such/file", |
"/no/such/file"); |
feeder_action.set_obj(install_plan); |
- FilesystemCopierAction copier_action(false); |
+ FilesystemCopierAction copier_action(false, false); |
ObjectCollectorAction<InstallPlan> collector_action; |
BondActions(&copier_action, &collector_action); |
@@ -313,14 +344,26 @@ TEST_F(FilesystemCopierActionTest, NonExistentDriveTest) { |
EXPECT_EQ(kActionCodeError, delegate.code_); |
} |
+TEST_F(FilesystemCopierActionTest, RunAsRootVerifyHashTest) { |
+ ASSERT_EQ(0, getuid()); |
+ DoTest(false, false, false, 1); |
+ DoTest(false, false, true, 1); |
+} |
+ |
+TEST_F(FilesystemCopierActionTest, RunAsRootVerifyHashFailTest) { |
+ ASSERT_EQ(0, getuid()); |
+ DoTest(false, false, false, 2); |
+ DoTest(false, false, true, 2); |
+} |
+ |
TEST_F(FilesystemCopierActionTest, RunAsRootNoSpaceTest) { |
ASSERT_EQ(0, getuid()); |
- DoTest(true, false, false); |
+ DoTest(true, false, false, 0); |
} |
TEST_F(FilesystemCopierActionTest, RunAsRootTerminateEarlyTest) { |
ASSERT_EQ(0, getuid()); |
- DoTest(false, true, false); |
+ DoTest(false, true, false, 0); |
} |
TEST_F(FilesystemCopierActionTest, RunAsRootDetermineFilesystemSizeTest) { |
@@ -336,7 +379,7 @@ TEST_F(FilesystemCopierActionTest, RunAsRootDetermineFilesystemSizeTest) { |
for (int i = 0; i < 2; ++i) { |
bool is_kernel = i == 1; |
- FilesystemCopierAction action(is_kernel); |
+ FilesystemCopierAction action(is_kernel, false); |
EXPECT_EQ(kint64max, action.filesystem_size_); |
{ |
int fd = HANDLE_EINTR(open(img.c_str(), O_RDONLY)); |