2929 */
3030package com .google .api .gax .tracing ;
3131
32+ import static com .google .api .gax .tracing .ObservabilityAttributes .RPC_RESPONSE_STATUS_ATTRIBUTE ;
33+ import static com .google .common .truth .Truth .assertThat ;
34+
3235import com .google .api .gax .rpc .ApiException ;
3336import com .google .api .gax .rpc .StatusCode ;
3437import com .google .api .gax .rpc .testing .FakeStatusCode ;
38+ import com .google .common .testing .FakeTicker ;
3539import io .opentelemetry .api .OpenTelemetry ;
3640import io .opentelemetry .api .common .AttributeKey ;
3741import io .opentelemetry .api .common .Attributes ;
3842import io .opentelemetry .sdk .OpenTelemetrySdk ;
3943import io .opentelemetry .sdk .metrics .SdkMeterProvider ;
4044import io .opentelemetry .sdk .metrics .data .MetricData ;
4145import io .opentelemetry .sdk .testing .exporter .InMemoryMetricReader ;
46+ import java .util .Collection ;
4247import org .junit .jupiter .api .BeforeEach ;
4348import org .junit .jupiter .api .Test ;
4449
45- import java .util .Collection ;
46-
47- import static com .google .api .gax .tracing .ObservabilityAttributes .RPC_RESPONSE_STATUS_ATTRIBUTE ;
48- import static com .google .common .truth .Truth .assertThat ;
49-
5050class GoldenSignalMetricsTracerTest {
5151 private static final String ARTIFACT_NAME = "test-library" ;
52+ public static final int TEST_REQUEST_DURATION_NANO = 2345698 ;
53+ public static final double EXPECTED_REQUEST_DURATION_SECOND = 2345698 / 1_000_000_000.0 ;
5254
5355 private InMemoryMetricReader metricReader ;
5456
5557 private GoldenSignalMetricsTracer tracer ;
5658
59+ private FakeTicker ticker ;
60+
5761 @ BeforeEach
5862 void setUp () {
5963 metricReader = InMemoryMetricReader .create ();
6064 SdkMeterProvider meterProvider =
6165 SdkMeterProvider .builder ().registerMetricReader (metricReader ).build ();
6266 OpenTelemetry openTelemetry =
6367 OpenTelemetrySdk .builder ().setMeterProvider (meterProvider ).build ();
68+ ticker = new FakeTicker ();
6469 tracer =
6570 new GoldenSignalMetricsTracer (
66- new GoldenSignalsMetricsRecorder (openTelemetry , ARTIFACT_NAME ));
71+ new GoldenSignalsMetricsRecorder (openTelemetry , ARTIFACT_NAME ), ticker );
6772 }
6873
6974 @ Test
7075 void operationSucceeded_shouldRecordsDuration () {
76+ ticker .advance (TEST_REQUEST_DURATION_NANO );
7177 tracer .operationSucceeded ();
7278
7379 Collection <MetricData > metrics = metricReader .collectAllMetrics ();
7480 assertThat (metrics ).hasSize (1 );
7581 MetricData metricData = metrics .iterator ().next ();
7682
7783 assertThat (metricData .getHistogramData ().getPoints ()).hasSize (1 );
78- assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getMax ()).isNonZero ();
84+ assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getMax ())
85+ .isEqualTo (EXPECTED_REQUEST_DURATION_SECOND );
7986 }
8087
8188 @ Test
@@ -88,22 +95,24 @@ void operationSucceeded_shouldRecordsOKStatus() {
8895
8996 assertThat (metricData .getHistogramData ().getPoints ()).hasSize (1 );
9097 assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getAttributes ())
91- .isEqualTo (
92- Attributes .of (
93- AttributeKey .stringKey (RPC_RESPONSE_STATUS_ATTRIBUTE ),
94- StatusCode .Code .OK .toString ()));
98+ .isEqualTo (
99+ Attributes .of (
100+ AttributeKey .stringKey (RPC_RESPONSE_STATUS_ATTRIBUTE ),
101+ StatusCode .Code .OK .toString ()));
95102 }
96103
97104 @ Test
98105 void operationCancelled_shouldRecordsDuration () {
106+ ticker .advance (TEST_REQUEST_DURATION_NANO );
99107 tracer .operationCancelled ();
100108
101109 Collection <MetricData > metrics = metricReader .collectAllMetrics ();
102110 assertThat (metrics ).hasSize (1 );
103111 MetricData metricData = metrics .iterator ().next ();
104112
105113 assertThat (metricData .getHistogramData ().getPoints ()).hasSize (1 );
106- assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getMax ()).isNonZero ();
114+ assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getMax ())
115+ .isEqualTo (EXPECTED_REQUEST_DURATION_SECOND );
107116 }
108117
109118 @ Test
@@ -116,30 +125,32 @@ void operationCancelled_shouldRecordsOKStatus() {
116125
117126 assertThat (metricData .getHistogramData ().getPoints ()).hasSize (1 );
118127 assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getAttributes ())
119- .isEqualTo (
120- Attributes .of (
121- AttributeKey .stringKey (RPC_RESPONSE_STATUS_ATTRIBUTE ),
122- StatusCode .Code .CANCELLED .toString ()));
128+ .isEqualTo (
129+ Attributes .of (
130+ AttributeKey .stringKey (RPC_RESPONSE_STATUS_ATTRIBUTE ),
131+ StatusCode .Code .CANCELLED .toString ()));
123132 }
124133
125134 @ Test
126135 void operationFailed_shouldRecordsDuration () {
136+ ticker .advance (TEST_REQUEST_DURATION_NANO );
127137 ApiException error =
128- new ApiException ("test error" , null , new FakeStatusCode (StatusCode .Code .INTERNAL ), false );
138+ new ApiException ("test error" , null , new FakeStatusCode (StatusCode .Code .INTERNAL ), false );
129139 tracer .operationFailed (error );
130140
131141 Collection <MetricData > metrics = metricReader .collectAllMetrics ();
132142 assertThat (metrics ).hasSize (1 );
133143 MetricData metricData = metrics .iterator ().next ();
134144
135145 assertThat (metricData .getHistogramData ().getPoints ()).hasSize (1 );
136- assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getMax ()).isNonZero ();
146+ assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getMax ())
147+ .isEqualTo (EXPECTED_REQUEST_DURATION_SECOND );
137148 }
138149
139150 @ Test
140151 void operationFailed_shouldRecordsOKStatus () {
141152 ApiException error =
142- new ApiException ("test error" , null , new FakeStatusCode (StatusCode .Code .INTERNAL ), false );
153+ new ApiException ("test error" , null , new FakeStatusCode (StatusCode .Code .INTERNAL ), false );
143154 tracer .operationFailed (error );
144155
145156 Collection <MetricData > metrics = metricReader .collectAllMetrics ();
@@ -148,9 +159,9 @@ void operationFailed_shouldRecordsOKStatus() {
148159
149160 assertThat (metricData .getHistogramData ().getPoints ()).hasSize (1 );
150161 assertThat (metricData .getHistogramData ().getPoints ().iterator ().next ().getAttributes ())
151- .isEqualTo (
152- Attributes .of (
153- AttributeKey .stringKey (RPC_RESPONSE_STATUS_ATTRIBUTE ),
154- StatusCode .Code .INTERNAL .toString ()));
162+ .isEqualTo (
163+ Attributes .of (
164+ AttributeKey .stringKey (RPC_RESPONSE_STATUS_ATTRIBUTE ),
165+ StatusCode .Code .INTERNAL .toString ()));
155166 }
156167}
0 commit comments