| #ifndef PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_TEST_UTIL_H_ |
| #define PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_TEST_UTIL_H_ |
| |
| #include "gmock/gmock.h" |
| #include "absl/status/status.h" |
| #include "absl/status/statusor.h" |
| |
| namespace testing::status { |
| // NOTE does not use the message in the status. |
| MATCHER_P(StatusIs, statusIn, "") { |
| *result_listener << "returning status code " << arg << " instead of " |
| << statusIn; |
| return (arg.code() == statusIn); |
| } |
| |
| namespace internal { |
| inline const absl::Status& GetStatus(const absl::Status& status) { |
| return status; |
| } |
| |
| template <typename T> |
| inline const absl::Status& GetStatus(const absl::StatusOr<T>& status) { |
| return status.status(); |
| } |
| } // namespace internal |
| |
| #define ASSERT_OK(expr) \ |
| ASSERT_THAT(testing::status::internal::GetStatus(expr), \ |
| testing::status::StatusIs(absl::StatusCode::kOk)) |
| |
| #define ASSERT_OK_AND_ASSIGN_CT(lhs, expr, ct) \ |
| decltype(expr) status_or_##ct; \ |
| do { \ |
| status_or_##ct = (expr); \ |
| ASSERT_OK(status_or_##ct); \ |
| } while (0); \ |
| lhs = std::move(status_or_##ct).value() |
| |
| #define ASSERT_OK_AND_ASSIGN_CT_pre(lhs, exp, ct) \ |
| ASSERT_OK_AND_ASSIGN_CT(lhs, exp, ct) |
| |
| #define ASSERT_OK_AND_ASSIGN(lhs, expr) \ |
| ASSERT_OK_AND_ASSIGN_CT_pre(lhs, expr, __COUNTER__) |
| |
| } // namespace testing::status |
| |
| #endif // PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_TEST_UTIL_H_ |