Roll forward cl/707228705
The unit test had a typo resulting in malformed json. It looks like the test wasn't added to the test list in meson.build.
Automated g4 rollback of changelist 707697181.
*** Reason for rollback ***
Rolling forward with fixed tests
*** Original change description ***
Automated g4 rollback of changelist 707228705.
*** Reason for rollback ***
Failing https://tap.corp.google.com/node_os
*** Original change description ***
#gpowerd - Add build target for register_actions
***
***
PiperOrigin-RevId: 715497339
Change-Id: I6dc063506ab169e09206d10dee446407dec7adc6
diff --git a/bmc/register_actions_bmc.cc b/bmc/register_actions_bmc.cc
index c394477..f5097ec 100644
--- a/bmc/register_actions_bmc.cc
+++ b/bmc/register_actions_bmc.cc
@@ -1,23 +1,29 @@
#include "bmc/register_actions_bmc.h"
-#include <nlohmann/json.hpp>
-#include <safepower_agent.h>
-#include <safepower_agent.pb.h>
-#include <safepower_agent_config.pb.h>
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <string_view>
+#include <utility>
+#include <vector>
+#include "action_context.h"
+#include "bmc/http_connection.h"
#include "absl/functional/any_invocable.h"
+#include "absl/log/log.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_split.h"
+#include "absl/strings/string_view.h"
-#include "bmc/http_connection.h"
+// NOLINTBEGIN(readability/boost)
+#include "boost/asio/ip/tcp.hpp"
+#include "boost/beast/core.hpp"
+#include "boost/beast/http.hpp"
+// NOLINTEND(readability/boost)
-#include "action_context.h"
-#include "bmc/redfish.h"
-
-#include "boost/asio/ip/tcp.hpp" // NOLINT
-#include "boost/beast/core.hpp" // NOLINT
-#include "boost/beast/http.hpp" // NOLINT
+#include "nlohmann/json.hpp"
+#include "nlohmann/json_fwd.hpp"
namespace safepower_agent {
@@ -49,36 +55,31 @@
return absl::OkStatus();
} else {
LOG(ERROR) << "Failed to power off :" << *message_id;
- return absl::NotFoundError("Failed to power off :"
- + message_id->dump());
+ return absl::NotFoundError("Failed to power off :" + message_id->dump());
}
}
// runs when then action is called, perform the action
inline void GenericRedfishPowerOperation(
- absl::string_view uri, nlohmann::json body,
- std::string_view ip, uint16_t port,
- absl::AnyInvocable<void(absl::Status) &&> cb,
- const safepower_agent_proto::Action& )
- {
+ absl::string_view uri, nlohmann::json body, std::string_view ip,
+ uint16_t port, absl::AnyInvocable<void(absl::Status) &&> cb,
+ const safepower_agent_proto::Action&) {
LOG(INFO) << "Redfish action " << ip << ":" << port << " " <<
uri << " " << body;
auto connection = std::make_shared<HttpConnection>();
- connection->PerformConnection(http::verb::post,
- uri,
- [callback = std::move(cb)]
- (absl::StatusOr<nlohmann::json> js) mutable {
- absl::Status status = GenericRedfishParser(js);
- std::move(callback)(status);
- }, body,
- ip, port);
- }
+ connection->PerformConnection(
+ http::verb::post, uri,
+ [callback = std::move(cb)](absl::StatusOr<nlohmann::json> js) mutable {
+ absl::Status status = GenericRedfishParser(js);
+ std::move(callback)(status);
+ },
+ body, ip, port);
+}
// runs at startup to register all actions from the config
absl::Status RegisterActionFromConfig(
ActionContextManager* action_context_manager,
- const SafePowerAgentConfig& config)
- {
+ const SafePowerAgentConfig& config) {
for (const auto& action_config : config.action_configs()) {
safepower_agent_proto::Action action_to_register = action_config.action();
// The config will map actions to redfish (uris and body)
@@ -90,11 +91,11 @@
LOG(ERROR) << "Failed to parse json body: " <<
action_config.redfish().json_body();
return absl::InvalidArgumentError("Failed to parse json body: " +
- action_config.redfish().json_body());
+ action_config.redfish().json_body());
}
std::string uri = action_config.redfish().uri();
uint32_t port = action_config.redfish().port();
- if (port > 65535){
+ if (port > 65535) {
LOG(ERROR) << "Port number is invalid: " << port;
return absl::InvalidArgumentError("Port number is invalid: " +
std::to_string(port));
@@ -103,20 +104,19 @@
LOG(INFO) << "registering " << action_config.action_name() << " "
<< ip << ":" << port << " " << uri << " " << body;
- absl::Status action_status = action_context_manager->
- RegisterAction(action_to_register,
- [uri, body, port, ip]
- (const safepower_agent_proto::Action& a,
- absl::AnyInvocable<void(absl::Status) &&> cb) {
- GenericRedfishPowerOperation(uri, body, ip, port, std::move(cb), a);
- });
+ absl::Status action_status = action_context_manager->RegisterAction(
+ action_to_register,
+ [uri, body, port, ip](const safepower_agent_proto::Action& a,
+ absl::AnyInvocable<void(absl::Status) &&> cb) {
+ GenericRedfishPowerOperation(uri, body, ip, port, std::move(cb), a);
+ });
- if (!action_status.ok()){
- LOG(ERROR) << "Unable to register action :" << action_status;
- return action_status;
- }
+ if (!action_status.ok()) {
+ LOG(ERROR) << "Unable to register action :" << action_status;
+ return action_status;
}
- LOG(INFO) << "All actions registered";
- return absl::OkStatus();
}
+ LOG(INFO) << "All actions registered";
+ return absl::OkStatus();
+}
} // namespace safepower_agent
diff --git a/bmc/register_actions_bmc.h b/bmc/register_actions_bmc.h
index b19f2ca..f8314af 100644
--- a/bmc/register_actions_bmc.h
+++ b/bmc/register_actions_bmc.h
@@ -1,12 +1,10 @@
#ifndef PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_REGISTER_ACTIONS_BMC_H_
#define PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_REGISTER_ACTIONS_BMC_H_
-#include <safepower_agent.pb.h>
-#include <safepower_agent_config.pb.h>
-
+#include "action_context.h"
+#include "safepower_agent_config.pb.h"
#include "absl/functional/any_invocable.h"
#include "absl/status/status.h"
-#include "action_context.h"
namespace safepower_agent {
diff --git a/bmc/register_actions_bmc_test.cc b/bmc/register_actions_bmc_test.cc
index 85b9e98..7ac9aa3 100644
--- a/bmc/register_actions_bmc_test.cc
+++ b/bmc/register_actions_bmc_test.cc
@@ -1,53 +1,55 @@
+
+
#include "bmc/register_actions_bmc.h"
-#include <safepower_agent.pb.h>
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
+#include <cstdlib>
+#include <memory>
+#include <ostream>
+#include <string>
+#include <tuple>
+#include <utility>
+#include <vector>
-#include "absl/log/log.h"
#include "action_context.h"
+#include "safepower_agent_config.pb.h"
#include "state_updater.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "absl/log/log.h"
namespace safepower_agent {
namespace {
-bool isASanEnabled() {
- return std::getenv("ASAN_OPTIONS") != nullptr;
-}
-using safepower_agent_proto::ActionType;
+bool isASanEnabled() { return std::getenv("ASAN_OPTIONS") != nullptr; }
using safepower_agent_proto::ActionSeverity;
+using safepower_agent_proto::ActionType;
-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);
+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) {
+ 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);
@@ -57,20 +59,20 @@
};
(void)RegisterActionFromConfig(action_context_manager.get(),
- safepower_agent_config);
+ 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));
+ EXPECT_THAT(
+ action.action_severity(),
+ testing::AnyOf(safepower_agent_proto::ACTION_SEVERITY_FORCE,
+ safepower_agent_proto::ACTION_SEVERITY_GRACEFUL));
}
}
-
} // namespace
} // namespace safepower_agent