blob: 6b74359b4ff9e312feec10a377211797fe0b8e15 [file] [log] [blame]
#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_