From 5f2d43074471c37e21b432df4eb11de9c37e4917 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Tue, 27 Feb 2018 12:05:05 -0500 Subject: [PATCH] Fix tests for lightstep_tracer_impl. Signed-off-by: Ryan Burn --- .../common/tracing/lightstep_tracer_impl.cc | 8 +++- .../tracing/lightstep_tracer_impl_test.cc | 44 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/source/common/tracing/lightstep_tracer_impl.cc b/source/common/tracing/lightstep_tracer_impl.cc index 33a6ea8ad991..6d3b4069dec0 100644 --- a/source/common/tracing/lightstep_tracer_impl.cc +++ b/source/common/tracing/lightstep_tracer_impl.cc @@ -64,8 +64,6 @@ void LightStepDriver::LightStepTransporter::onSuccess(Http::MessagePtr&& respons active_request_ = nullptr; Grpc::Common::validateResponse(*response); - Grpc::Common::chargeStat(*driver_.cluster(), lightstep::CollectorServiceFullName(), - lightstep::CollectorMethodName(), true); // http://www.grpc.io/docs/guides/wire.html // First 5 bytes contain the message header. response->body()->drain(5); @@ -73,11 +71,17 @@ void LightStepDriver::LightStepTransporter::onSuccess(Http::MessagePtr&& respons if (!active_response_->ParseFromZeroCopyStream(&stream)) { throw EnvoyException("Failed to parse LightStep collector response"); } + Grpc::Common::chargeStat(*driver_.cluster(), lightstep::CollectorServiceFullName(), + lightstep::CollectorMethodName(), true); active_callback_->OnSuccess(); } catch (const Grpc::Exception& ex) { Grpc::Common::chargeStat(*driver_.cluster(), lightstep::CollectorServiceFullName(), lightstep::CollectorMethodName(), false); active_callback_->OnFailure(std::make_error_code(std::errc::network_down)); + } catch (const EnvoyException& ex) { + Grpc::Common::chargeStat(*driver_.cluster(), lightstep::CollectorServiceFullName(), + lightstep::CollectorMethodName(), false); + active_callback_->OnFailure(std::make_error_code(std::errc::bad_message)); } } diff --git a/test/common/tracing/lightstep_tracer_impl_test.cc b/test/common/tracing/lightstep_tracer_impl_test.cc index 94bd02be5164..67c36149d19a 100644 --- a/test/common/tracing/lightstep_tracer_impl_test.cc +++ b/test/common/tracing/lightstep_tracer_impl_test.cc @@ -245,12 +245,54 @@ TEST_F(LightStepDriverTest, FlushOneFailure) { first_span->finishSpan(); + callback->onFailure(Http::AsyncClient::FailureReason::Reset); + + EXPECT_EQ(1U, cm_.thread_local_cluster_.cluster_.info_->stats_store_ + .counter("grpc.lightstep.collector.CollectorService.Report.failure") + .value()); + EXPECT_EQ(1U, cm_.thread_local_cluster_.cluster_.info_->stats_store_ + .counter("grpc.lightstep.collector.CollectorService.Report.total") + .value()); + EXPECT_EQ(1U, stats_.counter("tracing.lightstep.spans_sent").value()); +} + +TEST_F(LightStepDriverTest, FlushOneInvalidResponse) { + setupValidDriver(); + + Http::MockAsyncClientRequest request(&cm_.async_client_); + Http::AsyncClient::Callbacks* callback; + const Optional timeout(std::chrono::seconds(5)); + + EXPECT_CALL(cm_.async_client_, send_(_, _, timeout)) + .WillOnce( + Invoke([&](Http::MessagePtr& message, Http::AsyncClient::Callbacks& callbacks, + const Optional&) -> Http::AsyncClient::Request* { + callback = &callbacks; + + EXPECT_STREQ("/lightstep.collector.CollectorService/Report", + message->headers().Path()->value().c_str()); + EXPECT_STREQ("fake_cluster", message->headers().Host()->value().c_str()); + EXPECT_STREQ("application/grpc", message->headers().ContentType()->value().c_str()); + + return &request; + })); + + EXPECT_CALL(runtime_.snapshot_, getInteger("tracing.lightstep.min_flush_spans", 5)) + .WillOnce(Return(1)); + EXPECT_CALL(runtime_.snapshot_, getInteger("tracing.lightstep.request_timeout", 5000U)) + .WillOnce(Return(5000U)); + + SpanPtr first_span = driver_->startSpan(config_, request_headers_, operation_name_, start_time_); + + first_span->finishSpan(); + Http::MessagePtr msg(new Http::ResponseMessageImpl( Http::HeaderMapPtr{new Http::TestHeaderMapImpl{{":status", "200"}}})); msg->trailers(Http::HeaderMapPtr{new Http::TestHeaderMapImpl{{"grpc-status", "0"}}}); + msg->body() = std::make_unique("invalidresponse"); - callback->onFailure(Http::AsyncClient::FailureReason::Reset); + callback->onSuccess(std::move(msg)); EXPECT_EQ(1U, cm_.thread_local_cluster_.cluster_.info_->stats_store_ .counter("grpc.lightstep.collector.CollectorService.Report.failure")