1717#include " google/cloud/common_options.h"
1818#include " google/cloud/grpc_options.h"
1919#include " google/cloud/log.h"
20+ #include " google/cloud/testing_util/opentelemetry_matchers.h"
2021#include " google/cloud/testing_util/scoped_log.h"
2122#include " google/cloud/testing_util/status_matchers.h"
2223#include < gmock/gmock.h>
@@ -33,7 +34,7 @@ using ::testing::AnyOf;
3334using ::testing::Contains;
3435using ::testing::HasSubstr;
3536
36- TEST (SpannerStub, CreateDefaultStub ) {
37+ TEST (CreateDefaultSpannerStub, Basic ) {
3738 auto opts = spanner_internal::DefaultOptions ();
3839 auto auth =
3940 internal::CreateAuthenticationStrategy (opts.get <GrpcCredentialOption>());
@@ -43,7 +44,7 @@ TEST(SpannerStub, CreateDefaultStub) {
4344 EXPECT_NE (stub, nullptr );
4445}
4546
46- TEST (SpannerStub, CreateDefaultStubWithLogging ) {
47+ TEST (CreateDefaultSpannerStub, WithLogging ) {
4748 testing_util::ScopedLog log;
4849
4950 auto opts = Options{}
@@ -70,6 +71,72 @@ TEST(SpannerStub, CreateDefaultStubWithLogging) {
7071 Contains (HasSubstr (session.status ().message ())));
7172}
7273
74+ #ifdef GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY
75+ using ::google::cloud::testing_util::DisableTracing;
76+ using ::google::cloud::testing_util::EnableTracing;
77+ using ::google::cloud::testing_util::SpanNamed;
78+ using ::testing::ElementsAre;
79+ using ::testing::IsEmpty;
80+
81+ TEST (CreateDefaultSpannerStub, TracingEnabled) {
82+ auto span_catcher = testing_util::InstallSpanCatcher ();
83+ auto propagator = testing_util::InstallMockPropagator ();
84+ EXPECT_CALL (*propagator, Inject);
85+
86+ auto opts = EnableTracing (
87+ Options{}
88+ .set <GrpcCredentialOption>(grpc::InsecureChannelCredentials ())
89+ .set <EndpointOption>(" localhost:1" ));
90+ auto auth =
91+ internal::CreateAuthenticationStrategy (opts.get <GrpcCredentialOption>());
92+ auto stub = CreateDefaultSpannerStub (spanner::Database (" foo" , " bar" , " baz" ),
93+ std::move (auth), std::move (opts),
94+ /* channel_id=*/ 0 );
95+ EXPECT_NE (stub, nullptr );
96+
97+ grpc::ClientContext context;
98+ context.set_deadline (std::chrono::system_clock::now () +
99+ std::chrono::milliseconds (5 ));
100+ auto session =
101+ stub->CreateSession (context, google::spanner::v1::CreateSessionRequest ());
102+ EXPECT_THAT (session, StatusIs (AnyOf (StatusCode::kUnavailable ,
103+ StatusCode::kInvalidArgument ,
104+ StatusCode::kDeadlineExceeded )));
105+
106+ EXPECT_THAT (
107+ span_catcher->GetSpans (),
108+ ElementsAre (SpanNamed (" google.spanner.v1.Spanner/CreateSession" )));
109+ }
110+
111+ TEST (CreateDefaultSpannerStub, TracingDisabled) {
112+ auto span_catcher = testing_util::InstallSpanCatcher ();
113+ auto propagator = testing_util::InstallMockPropagator ();
114+ EXPECT_CALL (*propagator, Inject).Times (0 );
115+
116+ auto opts = DisableTracing (
117+ Options{}
118+ .set <GrpcCredentialOption>(grpc::InsecureChannelCredentials ())
119+ .set <EndpointOption>(" localhost:1" ));
120+ auto auth =
121+ internal::CreateAuthenticationStrategy (opts.get <GrpcCredentialOption>());
122+ auto stub = CreateDefaultSpannerStub (spanner::Database (" foo" , " bar" , " baz" ),
123+ std::move (auth), std::move (opts),
124+ /* channel_id=*/ 0 );
125+ EXPECT_NE (stub, nullptr );
126+
127+ grpc::ClientContext context;
128+ context.set_deadline (std::chrono::system_clock::now () +
129+ std::chrono::milliseconds (5 ));
130+ auto session =
131+ stub->CreateSession (context, google::spanner::v1::CreateSessionRequest ());
132+ EXPECT_THAT (session, StatusIs (AnyOf (StatusCode::kUnavailable ,
133+ StatusCode::kInvalidArgument ,
134+ StatusCode::kDeadlineExceeded )));
135+
136+ EXPECT_THAT (span_catcher->GetSpans (), IsEmpty ());
137+ }
138+ #endif // GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY
139+
73140} // namespace
74141GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
75142} // namespace spanner_internal
0 commit comments