2525import static java .util .Collections .emptyList ;
2626import static java .util .concurrent .TimeUnit .MILLISECONDS ;
2727import static org .junit .Assert .assertEquals ;
28+ import static org .junit .Assert .assertNotNull ;
2829import static org .junit .Assert .assertTrue ;
2930import static org .mockito .ArgumentMatchers .any ;
31+ import static org .mockito .ArgumentMatchers .anyDouble ;
32+ import static org .mockito .Mockito .mock ;
3033import static org .mockito .Mockito .verify ;
3134
3235import com .google .common .collect .ImmutableMap ;
3841import io .grpc .ClientInterceptors ;
3942import io .grpc .ClientStreamTracer ;
4043import io .grpc .KnownLength ;
44+ import io .grpc .ManagedChannel ;
4145import io .grpc .Metadata ;
4246import io .grpc .MethodDescriptor ;
47+ import io .grpc .Server ;
4348import io .grpc .ServerCall ;
4449import io .grpc .ServerCallHandler ;
4550import io .grpc .ServerServiceDefinition ;
4651import io .grpc .ServerStreamTracer ;
4752import io .grpc .ServerStreamTracer .ServerCallInfo ;
53+ import io .grpc .ServiceDescriptor ;
4854import io .grpc .Status ;
4955import io .grpc .Status .Code ;
56+ import io .grpc .inprocess .InProcessChannelBuilder ;
57+ import io .grpc .inprocess .InProcessServerBuilder ;
5058import io .grpc .internal .FakeClock ;
5159import io .grpc .opentelemetry .GrpcOpenTelemetry .TargetFilter ;
5260import io .grpc .opentelemetry .OpenTelemetryMetricsModule .CallAttemptsTracerFactory ;
5361import io .grpc .opentelemetry .internal .OpenTelemetryConstants ;
62+ import io .grpc .stub .ClientCalls ;
63+ import io .grpc .testing .GrpcCleanupRule ;
5464import io .grpc .testing .GrpcServerRule ;
65+ import io .opentelemetry .api .OpenTelemetry ;
5566import io .opentelemetry .api .baggage .Baggage ;
67+ import io .opentelemetry .api .baggage .propagation .W3CBaggagePropagator ;
5668import io .opentelemetry .api .common .AttributeKey ;
69+ import io .opentelemetry .api .metrics .DoubleHistogram ;
5770import io .opentelemetry .api .metrics .Meter ;
5871import io .opentelemetry .context .Context ;
72+ import io .opentelemetry .context .Scope ;
73+ import io .opentelemetry .context .propagation .ContextPropagators ;
74+ import io .opentelemetry .sdk .OpenTelemetrySdk ;
5975import io .opentelemetry .sdk .common .InstrumentationScopeInfo ;
6076import io .opentelemetry .sdk .metrics .data .MetricData ;
6177import io .opentelemetry .sdk .testing .junit4 .OpenTelemetryRule ;
@@ -156,6 +172,8 @@ public String parse(InputStream stream) {
156172 @ Rule
157173 public final MockitoRule mocks = MockitoJUnit .rule ();
158174 @ Rule
175+ public final GrpcCleanupRule grpcCleanup = new GrpcCleanupRule ();
176+ @ Rule
159177 public final GrpcServerRule grpcServerRule = new GrpcServerRule ().directExecutor ();
160178 @ Rule
161179 public final OpenTelemetryRule openTelemetryTesting = OpenTelemetryRule .create ();
@@ -166,8 +184,8 @@ public String parse(InputStream stream) {
166184 @ Captor
167185 private ArgumentCaptor <Status > statusCaptor ;
168186
169- private io . grpc . Server server ;
170- private io . grpc . ManagedChannel channel ;
187+ private Server server ;
188+ private ManagedChannel channel ;
171189
172190 private final FakeClock fakeClock = new FakeClock ();
173191 private final MethodDescriptor <String , String > method =
@@ -1799,8 +1817,7 @@ public String getAuthority() {
17991817
18001818 @ Test
18011819 public void serverMetrics_recordsBaggage () {
1802- io .opentelemetry .api .metrics .DoubleHistogram mockDurationHistogram = org .mockito .Mockito
1803- .mock (io .opentelemetry .api .metrics .DoubleHistogram .class );
1820+ DoubleHistogram mockDurationHistogram = mock (DoubleHistogram .class );
18041821 OpenTelemetryMetricsResource mockResource = OpenTelemetryMetricsResource .builder ()
18051822 .serverCallDurationCounter (mockDurationHistogram )
18061823 .build ();
@@ -1831,47 +1848,44 @@ public void serverMetrics_recordsBaggage() {
18311848 tracer .streamClosed (Status .CANCELLED );
18321849 }
18331850
1834- org .mockito .ArgumentCaptor <Context > contextCaptor = org .mockito .ArgumentCaptor
1835- .forClass (Context .class );
1836- org .mockito .Mockito .verify (mockDurationHistogram ).record (
1837- org .mockito .ArgumentMatchers .anyDouble (),
1838- org .mockito .ArgumentMatchers .any (),
1851+ ArgumentCaptor <Context > contextCaptor = ArgumentCaptor .forClass (Context .class );
1852+ verify (mockDurationHistogram ).record (
1853+ anyDouble (),
1854+ any (),
18391855 contextCaptor .capture ());
18401856
18411857 Baggage capturedBaggage = Baggage .fromContext (contextCaptor .getValue ());
1842- org . junit . Assert . assertNotNull ("Captured context should have baggage" , capturedBaggage );
1843- org . junit . Assert . assertEquals (
1858+ assertNotNull ("Captured context should have baggage" , capturedBaggage );
1859+ assertEquals (
18441860 "baggage-val-1" , capturedBaggage .getEntryValue ("baggage-key-1" ));
18451861 }
18461862
18471863 @ Test
18481864 public void serverMetrics_recordsBaggage_endToEnd () throws Exception {
1849- io .opentelemetry .api .metrics .DoubleHistogram mockDurationHistogram = org .mockito .Mockito
1850- .mock (io .opentelemetry .api .metrics .DoubleHistogram .class );
1865+ DoubleHistogram mockDurationHistogram = mock (DoubleHistogram .class );
18511866 OpenTelemetryMetricsResource mockResource = OpenTelemetryMetricsResource .builder ()
18521867 .serverCallDurationCounter (mockDurationHistogram )
18531868 .build ();
18541869
1855- io . opentelemetry . api . OpenTelemetry openTelemetry = io . opentelemetry . sdk . OpenTelemetrySdk
1870+ OpenTelemetry openTelemetry = OpenTelemetrySdk
18561871 .builder ()
1857- .setPropagators (io . opentelemetry . context . propagation . ContextPropagators .create (
1858- io . opentelemetry . api . baggage . propagation . W3CBaggagePropagator .getInstance ()))
1872+ .setPropagators (ContextPropagators .create (
1873+ W3CBaggagePropagator .getInstance ()))
18591874 .build ();
18601875
18611876 OpenTelemetryMetricsModule module = newOpenTelemetryMetricsModule (mockResource );
18621877 OpenTelemetryTracingModule tracingModule = new OpenTelemetryTracingModule (openTelemetry );
18631878
1864- String serverName = io .grpc .inprocess .InProcessServerBuilder .generateName ();
1865- io .grpc .inprocess .InProcessServerBuilder serverBuilder = io .grpc .inprocess
1866- .InProcessServerBuilder
1879+ String serverName = InProcessServerBuilder .generateName ();
1880+ InProcessServerBuilder serverBuilder = InProcessServerBuilder
18671881 .forName (serverName ).directExecutor ();
18681882
18691883 serverBuilder .addStreamTracerFactory (tracingModule .getServerTracerFactory ());
18701884 serverBuilder .intercept (tracingModule .getServerSpanPropagationInterceptor ());
18711885 serverBuilder .addStreamTracerFactory (module .getServerTracerFactory ());
18721886
18731887 serverBuilder .addService (ServerServiceDefinition .builder (
1874- io . grpc . ServiceDescriptor .newBuilder ("package1.service2" )
1888+ ServiceDescriptor .newBuilder ("package1.service2" )
18751889 .addMethod (method )
18761890 .build ())
18771891 .addMethod (method , new ServerCallHandler <String , String >() {
@@ -1885,48 +1899,40 @@ public ServerCall.Listener<String> startCall(
18851899 };
18861900 }
18871901 }).build ());
1888- io . grpc . Server server = serverBuilder .build ().start ();
1902+ grpcCleanup . register ( serverBuilder .build ().start () );
18891903
1890- io .grpc .inprocess .InProcessChannelBuilder channelBuilder = io .grpc .inprocess
1891- .InProcessChannelBuilder
1904+ InProcessChannelBuilder channelBuilder = InProcessChannelBuilder
18921905 .forName (serverName ).directExecutor ();
18931906 channelBuilder .intercept (tracingModule .getClientInterceptor ());
18941907 channelBuilder .intercept (module .getClientInterceptor (serverName ));
1895- Channel channel = channelBuilder .intercept (new ClientInterceptor () {
1908+ Channel channel = grpcCleanup . register ( channelBuilder .intercept (new ClientInterceptor () {
18961909 @ Override
18971910 public <ReqT , RespT > ClientCall <ReqT , RespT > interceptCall (
18981911 MethodDescriptor <ReqT , RespT > method , CallOptions callOptions , Channel next ) {
18991912 return next .newCall (method , callOptions );
19001913 }
1901- }).build ();
1914+ }).build ()) ;
19021915
19031916 Baggage baggage = Baggage .builder ()
19041917 .put ("baggage-key-1" , "baggage-val-1" )
19051918 .build ();
19061919
1907- io .opentelemetry .context .Context otelContext = io .opentelemetry .context .Context .root ()
1908- .with (baggage );
1909- io .opentelemetry .context .Scope scope = otelContext .makeCurrent ();
1920+ Context otelContext = Context .root ().with (baggage );
19101921
1911- try {
1912- io . grpc . stub . ClientCalls .blockingUnaryCall (channel ,
1922+ try ( Scope scope = otelContext . makeCurrent ()) {
1923+ ClientCalls .blockingUnaryCall (channel ,
19131924 method , CallOptions .DEFAULT , "request" );
1914- } finally {
1915- scope .close ();
19161925 }
19171926
1918- server .shutdown ().awaitTermination (5 , java .util .concurrent .TimeUnit .SECONDS );
1919-
1920- org .mockito .ArgumentCaptor <Context > contextCaptor = org .mockito .ArgumentCaptor
1921- .forClass (Context .class );
1922- org .mockito .Mockito .verify (mockDurationHistogram ).record (
1923- org .mockito .ArgumentMatchers .anyDouble (),
1924- org .mockito .ArgumentMatchers .any (),
1927+ ArgumentCaptor <Context > contextCaptor = ArgumentCaptor .forClass (Context .class );
1928+ verify (mockDurationHistogram ).record (
1929+ anyDouble (),
1930+ any (),
19251931 contextCaptor .capture ());
19261932
19271933 Baggage capturedBaggage = Baggage .fromContext (contextCaptor .getValue ());
1928- org . junit . Assert . assertNotNull ("Captured context should have baggage" , capturedBaggage );
1929- org . junit . Assert . assertEquals (
1934+ assertNotNull ("Captured context should have baggage" , capturedBaggage );
1935+ assertEquals (
19301936 "baggage-val-1" , capturedBaggage .getEntryValue ("baggage-key-1" ));
19311937 }
19321938}
0 commit comments