1
1
import { logger } from "@coder/logger"
2
2
import * as http from "http"
3
- import { AddressInfo } from "net"
4
3
import * as path from "path"
4
+ import { ensureAddress } from "../../../src/node/app"
5
5
import { SettingsProvider , UpdateSettings } from "../../../src/node/settings"
6
6
import { LatestResponse , UpdateProvider } from "../../../src/node/update"
7
- import { clean , isAddressInfo , mockLogger , tmpdir } from "../../utils/helpers"
7
+ import { clean , mockLogger , tmpdir } from "../../utils/helpers"
8
8
9
9
describe ( "update" , ( ) => {
10
10
let version = "1.0.0"
@@ -79,14 +79,14 @@ describe("update", () => {
79
79
}
80
80
81
81
let _provider : UpdateProvider | undefined
82
- let _address : string | AddressInfo | null
83
82
const provider = ( ) : UpdateProvider => {
84
83
if ( ! _provider ) {
85
84
throw new Error ( "Update provider has not been created" )
86
85
}
87
86
return _provider
88
87
}
89
88
89
+ let address = new URL ( "http://localhost" )
90
90
beforeAll ( async ( ) => {
91
91
mockLogger ( )
92
92
@@ -105,12 +105,13 @@ describe("update", () => {
105
105
} )
106
106
} )
107
107
108
- _address = server . address ( )
109
- if ( ! isAddressInfo ( _address ) ) {
110
- throw new Error ( "unexpected address " )
108
+ const addr = ensureAddress ( server , "http" )
109
+ if ( typeof addr === "string" ) {
110
+ throw new Error ( "unable to run update tests with unix sockets " )
111
111
}
112
-
113
- _provider = new UpdateProvider ( `http://${ _address ?. address } :${ _address ?. port } /latest` , _settings )
112
+ address = addr
113
+ address . pathname = "/latest"
114
+ _provider = new UpdateProvider ( address . toString ( ) , _settings )
114
115
} )
115
116
116
117
afterAll ( ( ) => {
@@ -220,59 +221,51 @@ describe("update", () => {
220
221
} )
221
222
222
223
it ( "should reject if response has status code 500" , async ( ) => {
223
- if ( isAddressInfo ( _address ) ) {
224
- const mockURL = `http://${ _address . address } :${ _address . port } /reject-status-code`
225
- const provider = new UpdateProvider ( mockURL , settings ( ) )
226
- const update = await provider . getUpdate ( true )
227
-
228
- expect ( update . version ) . toBe ( "unknown" )
229
- expect ( logger . error ) . toHaveBeenCalled ( )
230
- expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
231
- identifier : "error" ,
232
- value : `${ mockURL } : 500` ,
233
- } )
234
- }
224
+ address . pathname = "/reject-status-code"
225
+ const provider = new UpdateProvider ( address . toString ( ) , settings ( ) )
226
+ const update = await provider . getUpdate ( true )
227
+
228
+ expect ( update . version ) . toBe ( "unknown" )
229
+ expect ( logger . error ) . toHaveBeenCalled ( )
230
+ expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
231
+ identifier : "error" ,
232
+ value : `${ address . toString ( ) } : 500` ,
233
+ } )
235
234
} )
236
235
237
236
it ( "should reject if no location header provided" , async ( ) => {
238
- if ( isAddressInfo ( _address ) ) {
239
- const mockURL = `http://${ _address . address } :${ _address . port } /no-location-header`
240
- const provider = new UpdateProvider ( mockURL , settings ( ) )
241
- const update = await provider . getUpdate ( true )
242
-
243
- expect ( update . version ) . toBe ( "unknown" )
244
- expect ( logger . error ) . toHaveBeenCalled ( )
245
- expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
246
- identifier : "error" ,
247
- value : `received redirect with no location header` ,
248
- } )
249
- }
237
+ address . pathname = "/no-location-header"
238
+ const provider = new UpdateProvider ( address . toString ( ) , settings ( ) )
239
+ const update = await provider . getUpdate ( true )
240
+
241
+ expect ( update . version ) . toBe ( "unknown" )
242
+ expect ( logger . error ) . toHaveBeenCalled ( )
243
+ expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
244
+ identifier : "error" ,
245
+ value : `received redirect with no location header` ,
246
+ } )
250
247
} )
251
248
252
249
it ( "should resolve the request with response.headers.location" , async ( ) => {
253
250
version = "4.1.1"
254
- if ( isAddressInfo ( _address ) ) {
255
- const mockURL = `http://${ _address . address } :${ _address . port } /with-location-header`
256
- const provider = new UpdateProvider ( mockURL , settings ( ) )
257
- const update = await provider . getUpdate ( true )
251
+ address . pathname = "/with-location-header"
252
+ const provider = new UpdateProvider ( address . toString ( ) , settings ( ) )
253
+ const update = await provider . getUpdate ( true )
258
254
259
- expect ( logger . error ) . not . toHaveBeenCalled ( )
260
- expect ( update . version ) . toBe ( "4.1.1" )
261
- }
255
+ expect ( logger . error ) . not . toHaveBeenCalled ( )
256
+ expect ( update . version ) . toBe ( "4.1.1" )
262
257
} )
263
258
264
259
it ( "should reject if more than 10 redirects" , async ( ) => {
265
- if ( isAddressInfo ( _address ) ) {
266
- const mockURL = `http://${ _address . address } :${ _address . port } /redirect/11`
267
- const provider = new UpdateProvider ( mockURL , settings ( ) )
268
- const update = await provider . getUpdate ( true )
269
-
270
- expect ( update . version ) . toBe ( "unknown" )
271
- expect ( logger . error ) . toHaveBeenCalled ( )
272
- expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
273
- identifier : "error" ,
274
- value : `reached max redirects` ,
275
- } )
276
- }
260
+ address . pathname = "/redirect/11"
261
+ const provider = new UpdateProvider ( address . toString ( ) , settings ( ) )
262
+ const update = await provider . getUpdate ( true )
263
+
264
+ expect ( update . version ) . toBe ( "unknown" )
265
+ expect ( logger . error ) . toHaveBeenCalled ( )
266
+ expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
267
+ identifier : "error" ,
268
+ value : `reached max redirects` ,
269
+ } )
277
270
} )
278
271
} )
0 commit comments