@@ -171,6 +171,8 @@ static void createSelfSignedCertificate() throws CertificateException {
171
171
* <li> /5 is used by testServerConnectionsRecorder test</li>
172
172
* <li> /6 is used by testServerConnectionsMicrometerConnectionClose test</li>
173
173
* <li> /7 is used by testServerConnectionsRecorderConnectionClose test</li>
174
+ * <li> /8 is used by testServerConnectionsWebsocketMicrometer test</li>
175
+ * <li> /9 is used by testServerConnectionsWebsocketRecorder test</li>
174
176
* </ul>
175
177
*/
176
178
@ BeforeEach
@@ -200,7 +202,12 @@ void setUp() {
200
202
.get ("/7" , (req , res ) -> {
201
203
checkServerConnectionsRecorder (req );
202
204
return Mono .delay (Duration .ofMillis (200 )).then (res .send ());
203
- }));
205
+ })
206
+ .get ("/8" , (req , res ) -> res .sendWebsocket ((in , out ) ->
207
+ out .sendString (Mono .just ("Hello World!" ).doOnNext (b -> checkServerConnectionsMicrometer (req )))))
208
+ .get ("/9" , (req , res ) -> res .sendWebsocket ((in , out ) ->
209
+ out .sendString (Mono .just ("Hello World!" ).doOnNext (b -> checkServerConnectionsRecorder (req )))))
210
+ );
204
211
205
212
provider = ConnectionProvider .create ("HttpMetricsHandlerTests" , 1 );
206
213
httpClient = createClient (provider , () -> disposableServer .address ())
@@ -746,6 +753,28 @@ void testServerConnectionsMicrometerConnectionClose(HttpProtocol[] serverProtoco
746
753
}
747
754
}
748
755
756
+ @ Test
757
+ void testServerConnectionsWebsocketMicrometer () throws Exception {
758
+ disposableServer = httpServer
759
+ .doOnConnection (cnx -> ServerCloseHandler .INSTANCE .register (cnx .channel ()))
760
+ .bindNow ();
761
+
762
+ String address = formatSocketAddress (disposableServer .address ());
763
+
764
+ httpClient .websocket ()
765
+ .uri ("/8" )
766
+ .handle ((in , out ) -> in .receive ().aggregate ().asString ())
767
+ .as (StepVerifier ::create )
768
+ .expectNext ("Hello World!" )
769
+ .expectComplete ()
770
+ .verify (Duration .ofSeconds (30 ));
771
+
772
+ // make sure the client socket is closed on the server side before checking server metrics
773
+ assertThat (ServerCloseHandler .INSTANCE .awaitClientClosedOnServer ()).as ("awaitClientClosedOnServer timeout" ).isTrue ();
774
+ assertGauge (registry , SERVER_CONNECTIONS_TOTAL , URI , HTTP , LOCAL_ADDRESS , address ).hasValueEqualTo (0 );
775
+ assertGauge (registry , SERVER_CONNECTIONS_ACTIVE , URI , HTTP , LOCAL_ADDRESS , address ).hasValueEqualTo (0 );
776
+ }
777
+
749
778
@ ParameterizedTest
750
779
@ MethodSource ("httpCompatibleProtocols" )
751
780
void testServerConnectionsRecorder (HttpProtocol [] serverProtocols , HttpProtocol [] clientProtocols ,
@@ -849,6 +878,32 @@ void testServerConnectionsRecorderConnectionClose(HttpProtocol[] serverProtocols
849
878
}
850
879
}
851
880
881
+ @ Test
882
+ void testServerConnectionsWebsocketRecorder () throws Exception {
883
+ ServerRecorder .INSTANCE .reset ();
884
+ disposableServer = httpServer .metrics (true , ServerRecorder .supplier (), Function .identity ())
885
+ .doOnConnection (cnx -> ServerCloseHandler .INSTANCE .register (cnx .channel ()))
886
+ .bindNow ();
887
+
888
+ String address = formatSocketAddress (disposableServer .address ());
889
+
890
+ httpClient .websocket ()
891
+ .uri ("/9" )
892
+ .handle ((in , out ) -> in .receive ().aggregate ().asString ())
893
+ .as (StepVerifier ::create )
894
+ .expectNext ("Hello World!" )
895
+ .expectComplete ()
896
+ .verify (Duration .ofSeconds (30 ));
897
+
898
+ // make sure the client socket is closed on the server side before checking server metrics
899
+ assertThat (ServerCloseHandler .INSTANCE .awaitClientClosedOnServer ()).as ("awaitClientClosedOnServer timeout" ).isTrue ();
900
+ assertThat (ServerRecorder .INSTANCE .error .get ()).isNull ();
901
+ assertThat (ServerRecorder .INSTANCE .onServerConnectionsAmount .get ()).isEqualTo (0 );
902
+ assertThat (ServerRecorder .INSTANCE .onActiveConnectionsAmount .get ()).isEqualTo (0 );
903
+ assertThat (ServerRecorder .INSTANCE .onActiveConnectionsLocalAddr .get ()).isEqualTo (address );
904
+ assertThat (ServerRecorder .INSTANCE .onInactiveConnectionsLocalAddr .get ()).isEqualTo (address );
905
+ }
906
+
852
907
@ Test
853
908
void testIssue896 () throws Exception {
854
909
disposableServer = httpServer .noSSL ()
0 commit comments