blob: 85b9e98ced3e386f24c42e020c8c8e7e6efaed15 [file]
#include "bmc/register_actions_bmc.h"
#include <safepower_agent.pb.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "absl/log/log.h"
#include "action_context.h"
#include "state_updater.h"
namespace safepower_agent {
namespace {
bool isASanEnabled() {
return std::getenv("ASAN_OPTIONS") != nullptr;
}
using safepower_agent_proto::ActionType;
using safepower_agent_proto::ActionSeverity;
TEST(RegisterActionsTest, RegisterAction ) {
if (isASanEnabled())
{
LOG(ERROR) << "b/349393089 absl::map insert fails asan" << std::endl;
GTEST_SKIP() << "Skipping test in ASan environment.";
// TODO b/349393089 absl::map insert fails asan
// Error message //https://paste.googleplex.com/6557456877748224
}
safepower_agent_proto::SystemState initialState;
auto reactor =
std::make_shared<StateUpdater<safepower_agent_proto::SystemState>>(
std::move(initialState), true);
auto action_context_manager =
std::make_unique<safepower_agent::ActionContextManager>(reactor);
safepower_agent_config::SafePowerAgentConfig safepower_agent_config;
std::vector<std::tuple<ActionType,
ActionSeverity, std::string, std::string> > data = {
{
{safepower_agent_proto::ACTION_TYPE_CYCLE},
{safepower_agent_proto::ACTION_SEVERITY_FORCE},
{"/redfish/v1/Systems/system/Actions/ComputerSystem.Reset"},
{"/{\"ResetType\":\"ForceRestart\"/}"}},
{
{safepower_agent_proto::ACTION_TYPE_CYCLE},
{safepower_agent_proto::ACTION_SEVERITY_GRACEFUL},
{"/redfish/v1/Systems/system/Actions/ComputerSystem.Reset"},
{"/{\"ResetType\":\"GracefulRestart\"/}"}}
};
for (auto [action_type, action_severity, uri, json_body] : data) {
safepower_agent_config::ActionConfig* action_config =
safepower_agent_config.add_action_configs();
action_config->mutable_action()->set_action_type(action_type);
action_config->mutable_action()->set_action_severity(action_severity);
action_config->mutable_redfish()->set_uri(uri);
action_config->mutable_redfish()->set_json_body(json_body);
};
(void)RegisterActionFromConfig(action_context_manager.get(),
safepower_agent_config);
safepower_agent_proto::GetSupportedActionsResponse response;
action_context_manager->GetSupportedActions(response);
EXPECT_EQ(response.actions_size(), 2);
for (const auto& action : response.actions()) {
EXPECT_EQ(action.action_type(), safepower_agent_proto::ACTION_TYPE_CYCLE);
EXPECT_THAT(action.action_severity(), testing::AnyOf(
safepower_agent_proto::ACTION_SEVERITY_FORCE,
safepower_agent_proto::ACTION_SEVERITY_GRACEFUL));
}
}
} // namespace
} // namespace safepower_agent