1
1
import * as http from "http"
2
+ import { logger } from "@coder/logger"
3
+ import { AddressInfo } from "net"
2
4
import * as path from "path"
3
5
import { SettingsProvider , UpdateSettings } from "../../../src/node/settings"
4
6
import { LatestResponse , UpdateProvider } from "../../../src/node/update"
7
+ import { isAddressInfo } from "../../../src/node/util"
5
8
import { clean , mockLogger , tmpdir } from "../../utils/helpers"
6
9
7
10
describe ( "update" , ( ) => {
@@ -23,6 +26,11 @@ describe("update", () => {
23
26
return response . end ( JSON . stringify ( latest ) )
24
27
}
25
28
29
+ if ( request . url === "/reject-status-code" ) {
30
+ response . writeHead ( 500 )
31
+ return response . end ( "rejected status code test" )
32
+ }
33
+
26
34
// Anything else is a 404.
27
35
response . writeHead ( 404 )
28
36
response . end ( "not found" )
@@ -37,6 +45,7 @@ describe("update", () => {
37
45
}
38
46
39
47
let _provider : UpdateProvider | undefined
48
+ let _address : string | AddressInfo | null
40
49
const provider = ( ) : UpdateProvider => {
41
50
if ( ! _provider ) {
42
51
throw new Error ( "Update provider has not been created" )
@@ -62,12 +71,12 @@ describe("update", () => {
62
71
} )
63
72
} )
64
73
65
- const address = server . address ( )
66
- if ( ! address || typeof address === "string" || ! address . port ) {
74
+ _address = server . address ( )
75
+ if ( ! isAddressInfo ( _address ) ) {
67
76
throw new Error ( "unexpected address" )
68
77
}
69
78
70
- _provider = new UpdateProvider ( `http://${ address . address } :${ address . port } /latest` , _settings )
79
+ _provider = new UpdateProvider ( `http://${ _address ? .address } :${ _address ? .port } /latest` , _settings )
71
80
} )
72
81
73
82
afterAll ( ( ) => {
@@ -170,4 +179,19 @@ describe("update", () => {
170
179
expect ( update . checked < Date . now ( ) && update . checked >= now ) . toEqual ( true )
171
180
expect ( update . version ) . toStrictEqual ( "unknown" )
172
181
} )
182
+
183
+ it ( "should reject if response has status code 500" , async ( ) => {
184
+ if ( isAddressInfo ( _address ) ) {
185
+ const mockURL = `http://${ _address . address } :${ _address . port } /reject-status-code`
186
+ let provider = new UpdateProvider ( mockURL , settings ( ) )
187
+ let update = await provider . getUpdate ( true )
188
+
189
+ expect ( update . version ) . toBe ( "unknown" )
190
+ expect ( logger . error ) . toHaveBeenCalled ( )
191
+ expect ( logger . error ) . toHaveBeenCalledWith ( "Failed to get latest version" , {
192
+ identifier : "error" ,
193
+ value : `${ mockURL } : 500` ,
194
+ } )
195
+ }
196
+ } )
173
197
} )
0 commit comments