diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c42e6428..b919e8a9 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -316,3 +316,20 @@ if(BUILD_SDK) ) endif() endif() + +if(BUILD_SDK_COMMANDS) + add_testsuite(Commands + SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/runner.cxx + commands/_commands.cxx + + LINKS + Commands + StateMachine + Tools + INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + TIMEOUT 30 + ${definitions} + ) +endif() diff --git a/test/commands/_commands.cxx b/test/commands/_commands.cxx new file mode 100644 index 00000000..79ba30d6 --- /dev/null +++ b/test/commands/_commands.cxx @@ -0,0 +1,195 @@ +/******************************************************************************** + * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * * + * This software is distributed under the terms of the * + * GNU Lesser General Public Licence (LGPL) version 3, * + * copied verbatim in the file "LICENSE" * + ********************************************************************************/ + +#include +#include + +#include + +namespace +{ + +using namespace fair::mq; +using namespace fair::mq::sdk::cmd; + +TEST(Format, Construction) +{ + Cmds checkStateCmds(make()); + Cmds changeStateCmds(make(Transition::Stop)); + Cmds dumpConfigCmds(make()); + Cmds subscribeToHeartbeatsCmds(make()); + Cmds unsubscribeFromHeartbeatsCmds(make()); + Cmds subscribeToStateChangeCmds(make()); + Cmds unsubscribeFromStateChangeCmds(make()); + Cmds stateChangeExitingReceivedCmds(make()); + Cmds currentStateCmds(make("somedeviceid", State::Running)); + Cmds transitionStatusCmds(make("somedeviceid", Result::Ok, Transition::Stop)); + Cmds configCmds(make("somedeviceid", "someconfig")); + Cmds heartbeatSubscriptionCmds(make("somedeviceid", Result::Ok)); + Cmds heartbeatUnsubscriptionCmds(make("somedeviceid", Result::Ok)); + Cmds heartbeatCmds(make("somedeviceid")); + Cmds stateChangeSubscriptionCmds(make("somedeviceid", Result::Ok)); + Cmds stateChangeUnsubscriptionCmds(make("somedeviceid", Result::Ok)); + Cmds stateChangeCmds(make("somedeviceid", 123456, State::Running, State::Ready)); + + ASSERT_EQ(checkStateCmds.At(0).GetType(), Type::check_state); + ASSERT_EQ(changeStateCmds.At(0).GetType(), Type::change_state); + ASSERT_EQ(static_cast(changeStateCmds.At(0)).GetTransition(), Transition::Stop); + ASSERT_EQ(dumpConfigCmds.At(0).GetType(), Type::dump_config); + ASSERT_EQ(subscribeToHeartbeatsCmds.At(0).GetType(), Type::subscribe_to_heartbeats); + ASSERT_EQ(unsubscribeFromHeartbeatsCmds.At(0).GetType(), Type::unsubscribe_from_heartbeats); + ASSERT_EQ(subscribeToStateChangeCmds.At(0).GetType(), Type::subscribe_to_state_change); + ASSERT_EQ(unsubscribeFromStateChangeCmds.At(0).GetType(), Type::unsubscribe_from_state_change); + ASSERT_EQ(stateChangeExitingReceivedCmds.At(0).GetType(), Type::state_change_exiting_received); + ASSERT_EQ(currentStateCmds.At(0).GetType(), Type::current_state); + ASSERT_EQ(static_cast(currentStateCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(currentStateCmds.At(0)).GetCurrentState(), State::Running); + ASSERT_EQ(transitionStatusCmds.At(0).GetType(), Type::transition_status); + ASSERT_EQ(static_cast(transitionStatusCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(transitionStatusCmds.At(0)).GetResult(), Result::Ok); + ASSERT_EQ(static_cast(transitionStatusCmds.At(0)).GetTransition(), Transition::Stop); + ASSERT_EQ(configCmds.At(0).GetType(), Type::config); + ASSERT_EQ(static_cast(configCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(configCmds.At(0)).GetConfig(), "someconfig"); + ASSERT_EQ(heartbeatSubscriptionCmds.At(0).GetType(), Type::heartbeat_subscription); + ASSERT_EQ(static_cast(heartbeatSubscriptionCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(heartbeatSubscriptionCmds.At(0)).GetResult(), Result::Ok); + ASSERT_EQ(heartbeatUnsubscriptionCmds.At(0).GetType(), Type::heartbeat_unsubscription); + ASSERT_EQ(static_cast(heartbeatUnsubscriptionCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(heartbeatUnsubscriptionCmds.At(0)).GetResult(), Result::Ok); + ASSERT_EQ(heartbeatCmds.At(0).GetType(), Type::heartbeat); + ASSERT_EQ(static_cast(heartbeatCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(stateChangeSubscriptionCmds.At(0).GetType(), Type::state_change_subscription); + ASSERT_EQ(static_cast(stateChangeSubscriptionCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(stateChangeSubscriptionCmds.At(0)).GetResult(), Result::Ok); + ASSERT_EQ(stateChangeUnsubscriptionCmds.At(0).GetType(), Type::state_change_unsubscription); + ASSERT_EQ(static_cast(stateChangeUnsubscriptionCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(stateChangeUnsubscriptionCmds.At(0)).GetResult(), Result::Ok); + ASSERT_EQ(stateChangeCmds.At(0).GetType(), Type::state_change); + ASSERT_EQ(static_cast(stateChangeCmds.At(0)).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(stateChangeCmds.At(0)).GetTaskId(), 123456); + ASSERT_EQ(static_cast(stateChangeCmds.At(0)).GetLastState(), State::Running); + ASSERT_EQ(static_cast(stateChangeCmds.At(0)).GetCurrentState(), State::Ready); +} + +TEST(Format, Serialization) +{ + Cmds outCmds; + + outCmds.Add(); + outCmds.Add(Transition::Stop); + outCmds.Add(); + outCmds.Add(); + outCmds.Add(); + outCmds.Add(); + outCmds.Add(); + outCmds.Add(); + outCmds.Add("somedeviceid", State::Running); + outCmds.Add("somedeviceid", Result::Ok, Transition::Stop); + outCmds.Add("somedeviceid", "someconfig"); + outCmds.Add("somedeviceid", Result::Ok); + outCmds.Add("somedeviceid", Result::Ok); + outCmds.Add("somedeviceid"); + outCmds.Add("somedeviceid", Result::Ok); + outCmds.Add("somedeviceid", Result::Ok); + outCmds.Add("somedeviceid", 123456, State::Running, State::Ready); + + std::string buffer(outCmds.Serialize()); + + Cmds inCmds; + + inCmds.Deserialize(buffer); + + ASSERT_EQ(inCmds.Size(), 17); + + int count = 0; + + for (const auto& cmd : inCmds) { + switch (cmd->GetType()) { + case Type::check_state: + ++count; + break; + case Type::change_state: + ++count; + ASSERT_EQ(static_cast(*cmd).GetTransition(), Transition::Stop); + break; + case Type::dump_config: + ++count; + break; + case Type::subscribe_to_heartbeats: + ++count; + break; + case Type::unsubscribe_from_heartbeats: + ++count; + break; + case Type::subscribe_to_state_change: + ++count; + break; + case Type::unsubscribe_from_state_change: + ++count; + break; + case Type::state_change_exiting_received: + ++count; + break; + case Type::current_state: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetCurrentState(), State::Running); + break; + case Type::transition_status: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetResult(), Result::Ok); + ASSERT_EQ(static_cast(*cmd).GetTransition(), Transition::Stop); + break; + case Type::config: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetConfig(), "someconfig"); + break; + case Type::heartbeat_subscription: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetResult(), Result::Ok); + break; + case Type::heartbeat_unsubscription: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetResult(), Result::Ok); + break; + case Type::heartbeat: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + break; + case Type::state_change_subscription: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetResult(), Result::Ok); + break; + case Type::state_change_unsubscription: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetResult(), Result::Ok); + break; + case Type::state_change: + ++count; + ASSERT_EQ(static_cast(*cmd).GetDeviceId(), "somedeviceid"); + ASSERT_EQ(static_cast(*cmd).GetTaskId(), 123456); + ASSERT_EQ(static_cast(*cmd).GetLastState(), State::Running); + ASSERT_EQ(static_cast(*cmd).GetCurrentState(), State::Ready); + break; + default: + ASSERT_TRUE(false); + break; + } + } + + ASSERT_EQ(count, 17); +} + +} // namespace