Skip to content

Commit d56472a

Browse files
committed
merge in master
2 parents 3a41c8a + 1bfd53b commit d56472a

File tree

3 files changed

+137
-3
lines changed

3 files changed

+137
-3
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
import assert from 'assert'
6+
import { WorkspaceFolder } from 'vscode'
7+
import { performanceTest } from '../../shared/performance/performance'
8+
import { createTestWorkspace } from '../testUtil'
9+
import { prepareRepoData, TelemetryHelper } from '../../amazonqFeatureDev'
10+
import { AmazonqCreateUpload, getRandomString } from '../../shared'
11+
import { Span } from '../../shared/telemetry'
12+
13+
type resultType = {
14+
zipFileBuffer: Buffer
15+
zipFileChecksum: string
16+
}
17+
18+
function performanceTestWrapper(numFiles: number, fileSize: number) {
19+
return performanceTest(
20+
{
21+
testRuns: 10,
22+
linux: {
23+
userCpuUsage: 100,
24+
systemCpuUsage: 35,
25+
heapTotal: 4,
26+
},
27+
darwin: {
28+
userCpuUsage: 100,
29+
systemCpuUsage: 35,
30+
heapTotal: 4,
31+
},
32+
win32: {
33+
userCpuUsage: 100,
34+
systemCpuUsage: 35,
35+
heapTotal: 4,
36+
},
37+
},
38+
`handles ${numFiles} files of size ${fileSize} bytes`,
39+
function () {
40+
const telemetry = new TelemetryHelper()
41+
return {
42+
setup: async () => {
43+
return await createTestWorkspace(numFiles, {
44+
fileNamePrefix: 'file',
45+
fileContent: getRandomString(fileSize),
46+
fileNameSuffix: '.md',
47+
})
48+
},
49+
execute: async (workspace: WorkspaceFolder) => {
50+
return await prepareRepoData([workspace.uri.fsPath], [workspace], telemetry, {
51+
record: () => {},
52+
} as unknown as Span<AmazonqCreateUpload>)
53+
},
54+
verify: async (_w: WorkspaceFolder, result: resultType) => {
55+
verifyResult(result, telemetry, numFiles * fileSize)
56+
},
57+
}
58+
}
59+
)
60+
}
61+
62+
function verifyResult(result: resultType, telemetry: TelemetryHelper, expectedSize: number): void {
63+
assert.ok(result)
64+
assert.strictEqual(Buffer.isBuffer(result.zipFileBuffer), true)
65+
assert.strictEqual(telemetry.repositorySize, expectedSize)
66+
assert.strictEqual(result.zipFileChecksum.length, 44)
67+
}
68+
69+
describe('prepareRepoData', function () {
70+
describe('Performance Tests', function () {
71+
performanceTestWrapper(250, 10)
72+
performanceTestWrapper(10, 1000)
73+
})
74+
})

packages/core/src/test/eventSchemas/commands/downloadSchemaItemCode.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ describe('CodeDownloader', function () {
4949

5050
afterEach(async function () {
5151
sandbox.restore()
52-
await fs.delete(tempFolder, { force: true })
52+
await fs.delete(tempFolder, { recursive: true })
5353
})
5454
const testSchemaName = 'testSchema'
5555
const testRegistryName = 'testRegistry'
@@ -129,7 +129,7 @@ describe('CodeGenerator', function () {
129129

130130
afterEach(async function () {
131131
sandbox.restore()
132-
await fs.delete(tempFolder, { force: true })
132+
await fs.delete(tempFolder, { recursive: true })
133133
})
134134
const testSchemaName = 'testSchema'
135135
const testRegistryName = 'testRegistry'
@@ -202,7 +202,7 @@ describe('CodeGeneratorStatusPoller', function () {
202202

203203
afterEach(async function () {
204204
sandbox.restore()
205-
await fs.delete(tempFolder, { force: true })
205+
await fs.delete(tempFolder, { recursive: true })
206206
})
207207
const testSchemaName = 'testSchema'
208208
const testRegistryName = 'testRegistry'
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import { performanceTest } from '../shared/performance/performance'
7+
import * as sinon from 'sinon'
8+
import * as vscode from 'vscode'
9+
import assert from 'assert'
10+
import { LspClient, LspController } from '../amazonq'
11+
import { LanguageClient, ServerOptions } from 'vscode-languageclient'
12+
import { createTestWorkspace } from '../test/testUtil'
13+
import { GetUsageRequestType, IndexRequestType } from '../amazonq/lsp/types'
14+
import { getRandomString } from '../shared'
15+
16+
interface SetupResult {
17+
clientReqStub: sinon.SinonStub
18+
}
19+
20+
async function verifyResult(setup: SetupResult) {
21+
assert.ok(setup.clientReqStub.calledTwice)
22+
assert.ok(setup.clientReqStub.firstCall.calledWith(IndexRequestType))
23+
assert.ok(setup.clientReqStub.secondCall.calledWith(GetUsageRequestType))
24+
}
25+
26+
async function setupWithWorkspace(numFiles: number, options: { fileContent: string }): Promise<SetupResult> {
27+
// Force VSCode to find my test workspace only to keep test contained and controlled.
28+
const testWorksapce = await createTestWorkspace(numFiles, options)
29+
sinon.stub(vscode.workspace, 'workspaceFolders').value([testWorksapce])
30+
// Avoid sending real request to lsp.
31+
const clientReqStub = sinon.stub(LanguageClient.prototype, 'sendRequest').resolves(true)
32+
LspClient.instance.client = new LanguageClient('amazonq', 'test-client', {} as ServerOptions, {})
33+
return { clientReqStub }
34+
}
35+
36+
describe('buildIndex', function () {
37+
describe('performanceTests', function () {
38+
afterEach(function () {
39+
sinon.restore()
40+
})
41+
performanceTest({}, 'indexing many small files', function () {
42+
return {
43+
setup: async () => setupWithWorkspace(250, { fileContent: '0123456789' }),
44+
execute: async () => {
45+
await LspController.instance.buildIndex()
46+
},
47+
verify: verifyResult,
48+
}
49+
})
50+
performanceTest({}, 'indexing few large files', function () {
51+
return {
52+
setup: async () => setupWithWorkspace(10, { fileContent: getRandomString(1000) }),
53+
execute: async () => {
54+
await LspController.instance.buildIndex()
55+
},
56+
verify: verifyResult,
57+
}
58+
})
59+
})
60+
})

0 commit comments

Comments
 (0)