nighthawk
nighthawk copied to clipboard
Investigate textproto parsing, absl::Status matchers, and similar unit test conveniences
Instead of:
FakeMetricsPluginConfig metrics_plugin_config;
FakeMetricsPluginConfig::FakeMetric* fake_metric =
metrics_plugin_config.mutable_fake_metrics()->Add();
fake_metric->set_name(kMetricName);
fake_metric->mutable_error_status()->set_code(
static_cast<int>(absl::StatusCode::kPermissionDenied));
fake_metric->mutable_error_status()->set_message("expected status message");
we would like to have:
FakeMetricsPluginConfig metrics_plugin_config = MAGIC(R"proto(
fake_metrics {
error_status {
code: PERMISSION_DENIED
message: "expected status message"
}
}
)proto");
Instead of:
ASSERT_TRUE(output_or.ok());
EXPECT_EQ(output_or.value().myfield(), "field value");
ASSERT_FALSE(output_or.ok());
EXPECT_EQ(output_or.status().code(), absl::StatusCode::kDataLoss);
EXPECT_EQ(output_or.status().message(), "artificial spec error");
we would like to have:
EXPECT_THAT(output_or, IsOkAndHolds(R"proto(
myfield: "field value"
)proto"));
EXPECT_THAT(output_or, StatusIs(absl::StatusCode::kDataLoss, "artificial spec error");
With one of the main features being that if the status is unexpectedly not ok, the details of the status are logged automatically.