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 WorkerTEST(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