OLD | NEW |
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS 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 <sys/stat.h> | 5 #include <sys/stat.h> |
6 #include <sys/types.h> | 6 #include <sys/types.h> |
7 #include <unistd.h> | 7 #include <unistd.h> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 #include <gtest/gtest.h> | 10 #include <gtest/gtest.h> |
11 #include "update_engine/postinstall_runner_action.h" | 11 #include "update_engine/postinstall_runner_action.h" |
12 #include "update_engine/test_utils.h" | 12 #include "update_engine/test_utils.h" |
13 #include "update_engine/utils.h" | 13 #include "update_engine/utils.h" |
14 | 14 |
15 using std::string; | 15 using std::string; |
16 using std::vector; | 16 using std::vector; |
17 | 17 |
18 namespace chromeos_update_engine { | 18 namespace chromeos_update_engine { |
19 | 19 |
| 20 namespace { |
| 21 gboolean StartProcessorInRunLoop(gpointer data) { |
| 22 ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); |
| 23 processor->StartProcessing(); |
| 24 return FALSE; |
| 25 } |
| 26 } // namespace |
| 27 |
20 class PostinstallRunnerActionTest : public ::testing::Test { | 28 class PostinstallRunnerActionTest : public ::testing::Test { |
21 public: | 29 public: |
22 void DoTest(bool do_losetup, bool do_err_script); | 30 void DoTest(bool do_losetup, bool do_err_script); |
23 }; | 31 }; |
24 | 32 |
25 class PostinstActionProcessorDelegate : public ActionProcessorDelegate { | 33 class PostinstActionProcessorDelegate : public ActionProcessorDelegate { |
26 public: | 34 public: |
27 PostinstActionProcessorDelegate() | 35 PostinstActionProcessorDelegate() |
28 : code_(kActionCodeError), | 36 : loop_(NULL), |
| 37 code_(kActionCodeError), |
29 code_set_(false) {} | 38 code_set_(false) {} |
| 39 void ProcessingDone(const ActionProcessor* processor, |
| 40 ActionExitCode code) { |
| 41 ASSERT_TRUE(loop_); |
| 42 g_main_loop_quit(loop_); |
| 43 } |
30 void ActionCompleted(ActionProcessor* processor, | 44 void ActionCompleted(ActionProcessor* processor, |
31 AbstractAction* action, | 45 AbstractAction* action, |
32 ActionExitCode code) { | 46 ActionExitCode code) { |
33 if (action->Type() == PostinstallRunnerAction::StaticType()) { | 47 if (action->Type() == PostinstallRunnerAction::StaticType()) { |
34 code_ = code; | 48 code_ = code; |
35 code_set_ = true; | 49 code_set_ = true; |
36 } | 50 } |
37 } | 51 } |
| 52 GMainLoop* loop_; |
38 ActionExitCode code_; | 53 ActionExitCode code_; |
39 bool code_set_; | 54 bool code_set_; |
40 }; | 55 }; |
41 | 56 |
42 TEST_F(PostinstallRunnerActionTest, RunAsRootSimpleTest) { | 57 TEST_F(PostinstallRunnerActionTest, RunAsRootSimpleTest) { |
43 ASSERT_EQ(0, getuid()); | 58 ASSERT_EQ(0, getuid()); |
44 DoTest(true, false); | 59 DoTest(true, false); |
45 } | 60 } |
46 | 61 |
47 TEST_F(PostinstallRunnerActionTest, RunAsRootCantMountTest) { | 62 TEST_F(PostinstallRunnerActionTest, RunAsRootCantMountTest) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 feeder_action.set_obj(install_plan); | 133 feeder_action.set_obj(install_plan); |
119 PostinstallRunnerAction runner_action; | 134 PostinstallRunnerAction runner_action; |
120 BondActions(&feeder_action, &runner_action); | 135 BondActions(&feeder_action, &runner_action); |
121 ObjectCollectorAction<InstallPlan> collector_action; | 136 ObjectCollectorAction<InstallPlan> collector_action; |
122 BondActions(&runner_action, &collector_action); | 137 BondActions(&runner_action, &collector_action); |
123 PostinstActionProcessorDelegate delegate; | 138 PostinstActionProcessorDelegate delegate; |
124 processor.EnqueueAction(&feeder_action); | 139 processor.EnqueueAction(&feeder_action); |
125 processor.EnqueueAction(&runner_action); | 140 processor.EnqueueAction(&runner_action); |
126 processor.EnqueueAction(&collector_action); | 141 processor.EnqueueAction(&collector_action); |
127 processor.set_delegate(&delegate); | 142 processor.set_delegate(&delegate); |
128 processor.StartProcessing(); | 143 |
129 ASSERT_FALSE(processor.IsRunning()) | 144 GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); |
130 << "Update test to handle non-asynch actions"; | 145 delegate.loop_ = loop; |
| 146 g_timeout_add(0, &StartProcessorInRunLoop, &processor); |
| 147 g_main_loop_run(loop); |
| 148 g_main_loop_unref(loop); |
| 149 ASSERT_FALSE(processor.IsRunning()); |
131 | 150 |
132 EXPECT_TRUE(delegate.code_set_); | 151 EXPECT_TRUE(delegate.code_set_); |
133 EXPECT_EQ(do_losetup && !do_err_script, delegate.code_ == kActionCodeSuccess); | 152 EXPECT_EQ(do_losetup && !do_err_script, delegate.code_ == kActionCodeSuccess); |
134 EXPECT_EQ(do_losetup && !do_err_script, | 153 EXPECT_EQ(do_losetup && !do_err_script, |
135 !collector_action.object().install_path.empty()); | 154 !collector_action.object().install_path.empty()); |
136 if (do_losetup && !do_err_script) { | 155 if (do_losetup && !do_err_script) { |
137 EXPECT_TRUE(install_plan == collector_action.object()); | 156 EXPECT_TRUE(install_plan == collector_action.object()); |
138 } | 157 } |
139 | 158 |
140 struct stat stbuf; | 159 struct stat stbuf; |
(...skipping 11 matching lines...) Expand all Loading... |
152 | 171 |
153 // Death tests don't seem to be working on Hardy | 172 // Death tests don't seem to be working on Hardy |
154 TEST_F(PostinstallRunnerActionTest, DISABLED_RunAsRootDeathTest) { | 173 TEST_F(PostinstallRunnerActionTest, DISABLED_RunAsRootDeathTest) { |
155 ASSERT_EQ(0, getuid()); | 174 ASSERT_EQ(0, getuid()); |
156 PostinstallRunnerAction runner_action; | 175 PostinstallRunnerAction runner_action; |
157 ASSERT_DEATH({ runner_action.TerminateProcessing(); }, | 176 ASSERT_DEATH({ runner_action.TerminateProcessing(); }, |
158 "postinstall_runner_action.h:.*] Check failed"); | 177 "postinstall_runner_action.h:.*] Check failed"); |
159 } | 178 } |
160 | 179 |
161 } // namespace chromeos_update_engine | 180 } // namespace chromeos_update_engine |
OLD | NEW |