@@ -357,10 +357,36 @@ class UrlUtilsTest {
357357 }
358358
359359 @Test
360- fun `does not extract details from websockets uri` () {
361- val urlDetails = UrlUtils .parse(" wss://example.com/socket" )
362- assertNull(urlDetails.url)
363- assertNull(urlDetails.query)
364- assertNull(urlDetails.fragment)
360+ fun `extracts details from websocket uri` () {
361+ val urlDetails = UrlUtils .parse(" ws://example.com/socket?channel=updates#top" )
362+
363+ assertThat(urlDetails.url).isEqualTo(" ws://example.com/socket" )
364+ assertThat(urlDetails.query).isEqualTo(" channel=updates" )
365+ assertThat(urlDetails.fragment).isEqualTo(" top" )
366+ }
367+
368+ @Test
369+ fun `filters query parameters from secure websocket uri` () {
370+ val options = SentryOptions ().also { it.dataCollection.setUserInfo(false ) }
371+ val urlDetails =
372+ UrlUtils .parse(
373+ " wss://example.com/socket?channel=updates&token=secret" ,
374+ options.dataCollectionResolver,
375+ )
376+
377+ assertThat(urlDetails.url).isEqualTo(" wss://example.com/socket" )
378+ assertThat(urlDetails.query).isEqualTo(" channel=updates&token=[Filtered]" )
379+ assertThat(urlDetails.fragment).isNull()
380+ }
381+
382+ @Test
383+ fun `does not extract details from websocket uri without authority` () {
384+ listOf (" ws:example.com/socket" , " wss:///socket" ).forEach { url ->
385+ val urlDetails = UrlUtils .parse(url)
386+
387+ assertThat(urlDetails.url).isNull()
388+ assertThat(urlDetails.query).isNull()
389+ assertThat(urlDetails.fragment).isNull()
390+ }
365391 }
366392}
0 commit comments