23 #include "absl/strings/str_cat.h"
24 #include "absl/strings/string_view.h"
25 #include "gmock/gmock.h"
26 #include "gtest/gtest.h"
27 #include "opencensus/stats/stats.h"
28 #include "opencensus/stats/tag_key.h"
29 #include "opencensus/stats/testing/test_utils.h"
30 #include "opencensus/tags/tag_map.h"
31 #include "opencensus/tags/with_tag_map.h"
38 #include "src/proto/grpc/testing/echo.grpc.pb.h"
46 using ::opencensus::stats::Aggregation;
47 using ::opencensus::stats::Distribution;
49 using ::opencensus::stats::ViewDescriptor;
50 using ::opencensus::stats::testing::TestUtils;
51 using ::opencensus::tags::TagKey;
52 using ::opencensus::tags::WithTagMap;
54 const auto TEST_TAG_KEY = TagKey::Register(
"my_key");
55 const auto TEST_TAG_VALUE =
"my_value";
56 const char* kExpectedTraceIdKey =
"expected_trace_id";
67 ServerReaderWriter<EchoResponse, EchoRequest>*
stream)
override {
75 if (
metadata.first == kExpectedTraceIdKey) {
92 void SetUp()
override {
111 void ResetStub(std::shared_ptr<Channel>
channel) {
115 void TearDown()
override {
120 void RunServerLoop() {
server_->Wait(); }
130 std::unique_ptr<EchoTestService::Stub>
stub_;
133 TEST_F(StatsPluginEnd2EndTest, ErrorCount) {
134 const auto client_method_descriptor =
137 .set_name(
"client_method")
140 .add_column(TEST_TAG_KEY);
141 View client_method_view(client_method_descriptor);
142 const auto server_method_descriptor =
145 .set_name(
"server_method")
149 View server_method_view(server_method_descriptor);
151 const auto client_status_descriptor =
154 .set_name(
"client_status")
157 .add_column(TEST_TAG_KEY);
158 View client_status_view(client_status_descriptor);
159 const auto server_status_descriptor =
162 .set_name(
"server_status")
165 View server_status_view(server_status_descriptor);
168 for (
int i = 0;
i <= 16; ++
i) {
171 request.mutable_param()->mutable_expected_error()->set_code(
i);
175 WithTagMap
tags({{TEST_TAG_KEY, TEST_TAG_VALUE}});
184 client_method_view.GetData().int_data(),
188 EXPECT_THAT(server_method_view.GetData().int_data(),
243 EXPECT_THAT(client_status_view.GetData().int_data(),
245 EXPECT_THAT(server_status_view.GetData().int_data(),
249 TEST_F(StatsPluginEnd2EndTest, RequestReceivedBytesPerRpc) {
251 View client_received_bytes_per_rpc_view(
254 View server_received_bytes_per_rpc_view(
269 EXPECT_THAT(client_received_bytes_per_rpc_view.GetData().distribution_data(),
275 EXPECT_THAT(client_sent_bytes_per_rpc_view.GetData().distribution_data(),
281 EXPECT_THAT(server_received_bytes_per_rpc_view.GetData().distribution_data(),
287 EXPECT_THAT(server_sent_bytes_per_rpc_view.GetData().distribution_data(),
295 TEST_F(StatsPluginEnd2EndTest, Latency) {
318 client_latency_view.GetData().distribution_data(),
328 const auto client_latency = client_latency_view.GetData()
333 client_server_latency_view.GetData().distribution_data(),
344 const auto client_elapsed_time = client_server_latency_view.GetData()
349 server_server_latency_view.GetData().distribution_data(),
358 TEST_F(StatsPluginEnd2EndTest, CompletedRpcs) {
366 for (
int i = 0;
i <
count; ++
i) {
376 EXPECT_THAT(client_completed_rpcs_view.GetData().int_data(),
379 EXPECT_THAT(server_completed_rpcs_view.GetData().int_data(),
392 EXPECT_THAT(client_completed_rpcs_view.GetData().int_data(),
395 "grpc.testing.EchoTestService/BidiStream",
"CANCELLED"),
399 TEST_F(StatsPluginEnd2EndTest, RequestReceivedMessagesPerRpc) {
401 View client_received_messages_per_rpc_view(
403 View client_sent_messages_per_rpc_view(
405 View server_received_messages_per_rpc_view(
407 View server_sent_messages_per_rpc_view(
414 for (
int i = 0;
i <
count; ++
i) {
425 client_received_messages_per_rpc_view.GetData().distribution_data(),
432 client_sent_messages_per_rpc_view.GetData().distribution_data(),
439 server_received_messages_per_rpc_view.GetData().distribution_data(),
446 server_sent_messages_per_rpc_view.GetData().distribution_data(),
455 TEST_F(StatsPluginEnd2EndTest, TestRetryStatsWithoutAdditionalRetries) {
457 View client_transparent_retries_cumulative_view(
464 for (
int i = 0;
i <
count; ++
i) {
474 client_retries_cumulative_view.GetData().int_data(),
478 client_transparent_retries_cumulative_view.GetData().int_data(),
482 client_retry_delay_per_call_view.GetData().distribution_data(),
489 TEST_F(StatsPluginEnd2EndTest, TestRetryStatsWithAdditionalRetries) {
491 View client_transparent_retries_cumulative_view(
494 ChannelArguments
args;
497 " \"methodConfig\": [ {\n"
499 " { \"service\": \"grpc.testing.EchoTestService\" }\n"
501 " \"retryPolicy\": {\n"
502 " \"maxAttempts\": 3,\n"
503 " \"initialBackoff\": \"0.1s\",\n"
504 " \"maxBackoff\": \"120s\",\n"
505 " \"backoffMultiplier\": 1,\n"
506 " \"retryableStatusCodes\": [ \"ABORTED\" ]\n"
514 request.mutable_param()->mutable_expected_error()->set_code(
519 for (
int i = 0;
i <
count; ++
i) {
527 EXPECT_THAT(client_retries_cumulative_view.GetData().int_data(),
532 client_transparent_retries_cumulative_view.GetData().int_data(),
535 auto data = client_retry_delay_per_call_view.GetData().distribution_data();
536 for (
const auto& entry :
data) {
538 entry.second.mean());
542 client_retry_delay_per_call_view.GetData().distribution_data(),
552 TEST_F(StatsPluginEnd2EndTest, TestApplicationCensusContextFlows) {
563 app_census_context.Span().context().trace_id().ToHex());
572 int main(
int argc,
char** argv) {