@@ -84,7 +84,7 @@ public void directCounterTest() {
84
84
85
85
@ Test
86
86
void testAllJvmMetrics () {
87
- // Force GC to run
87
+ // Force GC to run in order to generate metrics data
88
88
System .gc ();
89
89
90
90
// generate load
@@ -103,40 +103,66 @@ void testAllJvmMetrics() {
103
103
.isGreaterThanOrEqualTo (allMetrics .size ());
104
104
});
105
105
106
- // System.out.println(getAllMetricNames("jvm."));
107
-
108
106
allMetrics .forEach (metricToAssert -> {
109
107
108
+ // metric is there and has at least 1 reading
110
109
await ().atMost (10 , SECONDS )
111
110
.untilAsserted (() -> assertThat (getMetrics (metricToAssert .name ()).size ())
112
111
.withFailMessage ("The metric " + metricToAssert .name ())
113
112
.isGreaterThan (0 ));
114
113
115
- List <Map <String , Object >> metrics = getMetrics (metricToAssert .name ());
116
-
117
- assertThat (metrics .size ())
118
- .withFailMessage (metricToAssert .name () + " not found" )
119
- .isGreaterThan (0 );
120
-
121
- Map <String , Object > lastMetric = metrics .size () > 0 ? metrics .get (metrics .size () - 1 ) : null ;
122
-
123
- Double value = ((Number ) ((Map ) ((List ) ((Map ) (lastMetric .get ("data" )))
124
- .get ("points" ))
125
- .get (0 ))
126
- .get (metricToAssert .metricType ().equals (HISTOGRAM ) ? "sum" : "value" ))
127
- .doubleValue ();
128
-
114
+ // skip assertions from flaky metrics
129
115
if (!metricToAssert .name ().equals ("jvm.memory.used_after_last_gc" ) &&
130
116
!metricToAssert .name ().equals ("jvm.cpu.limit" ) &&
131
- !metricToAssert .name ().equals ("jvm.cpu.recent_utilization" ) && // skip value assertions on flaky metrics
117
+ !metricToAssert .name ().equals ("jvm.cpu.recent_utilization" ) &&
132
118
!metricToAssert .name ().equals ("jvm.system.cpu.utilization" )) {
133
- assertThat (value )
134
- .withFailMessage ("Metric should be greater than 0: " + metricToAssert .name + " value: " + value )
135
- .isGreaterThan (0d );
119
+
120
+ // Correct values might take some time to register
121
+ await ().atMost (10 , SECONDS ).untilAsserted (() -> assertThat (getLastReading (metricToAssert ))
122
+ .withFailMessage ("Metric must be greater than 0: " + metricToAssert .name )
123
+ .isGreaterThan (0d ));
136
124
}
137
125
});
138
126
}
139
127
128
+ @ Test
129
+ void testServerRequestDuration () {
130
+ given ()
131
+ .when ()
132
+ .get ("/nopath" )
133
+ .then ()
134
+ .statusCode (200 );
135
+
136
+ await ().atMost (10 , SECONDS ).until (() -> getMetrics ("http.server.request.duration" ).size () > 2 );
137
+
138
+ List <Map <String , Object >> metrics = getMetrics ("http.server.request.duration" );
139
+
140
+ Integer value = (Integer ) ((Map ) ((List ) ((Map ) (getMetrics ("http.server.request.duration" )
141
+ .get (metrics .size () - 1 )
142
+ .get ("data" )))
143
+ .get ("points" ))
144
+ .get (0 ))
145
+ .get ("count" );
146
+
147
+ assertThat (value ).isGreaterThanOrEqualTo (1 ); // at least one endpoint was called once
148
+ }
149
+
150
+ private static Set <String > getAllMetricNames (String prefix ) {
151
+ List <Map <String , Object >> foundMetrics = given ()
152
+ .when ()
153
+ .get ("/export/metrics" )
154
+ .body ().as (new TypeRef <>() {
155
+ });
156
+
157
+ return foundMetrics .stream ()
158
+ .filter (m -> ((String ) m .get ("name" )).startsWith (prefix ))
159
+ .map (m -> ((String ) m .get ("name" )))
160
+ .collect (Collectors .toSet ());
161
+ }
162
+
163
+ record MetricToAssert (String name , String description , String metricUnit , MetricDataType metricType ) {
164
+ }
165
+
140
166
protected Set <MetricToAssert > getJvmMetricsToAssert () {
141
167
return Set .of (
142
168
// new MetricToAssert("http.server.request.duration", "Duration of HTTP server requests.", "s",
@@ -174,41 +200,19 @@ protected Set<MetricToAssert> getJvmMetricsToAssert() {
174
200
LONG_SUM ));
175
201
}
176
202
177
- @ Test
178
- void testServerRequestDuration () {
179
- given ()
180
- .when ()
181
- .get ("/nopath" )
182
- .then ()
183
- .statusCode (200 );
184
-
185
- await ().atMost (10 , SECONDS ).until (() -> getMetrics ("http.server.request.duration" ).size () > 2 );
186
-
187
- List <Map <String , Object >> metrics = getMetrics ("http.server.request.duration" );
188
-
189
- Integer value = (Integer ) ((Map ) ((List ) ((Map ) (getMetrics ("http.server.request.duration" )
190
- .get (metrics .size () - 1 )
191
- .get ("data" )))
192
- .get ("points" ))
193
- .get (0 ))
194
- .get ("count" );
203
+ private Double getLastReading (MetricToAssert metricToAssert ) {
195
204
196
- assertThat (value ).isGreaterThanOrEqualTo (1 ); // at least one endpoint was called once
197
- }
205
+ List <Map <String , Object >> metrics = getMetrics (metricToAssert .name ());
198
206
199
- private static Set <String > getAllMetricNames (String prefix ) {
200
- List <Map <String , Object >> foundMetrics = given ()
201
- .when ()
202
- .get ("/export/metrics" )
203
- .body ().as (new TypeRef <>() {
204
- });
207
+ // assumes metric is there. The test asserts that already.
208
+ Map <String , Object > lastReading = metrics .size () > 0 ? metrics .get (metrics .size () - 1 ) : null ;
205
209
206
- return foundMetrics .stream ()
207
- .filter (m -> ((String ) m .get ("name" )).startsWith (prefix ))
208
- .map (m -> ((String ) m .get ("name" )))
209
- .collect (Collectors .toSet ());
210
- }
210
+ List pointsList = (List ) ((Map ) (lastReading .get ("data" ))).get ("points" );
211
211
212
- record MetricToAssert (String name , String description , String metricUnit , MetricDataType metricType ) {
212
+ // get last data point from the last reading
213
+ return ((Number ) ((Map ) pointsList
214
+ .get (pointsList .size () > 0 ? pointsList .size () - 1 : null ))
215
+ .get (metricToAssert .metricType ().equals (HISTOGRAM ) ? "sum" : "value" ))
216
+ .doubleValue ();
213
217
}
214
218
}
0 commit comments