Skip to content

Commit 20e1f00

Browse files
authored
test(toolkit): Add region provider remote test (#6425)
## Problem In the release yesterday we found an issue where fetching remote region data was failing ## Solution Add a new test since its critical to the flow --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 53f11e7 commit 20e1f00

File tree

2 files changed

+58
-18
lines changed

2 files changed

+58
-18
lines changed

packages/core/src/shared/regions/regionProvider.ts

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -162,25 +162,30 @@ export class RegionProvider {
162162
remote: () => Endpoints | Promise<Endpoints>
163163
}): RegionProvider {
164164
const instance = new this()
165+
void instance.init(endpointsProvider)
166+
return instance
167+
}
165168

166-
async function load() {
167-
getLogger().info('endpoints: retrieving AWS endpoints data')
168-
instance.loadFromEndpoints(await endpointsProvider.local())
169-
170-
try {
171-
instance.loadFromEndpoints(await endpointsProvider.remote())
172-
} catch (err) {
173-
getLogger().warn(
174-
`endpoints: failed to load from remote source, region data may appear outdated: %s`,
175-
err
176-
)
177-
}
169+
async init(endpointsProvider: {
170+
local: () => Endpoints | Promise<Endpoints>
171+
remote: () => Endpoints | Promise<Endpoints>
172+
}) {
173+
getLogger().info('endpoints: retrieving AWS endpoints data')
174+
175+
try {
176+
this.loadFromEndpoints(await endpointsProvider.local())
177+
} catch (err) {
178+
getLogger().warn(`endpoints: failed to load from local source: %s`, err)
178179
}
179180

180-
load().catch((err) => {
181-
getLogger().error('Failure while loading Endpoints Manifest: %s', err)
181+
try {
182+
this.loadFromEndpoints(await endpointsProvider.remote())
183+
} catch (err) {
184+
getLogger().warn(`endpoints: failed to load from remote source, region data may appear outdated: %s`, err)
185+
}
182186

183-
return vscode.window.showErrorMessage(
187+
if (this.getRegions().length === 0) {
188+
void vscode.window.showErrorMessage(
184189
`${localize(
185190
'AWS.error.endpoint.load.failure',
186191
'The {0} Toolkit was unable to load endpoints data.',
@@ -190,9 +195,7 @@ export class RegionProvider {
190195
'Toolkit functionality may be impacted until VS Code is restarted.'
191196
)}`
192197
)
193-
})
194-
195-
return instance
198+
}
196199
}
197200
}
198201

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import assert from 'assert'
7+
import { makeEndpointsProvider } from '../extension'
8+
import { RegionProvider } from '../shared/regions/regionProvider'
9+
import globals from '../shared/extensionGlobals'
10+
import path from 'path'
11+
import { TestFolder } from '../test/testUtil'
12+
13+
describe('Region Provider', async function () {
14+
let tempFolder: TestFolder
15+
16+
before(async () => {
17+
tempFolder = await TestFolder.create()
18+
})
19+
20+
it('resolves from remote', async function () {
21+
/**
22+
* Make sure the local file doesn't resolve to any endpoints.
23+
* That way we can make sure remote contents are fetched
24+
*/
25+
await tempFolder.write('foo.json', '{}')
26+
globals.manifestPaths.endpoints = path.join(tempFolder.path, 'foo.json')
27+
28+
await assert.doesNotReject(async () => {
29+
const endpointProvider = makeEndpointsProvider()
30+
const regionProvider = new RegionProvider()
31+
await regionProvider.init(endpointProvider)
32+
33+
// regions loaded from the remote
34+
assert.ok(regionProvider.getRegions().length > 0)
35+
})
36+
})
37+
})

0 commit comments

Comments
 (0)