xref: /aosp_15_r20/system/update_engine/common/action_unittest.cc (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
1*5a923131SAndroid Build Coastguard Worker //
2*5a923131SAndroid Build Coastguard Worker // Copyright (C) 2010 The Android Open Source Project
3*5a923131SAndroid Build Coastguard Worker //
4*5a923131SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*5a923131SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*5a923131SAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*5a923131SAndroid Build Coastguard Worker //
8*5a923131SAndroid Build Coastguard Worker //      http://www.apache.org/licenses/LICENSE-2.0
9*5a923131SAndroid Build Coastguard Worker //
10*5a923131SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*5a923131SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*5a923131SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*5a923131SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*5a923131SAndroid Build Coastguard Worker // limitations under the License.
15*5a923131SAndroid Build Coastguard Worker //
16*5a923131SAndroid Build Coastguard Worker 
17*5a923131SAndroid Build Coastguard Worker #include "update_engine/common/action.h"
18*5a923131SAndroid Build Coastguard Worker 
19*5a923131SAndroid Build Coastguard Worker #include <string>
20*5a923131SAndroid Build Coastguard Worker #include <utility>
21*5a923131SAndroid Build Coastguard Worker 
22*5a923131SAndroid Build Coastguard Worker #include <gtest/gtest.h>
23*5a923131SAndroid Build Coastguard Worker 
24*5a923131SAndroid Build Coastguard Worker #include "update_engine/common/action_processor.h"
25*5a923131SAndroid Build Coastguard Worker 
26*5a923131SAndroid Build Coastguard Worker using std::string;
27*5a923131SAndroid Build Coastguard Worker 
28*5a923131SAndroid Build Coastguard Worker namespace chromeos_update_engine {
29*5a923131SAndroid Build Coastguard Worker 
30*5a923131SAndroid Build Coastguard Worker using chromeos_update_engine::ActionPipe;
31*5a923131SAndroid Build Coastguard Worker 
32*5a923131SAndroid Build Coastguard Worker class ActionTestAction;
33*5a923131SAndroid Build Coastguard Worker 
34*5a923131SAndroid Build Coastguard Worker template <>
35*5a923131SAndroid Build Coastguard Worker class ActionTraits<ActionTestAction> {
36*5a923131SAndroid Build Coastguard Worker  public:
37*5a923131SAndroid Build Coastguard Worker   typedef string OutputObjectType;
38*5a923131SAndroid Build Coastguard Worker   typedef string InputObjectType;
39*5a923131SAndroid Build Coastguard Worker };
40*5a923131SAndroid Build Coastguard Worker 
41*5a923131SAndroid Build Coastguard Worker // This is a simple Action class for testing.
42*5a923131SAndroid Build Coastguard Worker class ActionTestAction : public Action<ActionTestAction> {
43*5a923131SAndroid Build Coastguard Worker  public:
44*5a923131SAndroid Build Coastguard Worker   typedef string InputObjectType;
45*5a923131SAndroid Build Coastguard Worker   typedef string OutputObjectType;
in_pipe()46*5a923131SAndroid Build Coastguard Worker   ActionPipe<string>* in_pipe() { return in_pipe_.get(); }
out_pipe()47*5a923131SAndroid Build Coastguard Worker   ActionPipe<string>* out_pipe() { return out_pipe_.get(); }
processor()48*5a923131SAndroid Build Coastguard Worker   ActionProcessor* processor() { return processor_; }
PerformAction()49*5a923131SAndroid Build Coastguard Worker   void PerformAction() {}
CompleteAction()50*5a923131SAndroid Build Coastguard Worker   void CompleteAction() {
51*5a923131SAndroid Build Coastguard Worker     ASSERT_TRUE(processor());
52*5a923131SAndroid Build Coastguard Worker     processor()->ActionComplete(this, ErrorCode::kSuccess);
53*5a923131SAndroid Build Coastguard Worker   }
Type() const54*5a923131SAndroid Build Coastguard Worker   string Type() const { return "ActionTestAction"; }
55*5a923131SAndroid Build Coastguard Worker };
56*5a923131SAndroid Build Coastguard Worker 
57*5a923131SAndroid Build Coastguard Worker class ActionTest : public ::testing::Test {};
58*5a923131SAndroid Build Coastguard Worker 
59*5a923131SAndroid Build Coastguard Worker // This test creates two simple Actions and sends a message via an ActionPipe
60*5a923131SAndroid Build Coastguard Worker // from one to the other.
TEST(ActionTest,SimpleTest)61*5a923131SAndroid Build Coastguard Worker TEST(ActionTest, SimpleTest) {
62*5a923131SAndroid Build Coastguard Worker   auto action = std::make_unique<ActionTestAction>();
63*5a923131SAndroid Build Coastguard Worker   auto action_ptr = action.get();
64*5a923131SAndroid Build Coastguard Worker   EXPECT_FALSE(action->in_pipe());
65*5a923131SAndroid Build Coastguard Worker   EXPECT_FALSE(action->out_pipe());
66*5a923131SAndroid Build Coastguard Worker   EXPECT_FALSE(action->processor());
67*5a923131SAndroid Build Coastguard Worker   EXPECT_FALSE(action->IsRunning());
68*5a923131SAndroid Build Coastguard Worker 
69*5a923131SAndroid Build Coastguard Worker   ActionProcessor action_processor;
70*5a923131SAndroid Build Coastguard Worker   action_processor.EnqueueAction(std::move(action));
71*5a923131SAndroid Build Coastguard Worker   EXPECT_EQ(&action_processor, action_ptr->processor());
72*5a923131SAndroid Build Coastguard Worker   action_processor.StartProcessing();
73*5a923131SAndroid Build Coastguard Worker   EXPECT_TRUE(action_ptr->IsRunning());
74*5a923131SAndroid Build Coastguard Worker   action_ptr->CompleteAction();
75*5a923131SAndroid Build Coastguard Worker }
76*5a923131SAndroid Build Coastguard Worker 
77*5a923131SAndroid Build Coastguard Worker }  // namespace chromeos_update_engine
78