Skip to content

Commit d286070

Browse files
committed
test: add telemetry to e2e tests
1 parent ea4e35a commit d286070

File tree

2 files changed

+103
-16
lines changed

2 files changed

+103
-16
lines changed

packages/amazonq/test/e2e/lsp/lspInstaller.test.ts

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
request,
1515
} from 'aws-core-vscode/shared'
1616
import * as semver from 'semver'
17+
import { assertTelemetry } from 'aws-core-vscode/test'
18+
import { LspController } from 'aws-core-vscode/amazonq'
1719

1820
function createVersion(version: string) {
1921
return {
@@ -46,6 +48,8 @@ describe('AmazonQLSPInstaller', () => {
4648
resolver = new AmazonQLSPResolver()
4749
tempDir = await makeTemporaryToolkitFolder()
4850
sandbox.stub(LanguageServerResolver.prototype, 'defaultDownloadFolder').returns(tempDir)
51+
// Called on extension activation and can contaminate telemetry.
52+
sandbox.stub(LspController.prototype, 'trySetupLsp')
4953
})
5054

5155
afterEach(async () => {
@@ -117,6 +121,91 @@ describe('AmazonQLSPInstaller', () => {
117121
assert.ok(fallback.assetDirectory.startsWith(tempDir))
118122
assert.deepStrictEqual(fallback.location, 'fallback')
119123
assert.ok(semver.satisfies(fallback.version, supportedLspServerVersions))
124+
125+
// Exclude version numbers so that this test doesn't have to be updated on each update.
126+
assertTelemetry('languageServer_setup', [
127+
/* First Try Telemetry
128+
getManifest: remote fails, then cache succeeds.
129+
getServer: cache fails then remote succeeds.
130+
validate: succeeds.
131+
*/
132+
{
133+
id: 'AmazonQ',
134+
manifestLocation: 'remote',
135+
languageServerSetupStage: 'getManifest',
136+
result: 'Failed',
137+
},
138+
{
139+
id: 'AmazonQ',
140+
manifestLocation: 'cache',
141+
languageServerSetupStage: 'getManifest',
142+
result: 'Succeeded',
143+
},
144+
{
145+
id: 'AmazonQ',
146+
languageServerLocation: 'cache',
147+
languageServerSetupStage: 'getServer',
148+
result: 'Failed',
149+
},
150+
{
151+
id: 'AmazonQ',
152+
languageServerLocation: 'remote',
153+
languageServerSetupStage: 'validate',
154+
result: 'Succeeded',
155+
},
156+
{
157+
id: 'AmazonQ',
158+
languageServerLocation: 'remote',
159+
languageServerSetupStage: 'getServer',
160+
result: 'Succeeded',
161+
},
162+
/* Second Try Telemetry
163+
getManifest: remote fails, then cache succeeds.
164+
getServer: cache succeeds
165+
validate: doesn't run since its cached.
166+
*/
167+
{
168+
id: 'AmazonQ',
169+
manifestLocation: 'remote',
170+
languageServerSetupStage: 'getManifest',
171+
result: 'Failed',
172+
},
173+
{
174+
id: 'AmazonQ',
175+
manifestLocation: 'cache',
176+
languageServerSetupStage: 'getManifest',
177+
result: 'Succeeded',
178+
},
179+
{
180+
id: 'AmazonQ',
181+
languageServerLocation: 'cache',
182+
languageServerSetupStage: 'getServer',
183+
result: 'Succeeded',
184+
},
185+
/* Third Try Telemetry
186+
getManifest: (stubbed to fail, no telemetry)
187+
getServer: remote and cache fail
188+
validate: no validation since not remote.
189+
*/
190+
{
191+
id: 'AmazonQ',
192+
languageServerLocation: 'cache',
193+
languageServerSetupStage: 'getServer',
194+
result: 'Failed',
195+
},
196+
{
197+
id: 'AmazonQ',
198+
languageServerLocation: 'remote',
199+
languageServerSetupStage: 'getServer',
200+
result: 'Failed',
201+
},
202+
{
203+
id: 'AmazonQ',
204+
languageServerLocation: 'fallback',
205+
languageServerSetupStage: 'getServer',
206+
result: 'Succeeded',
207+
},
208+
])
120209
})
121210
})
122211
})

packages/core/src/shared/lsp/lspResolver.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -200,26 +200,24 @@ export class LanguageServerResolver {
200200
}
201201
})
202202
const fetchResults = await Promise.all(fetchTasks)
203-
const verifyTasks = fetchResults.flatMap(async (fetchResult) => {
204-
if (!(fetchResult.res && fetchResult.res.ok && fetchResult.res.body)) {
203+
const verifyTasks = fetchResults
204+
.filter((fetchResult) => fetchResult.res && fetchResult.res.ok && fetchResult.res.body)
205+
.flatMap(async (fetchResult) => {
206+
const arrBuffer = await fetchResult.res!.arrayBuffer()
207+
const data = Buffer.from(arrBuffer)
208+
209+
const hash = createHash('sha384', data)
210+
if (hash === fetchResult.hash) {
211+
return [{ filename: fetchResult.filename, data }]
212+
}
205213
return []
206-
}
207-
208-
const arrBuffer = await fetchResult.res.arrayBuffer()
209-
const data = Buffer.from(arrBuffer)
210-
211-
const hash = createHash('sha384', data)
212-
if (hash === fetchResult.hash) {
213-
return [{ filename: fetchResult.filename, data }]
214-
}
215-
return []
216-
})
217-
const filesToDownload = await lspSetupStage('validate', async () => (await Promise.all(verifyTasks)).flat())
218-
219-
if (filesToDownload.length !== contents.length) {
214+
})
215+
if (verifyTasks.length !== contents.length) {
220216
return false
221217
}
222218

219+
const filesToDownload = await lspSetupStage('validate', async () => (await Promise.all(verifyTasks)).flat())
220+
223221
for (const file of filesToDownload) {
224222
await fs.writeFile(`${downloadDirectory}/${file.filename}`, file.data)
225223
}

0 commit comments

Comments
 (0)