@@ -14,6 +14,8 @@ import {
1414 request ,
1515} from 'aws-core-vscode/shared'
1616import * as semver from 'semver'
17+ import { assertTelemetry } from 'aws-core-vscode/test'
18+ import { LspController } from 'aws-core-vscode/amazonq'
1719
1820function 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} )
0 commit comments