-
Notifications
You must be signed in to change notification settings - Fork 10
Add helper to convert Observatory URI to WS URI #232
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file | ||
// for details. All rights reserved. Use of this source code is governed by a | ||
// BSD-style license that can be found in the LICENSE file. | ||
|
||
/// Map the URI (which may already be Observatory web app) to a WebSocket URI | ||
/// for the VM service. | ||
/// | ||
/// If the URI is already a VM Service WebSocket URI it will not be modified. | ||
Uri getVmWsUriFromObservatoryUri(Uri uri) { | ||
final isSecure = uri.isScheme('wss') || uri.isScheme('https'); | ||
final scheme = isSecure ? 'wss' : 'ws'; | ||
|
||
final path = uri.path.endsWith('/ws') | ||
? uri.path | ||
: (uri.path.endsWith('/') ? '${uri.path}ws' : '${uri.path}/ws'); | ||
|
||
return uri.replace(scheme: scheme, path: path); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file | ||
// for details. All rights reserved. Use of this source code is governed by a | ||
// BSD-style license that can be found in the LICENSE file. | ||
|
||
import 'package:test/test.dart'; | ||
import 'package:vm_service_lib/utils.dart'; | ||
|
||
@TestOn('vm') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this test should run everywhere, not just on the VM, right? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good point, I've removed that. |
||
void main() { | ||
group('getVmWsUriFromObservatoryUri', () { | ||
void check(String input, String expected) { | ||
final inputUri = Uri.parse(input); | ||
final actualUri = getVmWsUriFromObservatoryUri(inputUri); | ||
expect(actualUri.toString(), equals(expected)); | ||
} | ||
|
||
test('handles http URIs', | ||
() => check('http://localhost:123/', 'ws://localhost:123/ws')); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: this formatting is a bit odd looking. I would suggest using () { No need to write this code but if you have a similar situation in the future it might make sense to have a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I started it that way, but wasn't sure if having only a single test name without descriptions was good. However, it did turn out a mess, so I've changed it to a |
||
test('handles https URIs', | ||
() => check('https://localhost:123/', 'wss://localhost:123/ws')); | ||
test('handles ws URIs', | ||
() => check('ws://localhost:123/', 'ws://localhost:123/ws')); | ||
test('handles wss URIs', | ||
() => check('wss://localhost:123/', 'wss://localhost:123/ws')); | ||
test( | ||
'handles http URIs with tokens', | ||
() => check( | ||
'http://localhost:123/ABCDEF=/', 'ws://localhost:123/ABCDEF=/ws')); | ||
test( | ||
'handles https URIs with tokens', | ||
() => check('https://localhost:123/ABCDEF=/', | ||
'wss://localhost:123/ABCDEF=/ws')); | ||
test( | ||
'handles ws URIs with tokens', | ||
() => check( | ||
'ws://localhost:123/ABCDEF=/', 'ws://localhost:123/ABCDEF=/ws')); | ||
test( | ||
'handles wss URIs with tokens', | ||
() => check( | ||
'wss://localhost:123/ABCDEF=/', 'wss://localhost:123/ABCDEF=/ws')); | ||
test('handles http URIs without trailing slashes', | ||
() => check('http://localhost:123', 'ws://localhost:123/ws')); | ||
test('handles https URIs without trailing slashes', | ||
() => check('https://localhost:123', 'wss://localhost:123/ws')); | ||
test('handles ws URIs without trailing slashes', | ||
() => check('ws://localhost:123', 'ws://localhost:123/ws')); | ||
test('handles wss URIs without trailing slashes', | ||
() => check('wss://localhost:123', 'wss://localhost:123/ws')); | ||
test( | ||
'handles http URIs without trailing slashes with tokens', | ||
() => check( | ||
'http://localhost:123/ABCDEF=', 'ws://localhost:123/ABCDEF=/ws')); | ||
test( | ||
'handles https URIs without trailing slashes with tokens', | ||
() => check( | ||
'https://localhost:123/ABCDEF=', 'wss://localhost:123/ABCDEF=/ws')); | ||
test( | ||
'handles ws URIs without trailing slashes with tokens', | ||
() => check( | ||
'ws://localhost:123/ABCDEF=', 'ws://localhost:123/ABCDEF=/ws')); | ||
test( | ||
'handles wss URIs without trailing slashes with tokens', | ||
() => check( | ||
'wss://localhost:123/ABCDEF=', 'wss://localhost:123/ABCDEF=/ws')); | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note: we may rename this to something like
convertToWebSocketUrl({@required String serviceProtocolUrl})
.