/******************************************************************************** * 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); } void fillCommands(Cmds& cmds) { cmds.Add(); cmds.Add(Transition::Stop); cmds.Add(); cmds.Add(); cmds.Add(); cmds.Add(); cmds.Add(); cmds.Add(); cmds.Add("somedeviceid", State::Running); cmds.Add("somedeviceid", Result::Ok, Transition::Stop); cmds.Add("somedeviceid", "someconfig"); cmds.Add("somedeviceid", Result::Ok); cmds.Add("somedeviceid", Result::Ok); cmds.Add("somedeviceid"); cmds.Add("somedeviceid", Result::Ok); cmds.Add("somedeviceid", Result::Ok); cmds.Add("somedeviceid", 123456, State::Running, State::Ready); } void checkCommands(Cmds& cmds) { ASSERT_EQ(cmds.Size(), 17); int count = 0; for (const auto& cmd : cmds) { 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); } TEST(Format, SerializationBinary) { Cmds outCmds; fillCommands(outCmds); std::string buffer(outCmds.Serialize()); Cmds inCmds; inCmds.Deserialize(buffer); checkCommands(inCmds); } TEST(Format, SerializationJSON) { Cmds outCmds; fillCommands(outCmds); std::string buffer(outCmds.Serialize(Format::JSON)); Cmds inCmds; inCmds.Deserialize(buffer, Format::JSON); checkCommands(inCmds); } } // namespace