| OLD | NEW | 
|    1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include <glib.h> |    5 #include <glib.h> | 
|    6 #include <set> |    6 #include <set> | 
|    7 #include <string> |    7 #include <string> | 
|    8 #include <vector> |    8 #include <vector> | 
|    9 #include <gtest/gtest.h> |    9 #include <gtest/gtest.h> | 
|   10 #include "base/string_util.h" |   10 #include "base/string_util.h" | 
|   11 #include "update_engine/filesystem_copier_action.h" |   11 #include "update_engine/filesystem_copier_action.h" | 
|   12 #include "update_engine/filesystem_iterator.h" |   12 #include "update_engine/filesystem_iterator.h" | 
|   13 #include "update_engine/omaha_hash_calculator.h" |   13 #include "update_engine/omaha_hash_calculator.h" | 
|   14 #include "update_engine/test_utils.h" |   14 #include "update_engine/test_utils.h" | 
|   15 #include "update_engine/utils.h" |   15 #include "update_engine/utils.h" | 
|   16  |   16  | 
|   17 using std::set; |   17 using std::set; | 
|   18 using std::string; |   18 using std::string; | 
|   19 using std::vector; |   19 using std::vector; | 
|   20  |   20  | 
|   21 namespace chromeos_update_engine { |   21 namespace chromeos_update_engine { | 
|   22  |   22  | 
|   23 class FilesystemCopierActionTest : public ::testing::Test { |   23 class FilesystemCopierActionTest : public ::testing::Test { | 
|   24  protected: |   24  protected: | 
|   25   void DoTest(bool run_out_of_space, bool terminate_early); |   25   void DoTest(bool run_out_of_space, | 
 |   26               bool terminate_early, | 
 |   27               bool use_kernel_partition); | 
|   26   void SetUp() { |   28   void SetUp() { | 
|   27   } |   29   } | 
|   28   void TearDown() { |   30   void TearDown() { | 
|   29   } |   31   } | 
|   30 }; |   32 }; | 
|   31  |   33  | 
|   32 class FilesystemCopierActionTestDelegate : public ActionProcessorDelegate { |   34 class FilesystemCopierActionTestDelegate : public ActionProcessorDelegate { | 
|   33  public: |   35  public: | 
|   34   FilesystemCopierActionTestDelegate() : ran_(false), success_(false) {} |   36   FilesystemCopierActionTestDelegate() : ran_(false), success_(false) {} | 
|   35   void ExitMainLoop() { |   37   void ExitMainLoop() { | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   76   processor->StartProcessing(); |   78   processor->StartProcessing(); | 
|   77   if (args->terminate_early) { |   79   if (args->terminate_early) { | 
|   78     EXPECT_TRUE(args->filesystem_copier_action); |   80     EXPECT_TRUE(args->filesystem_copier_action); | 
|   79     args->processor->StopProcessing(); |   81     args->processor->StopProcessing(); | 
|   80   } |   82   } | 
|   81   return FALSE; |   83   return FALSE; | 
|   82 } |   84 } | 
|   83  |   85  | 
|   84 TEST_F(FilesystemCopierActionTest, RunAsRootSimpleTest) { |   86 TEST_F(FilesystemCopierActionTest, RunAsRootSimpleTest) { | 
|   85   ASSERT_EQ(0, getuid()); |   87   ASSERT_EQ(0, getuid()); | 
|   86   DoTest(false, false); |   88   DoTest(false, false, false); | 
 |   89  | 
 |   90   DoTest(false, false, true); | 
|   87 } |   91 } | 
|   88 void FilesystemCopierActionTest::DoTest(bool run_out_of_space, |   92 void FilesystemCopierActionTest::DoTest(bool run_out_of_space, | 
|   89                                         bool terminate_early) { |   93                                         bool terminate_early, | 
 |   94                                         bool use_kernel_partition) { | 
|   90   GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); |   95   GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); | 
|   91  |   96  | 
|   92   string a_loop_file; |   97   string a_loop_file; | 
|   93   string b_loop_file; |   98   string b_loop_file; | 
|   94    |   99    | 
|   95   EXPECT_TRUE(utils::MakeTempFile("/tmp/a_loop_file.XXXXXX", |  100   EXPECT_TRUE(utils::MakeTempFile("/tmp/a_loop_file.XXXXXX", | 
|   96                                   &a_loop_file, |  101                                   &a_loop_file, | 
|   97                                   NULL)); |  102                                   NULL)); | 
|   98   ScopedPathUnlinker a_loop_file_unlinker(a_loop_file); |  103   ScopedPathUnlinker a_loop_file_unlinker(a_loop_file); | 
|   99   EXPECT_TRUE(utils::MakeTempFile("/tmp/b_loop_file.XXXXXX", |  104   EXPECT_TRUE(utils::MakeTempFile("/tmp/b_loop_file.XXXXXX", | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  125   string b_dev = GetUnusedLoopDevice(); |  130   string b_dev = GetUnusedLoopDevice(); | 
|  126   EXPECT_FALSE(b_dev.empty()); |  131   EXPECT_FALSE(b_dev.empty()); | 
|  127   EXPECT_EQ(0, System(StringPrintf("losetup %s %s", |  132   EXPECT_EQ(0, System(StringPrintf("losetup %s %s", | 
|  128                                    b_dev.c_str(), |  133                                    b_dev.c_str(), | 
|  129                                    b_loop_file.c_str()))); |  134                                    b_loop_file.c_str()))); | 
|  130   ScopedLoopbackDeviceReleaser b_dev_releaser(b_dev); |  135   ScopedLoopbackDeviceReleaser b_dev_releaser(b_dev); | 
|  131  |  136  | 
|  132   // Set up the action objects |  137   // Set up the action objects | 
|  133   InstallPlan install_plan; |  138   InstallPlan install_plan; | 
|  134   install_plan.is_full_update = false; |  139   install_plan.is_full_update = false; | 
|  135   install_plan.install_path = b_dev; |  140   if (use_kernel_partition) | 
 |  141     install_plan.kernel_install_path = b_dev; | 
 |  142   else | 
 |  143     install_plan.install_path = b_dev; | 
|  136  |  144  | 
|  137   ActionProcessor processor; |  145   ActionProcessor processor; | 
|  138   FilesystemCopierActionTestDelegate delegate; |  146   FilesystemCopierActionTestDelegate delegate; | 
|  139   delegate.set_loop(loop); |  147   delegate.set_loop(loop); | 
|  140   processor.set_delegate(&delegate); |  148   processor.set_delegate(&delegate); | 
|  141  |  149  | 
|  142   ObjectFeederAction<InstallPlan> feeder_action; |  150   ObjectFeederAction<InstallPlan> feeder_action; | 
|  143   FilesystemCopierAction copier_action; |  151   FilesystemCopierAction copier_action(use_kernel_partition); | 
|  144   ObjectCollectorAction<InstallPlan> collector_action; |  152   ObjectCollectorAction<InstallPlan> collector_action; | 
|  145  |  153  | 
|  146   BondActions(&feeder_action, &copier_action); |  154   BondActions(&feeder_action, &copier_action); | 
|  147   BondActions(&copier_action, &collector_action); |  155   BondActions(&copier_action, &collector_action); | 
|  148  |  156  | 
|  149   processor.EnqueueAction(&feeder_action); |  157   processor.EnqueueAction(&feeder_action); | 
|  150   processor.EnqueueAction(&copier_action); |  158   processor.EnqueueAction(&copier_action); | 
|  151   processor.EnqueueAction(&collector_action); |  159   processor.EnqueueAction(&collector_action); | 
|  152  |  160  | 
|  153   copier_action.set_copy_source(a_dev); |  161   copier_action.set_copy_source(a_dev); | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  195   bool ran_; |  203   bool ran_; | 
|  196   bool success_; |  204   bool success_; | 
|  197 }; |  205 }; | 
|  198  |  206  | 
|  199 TEST_F(FilesystemCopierActionTest, MissingInputObjectTest) { |  207 TEST_F(FilesystemCopierActionTest, MissingInputObjectTest) { | 
|  200   ActionProcessor processor; |  208   ActionProcessor processor; | 
|  201   FilesystemCopierActionTest2Delegate delegate; |  209   FilesystemCopierActionTest2Delegate delegate; | 
|  202  |  210  | 
|  203   processor.set_delegate(&delegate); |  211   processor.set_delegate(&delegate); | 
|  204  |  212  | 
|  205   FilesystemCopierAction copier_action; |  213   FilesystemCopierAction copier_action(false); | 
|  206   ObjectCollectorAction<InstallPlan> collector_action; |  214   ObjectCollectorAction<InstallPlan> collector_action; | 
|  207  |  215  | 
|  208   BondActions(&copier_action, &collector_action); |  216   BondActions(&copier_action, &collector_action); | 
|  209  |  217  | 
|  210   processor.EnqueueAction(&copier_action); |  218   processor.EnqueueAction(&copier_action); | 
|  211   processor.EnqueueAction(&collector_action); |  219   processor.EnqueueAction(&collector_action); | 
|  212   processor.StartProcessing(); |  220   processor.StartProcessing(); | 
|  213   EXPECT_FALSE(processor.IsRunning()); |  221   EXPECT_FALSE(processor.IsRunning()); | 
|  214   EXPECT_TRUE(delegate.ran_); |  222   EXPECT_TRUE(delegate.ran_); | 
|  215   EXPECT_FALSE(delegate.success_); |  223   EXPECT_FALSE(delegate.success_); | 
|  216 } |  224 } | 
|  217  |  225  | 
|  218 TEST_F(FilesystemCopierActionTest, FullUpdateTest) { |  226 TEST_F(FilesystemCopierActionTest, FullUpdateTest) { | 
|  219   ActionProcessor processor; |  227   ActionProcessor processor; | 
|  220   FilesystemCopierActionTest2Delegate delegate; |  228   FilesystemCopierActionTest2Delegate delegate; | 
|  221  |  229  | 
|  222   processor.set_delegate(&delegate); |  230   processor.set_delegate(&delegate); | 
|  223  |  231  | 
|  224   ObjectFeederAction<InstallPlan> feeder_action; |  232   ObjectFeederAction<InstallPlan> feeder_action; | 
|  225   InstallPlan install_plan(true, "", "", ""); |  233   InstallPlan install_plan(true, "", "", "", ""); | 
|  226   feeder_action.set_obj(install_plan); |  234   feeder_action.set_obj(install_plan); | 
|  227   FilesystemCopierAction copier_action; |  235   FilesystemCopierAction copier_action(false); | 
|  228   ObjectCollectorAction<InstallPlan> collector_action; |  236   ObjectCollectorAction<InstallPlan> collector_action; | 
|  229  |  237  | 
|  230   BondActions(&feeder_action, &copier_action); |  238   BondActions(&feeder_action, &copier_action); | 
|  231   BondActions(&copier_action, &collector_action); |  239   BondActions(&copier_action, &collector_action); | 
|  232  |  240  | 
|  233   processor.EnqueueAction(&feeder_action); |  241   processor.EnqueueAction(&feeder_action); | 
|  234   processor.EnqueueAction(&copier_action); |  242   processor.EnqueueAction(&copier_action); | 
|  235   processor.EnqueueAction(&collector_action); |  243   processor.EnqueueAction(&collector_action); | 
|  236   processor.StartProcessing(); |  244   processor.StartProcessing(); | 
|  237   EXPECT_FALSE(processor.IsRunning()); |  245   EXPECT_FALSE(processor.IsRunning()); | 
|  238   EXPECT_TRUE(delegate.ran_); |  246   EXPECT_TRUE(delegate.ran_); | 
|  239   EXPECT_TRUE(delegate.success_); |  247   EXPECT_TRUE(delegate.success_); | 
|  240 } |  248 } | 
|  241  |  249  | 
|  242 TEST_F(FilesystemCopierActionTest, NonExistentDriveTest) { |  250 TEST_F(FilesystemCopierActionTest, NonExistentDriveTest) { | 
|  243   ActionProcessor processor; |  251   ActionProcessor processor; | 
|  244   FilesystemCopierActionTest2Delegate delegate; |  252   FilesystemCopierActionTest2Delegate delegate; | 
|  245  |  253  | 
|  246   processor.set_delegate(&delegate); |  254   processor.set_delegate(&delegate); | 
|  247  |  255  | 
|  248   ObjectFeederAction<InstallPlan> feeder_action; |  256   ObjectFeederAction<InstallPlan> feeder_action; | 
|  249   InstallPlan install_plan(false, "", "", "/some/missing/file/path"); |  257   InstallPlan install_plan(false, "", "", "/no/such/file", "/no/such/file"); | 
|  250   feeder_action.set_obj(install_plan); |  258   feeder_action.set_obj(install_plan); | 
|  251   FilesystemCopierAction copier_action; |  259   FilesystemCopierAction copier_action(false); | 
|  252   ObjectCollectorAction<InstallPlan> collector_action; |  260   ObjectCollectorAction<InstallPlan> collector_action; | 
|  253  |  261  | 
|  254   BondActions(&copier_action, &collector_action); |  262   BondActions(&copier_action, &collector_action); | 
|  255  |  263  | 
|  256   processor.EnqueueAction(&feeder_action); |  264   processor.EnqueueAction(&feeder_action); | 
|  257   processor.EnqueueAction(&copier_action); |  265   processor.EnqueueAction(&copier_action); | 
|  258   processor.EnqueueAction(&collector_action); |  266   processor.EnqueueAction(&collector_action); | 
|  259   processor.StartProcessing(); |  267   processor.StartProcessing(); | 
|  260   EXPECT_FALSE(processor.IsRunning()); |  268   EXPECT_FALSE(processor.IsRunning()); | 
|  261   EXPECT_TRUE(delegate.ran_); |  269   EXPECT_TRUE(delegate.ran_); | 
|  262   EXPECT_FALSE(delegate.success_); |  270   EXPECT_FALSE(delegate.success_); | 
|  263 } |  271 } | 
|  264  |  272  | 
|  265 TEST_F(FilesystemCopierActionTest, RunAsRootNoSpaceTest) { |  273 TEST_F(FilesystemCopierActionTest, RunAsRootNoSpaceTest) { | 
|  266   ASSERT_EQ(0, getuid()); |  274   ASSERT_EQ(0, getuid()); | 
|  267   DoTest(true, false); |  275   DoTest(true, false, false); | 
|  268 } |  276 } | 
|  269  |  277  | 
|  270 TEST_F(FilesystemCopierActionTest, RunAsRootTerminateEarlyTest) { |  278 TEST_F(FilesystemCopierActionTest, RunAsRootTerminateEarlyTest) { | 
|  271   ASSERT_EQ(0, getuid()); |  279   ASSERT_EQ(0, getuid()); | 
|  272   DoTest(false, true); |  280   DoTest(false, true, false); | 
|  273 } |  281 } | 
|  274  |  282  | 
|  275 }  // namespace chromeos_update_engine |  283 }  // namespace chromeos_update_engine | 
| OLD | NEW |