44
44
import io .micrometer .observation .Observation .Event ;
45
45
import io .micrometer .observation .ObservationHandler ;
46
46
import io .micrometer .observation .ObservationTextPublisher ;
47
+ import io .micrometer .observation .tck .ObservationContextAssert ;
47
48
import io .micrometer .observation .tck .TestObservationRegistry ;
48
49
import io .micrometer .observation .tck .TestObservationRegistryAssert ;
49
50
import org .junit .jupiter .api .AfterEach ;
@@ -154,9 +155,13 @@ void unaryRpc() {
154
155
assertThat (clientHandler .getEvents ()).containsExactly (GrpcClientEvents .MESSAGE_SENT ,
155
156
GrpcClientEvents .MESSAGE_RECEIVED );
156
157
// tag::assertion[]
157
- TestObservationRegistryAssert .assertThat (observationRegistry )
158
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.client" ))
159
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ));
158
+ TestObservationRegistryAssert .assertThat (observationRegistry ).hasAnObservation (observationContextAssert -> {
159
+ observationContextAssert .hasNameEqualTo ("grpc.client" );
160
+ assertCommonKeyValueNames (observationContextAssert );
161
+ }).hasAnObservation (observationContextAssert -> {
162
+ observationContextAssert .hasNameEqualTo ("grpc.server" );
163
+ assertCommonKeyValueNames (observationContextAssert );
164
+ });
160
165
// end::assertion[]
161
166
}
162
167
@@ -188,9 +193,7 @@ public void onFailure(Throwable t) {
188
193
189
194
await ().until (() -> futures .stream ().allMatch (Future ::isDone ));
190
195
assertThat (responses ).hasSize (count ).containsExactlyInAnyOrderElementsOf (messages );
191
- TestObservationRegistryAssert .assertThat (observationRegistry )
192
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.client" ))
193
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ));
196
+ assertClientAndServerObservations ();
194
197
}
195
198
196
199
@ Test
@@ -230,9 +233,7 @@ void clientStreamingRpc() {
230
233
verifyServerContext ("grpc.testing.SimpleService" , "ClientStreamingRpc" ,
231
234
"grpc.testing.SimpleService/ClientStreamingRpc" , MethodType .CLIENT_STREAMING );
232
235
assertThat (serverHandler .getContext ().getStatusCode ()).isEqualTo (Code .OK );
233
- TestObservationRegistryAssert .assertThat (observationRegistry )
234
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.client" ))
235
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ));
236
+ assertClientAndServerObservations ();
236
237
}
237
238
238
239
@ Test
@@ -264,9 +265,7 @@ void serverStreamingRpc() {
264
265
assertThat (clientHandler .getContext ().getStatusCode ()).isEqualTo (Code .OK );
265
266
assertThat (clientHandler .getEvents ()).containsExactly (GrpcClientEvents .MESSAGE_SENT ,
266
267
GrpcClientEvents .MESSAGE_RECEIVED , GrpcClientEvents .MESSAGE_RECEIVED );
267
- TestObservationRegistryAssert .assertThat (observationRegistry )
268
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.client" ))
269
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ));
268
+ assertClientAndServerObservations ();
270
269
}
271
270
272
271
@ Test
@@ -316,9 +315,7 @@ void bidiStreamingRpc() {
316
315
317
316
assertThat (serverHandler .getContext ().getStatusCode ()).isEqualTo (Code .OK );
318
317
assertThat (clientHandler .getContext ().getStatusCode ()).isEqualTo (Code .OK );
319
- TestObservationRegistryAssert .assertThat (observationRegistry )
320
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.client" ))
321
- .hasAnObservation (observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ));
318
+ assertClientAndServerObservations ();
322
319
}
323
320
324
321
private StreamObserver <SimpleResponse > createResponseObserver (List <String > messages , AtomicBoolean completed ) {
@@ -343,6 +340,16 @@ public void onCompleted() {
343
340
344
341
}
345
342
343
+ private void assertClientAndServerObservations () {
344
+ TestObservationRegistryAssert .assertThat (observationRegistry ).hasAnObservation (observationContextAssert -> {
345
+ observationContextAssert .hasNameEqualTo ("grpc.client" );
346
+ assertCommonKeyValueNames (observationContextAssert );
347
+ }).hasAnObservation (observationContextAssert -> {
348
+ observationContextAssert .hasNameEqualTo ("grpc.server" );
349
+ assertCommonKeyValueNames (observationContextAssert );
350
+ });
351
+ }
352
+
346
353
@ Nested
347
354
class WithExceptionService {
348
355
@@ -373,9 +380,7 @@ void unaryRpcFailure() {
373
380
assertThat (clientHandler .getContext ().getStatusCode ()).isEqualTo (Code .UNKNOWN );
374
381
assertThat (serverHandler .getEvents ()).containsExactly (GrpcServerEvents .MESSAGE_RECEIVED );
375
382
assertThat (clientHandler .getEvents ()).containsExactly (GrpcClientEvents .MESSAGE_SENT );
376
- TestObservationRegistryAssert .assertThat (observationRegistry )
377
- .hasAnObservation (
378
- observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ).hasError ());
383
+ assertServerErrorObservation ();
379
384
}
380
385
381
386
@ Test
@@ -397,9 +402,7 @@ void clientStreamingRpcFailure() {
397
402
assertThat (serverHandler .getContext ().getStatusCode ()).isNull ();
398
403
assertThat (clientHandler .getEvents ()).isEmpty ();
399
404
assertThat (serverHandler .getEvents ()).isEmpty ();
400
- TestObservationRegistryAssert .assertThat (observationRegistry )
401
- .hasAnObservation (
402
- observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ).hasError ());
405
+ assertServerErrorObservation ();
403
406
}
404
407
405
408
@ Test
@@ -423,9 +426,7 @@ void serverStreamingRpcFailure() {
423
426
assertThat (serverHandler .getContext ().getStatusCode ()).isNull ();
424
427
assertThat (clientHandler .getEvents ()).containsExactly (GrpcClientEvents .MESSAGE_SENT );
425
428
assertThat (serverHandler .getEvents ()).containsExactly (GrpcServerEvents .MESSAGE_RECEIVED );
426
- TestObservationRegistryAssert .assertThat (observationRegistry )
427
- .hasAnObservation (
428
- observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ).hasError ());
429
+ assertServerErrorObservation ();
429
430
}
430
431
431
432
@ Test
@@ -448,9 +449,14 @@ void bidiStreamingRpcFailure() {
448
449
assertThat (serverHandler .getContext ().getStatusCode ()).isNull ();
449
450
assertThat (clientHandler .getEvents ()).isEmpty ();
450
451
assertThat (serverHandler .getEvents ()).isEmpty ();
451
- TestObservationRegistryAssert .assertThat (observationRegistry )
452
- .hasAnObservation (
453
- observationContextAssert -> observationContextAssert .hasNameEqualTo ("grpc.server" ).hasError ());
452
+ assertServerErrorObservation ();
453
+ }
454
+
455
+ private void assertServerErrorObservation () {
456
+ TestObservationRegistryAssert .assertThat (observationRegistry ).hasAnObservation (observationContextAssert -> {
457
+ observationContextAssert .hasNameEqualTo ("grpc.server" ).hasError ();
458
+ assertCommonKeyValueNames (observationContextAssert );
459
+ });
454
460
}
455
461
456
462
private StreamObserver <SimpleResponse > createResponseObserver (AtomicBoolean errored ) {
@@ -498,6 +504,16 @@ void verifyClientContext(String serviceName, String methodName, String contextua
498
504
});
499
505
}
500
506
507
+ void assertCommonKeyValueNames (ObservationContextAssert <?> observationContextAssert ) {
508
+ observationContextAssert
509
+ .hasLowCardinalityKeyValueWithKey (GrpcObservationDocumentation .LowCardinalityKeyNames .METHOD .asString ())
510
+ .hasLowCardinalityKeyValueWithKey (
511
+ GrpcObservationDocumentation .LowCardinalityKeyNames .METHOD_TYPE .asString ())
512
+ .hasLowCardinalityKeyValueWithKey (GrpcObservationDocumentation .LowCardinalityKeyNames .SERVICE .asString ())
513
+ .hasLowCardinalityKeyValueWithKey (
514
+ GrpcObservationDocumentation .LowCardinalityKeyNames .STATUS_CODE .asString ());
515
+ }
516
+
501
517
// GRPC service extending SimpleService and provides echo implementation.
502
518
static class EchoService extends SimpleServiceImplBase {
503
519
0 commit comments