Skip to content

Commit b82cd8b

Browse files
committed
Use real cancellation token match VSCode behaviour
1 parent f56f017 commit b82cd8b

File tree

3 files changed

+55
-39
lines changed

3 files changed

+55
-39
lines changed

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/run-remote-query.test.ts

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { assert, expect } from 'chai';
22
import * as path from 'path';
33
import * as sinon from 'sinon';
4-
import { CancellationToken, extensions, QuickPickItem, Uri, window } from 'vscode';
4+
import { CancellationTokenSource, extensions, QuickPickItem, Uri, window } from 'vscode';
55
import * as fs from 'fs-extra';
66
import * as os from 'os';
77
import * as yaml from 'js-yaml';
@@ -32,7 +32,7 @@ describe('Remote queries', function() {
3232

3333
let cli: CodeQLCliServer;
3434
let credentials: Credentials = {} as unknown as Credentials;
35-
let token: CancellationToken;
35+
let cancellationTokenSource: CancellationTokenSource;
3636
let progress: sinon.SinonSpy;
3737
let showQuickPickSpy: sinon.SinonStub;
3838
let getRepositoryFromNwoStub: sinon.SinonStub;
@@ -55,9 +55,15 @@ describe('Remote queries', function() {
5555
this.skip();
5656
}
5757
credentials = {} as unknown as Credentials;
58-
token = {
59-
isCancellationRequested: false
60-
} as unknown as CancellationToken;
58+
59+
cancellationTokenSource = {
60+
token: {
61+
isCancellationRequested: false,
62+
onCancellationRequested: sandbox.stub()
63+
},
64+
cancel: sandbox.stub(),
65+
dispose: sandbox.stub()
66+
};
6167

6268
progress = sandbox.spy();
6369
// Should not have asked for a language
@@ -88,7 +94,7 @@ describe('Remote queries', function() {
8894
it('should run a remote query that is part of a qlpack', async () => {
8995
const fileUri = getFile('data-remote-qlpack/in-pack.ql');
9096

91-
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, token);
97+
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
9298
expect(querySubmissionResult).to.be.ok;
9399
const queryPackRootDir = querySubmissionResult!.queryDirPath!;
94100
printDirectoryContents(queryPackRootDir);
@@ -149,7 +155,7 @@ describe('Remote queries', function() {
149155
it('should run a remote query that is not part of a qlpack', async () => {
150156
const fileUri = getFile('data-remote-no-qlpack/in-pack.ql');
151157

152-
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, token);
158+
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
153159
expect(querySubmissionResult).to.be.ok;
154160
const queryPackRootDir = querySubmissionResult!.queryDirPath!;
155161

@@ -212,7 +218,7 @@ describe('Remote queries', function() {
212218
it('should run a remote query that is nested inside a qlpack', async () => {
213219
const fileUri = getFile('data-remote-qlpack-nested/subfolder/in-pack.ql');
214220

215-
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, token);
221+
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
216222
expect(querySubmissionResult).to.be.ok;
217223
const queryPackRootDir = querySubmissionResult!.queryDirPath!;
218224

@@ -274,9 +280,9 @@ describe('Remote queries', function() {
274280
it('should cancel a run before uploading', async () => {
275281
const fileUri = getFile('data-remote-no-qlpack/in-pack.ql');
276282

277-
const promise = runRemoteQuery(cli, credentials, fileUri, true, progress, token);
283+
const promise = runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
278284

279-
token.isCancellationRequested = true;
285+
cancellationTokenSource.token.isCancellationRequested = true;
280286

281287
try {
282288
await promise;
@@ -300,7 +306,7 @@ describe('Remote queries', function() {
300306
it('should run a variant analysis that is part of a qlpack', async () => {
301307
const fileUri = getFile('data-remote-qlpack/in-pack.ql');
302308

303-
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, token);
309+
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
304310
expect(querySubmissionResult).to.be.ok;
305311
const variantAnalysis = querySubmissionResult!.variantAnalysis!;
306312
expect(variantAnalysis.id).to.be.equal(mockApiResponse.id);
@@ -313,7 +319,7 @@ describe('Remote queries', function() {
313319
it('should run a remote query that is not part of a qlpack', async () => {
314320
const fileUri = getFile('data-remote-no-qlpack/in-pack.ql');
315321

316-
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, token);
322+
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
317323
expect(querySubmissionResult).to.be.ok;
318324
const variantAnalysis = querySubmissionResult!.variantAnalysis!;
319325
expect(variantAnalysis.id).to.be.equal(mockApiResponse.id);
@@ -326,7 +332,7 @@ describe('Remote queries', function() {
326332
it('should run a remote query that is nested inside a qlpack', async () => {
327333
const fileUri = getFile('data-remote-qlpack-nested/subfolder/in-pack.ql');
328334

329-
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, token);
335+
const querySubmissionResult = await runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
330336
expect(querySubmissionResult).to.be.ok;
331337
const variantAnalysis = querySubmissionResult!.variantAnalysis!;
332338
expect(variantAnalysis.id).to.be.equal(mockApiResponse.id);
@@ -339,9 +345,9 @@ describe('Remote queries', function() {
339345
it('should cancel a run before uploading', async () => {
340346
const fileUri = getFile('data-remote-no-qlpack/in-pack.ql');
341347

342-
const promise = runRemoteQuery(cli, credentials, fileUri, true, progress, token);
348+
const promise = runRemoteQuery(cli, credentials, fileUri, true, progress, cancellationTokenSource.token);
343349

344-
token.isCancellationRequested = true;
350+
cancellationTokenSource.token.isCancellationRequested = true;
345351

346352
try {
347353
await promise;

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as sinon from 'sinon';
22
import { expect } from 'chai';
3-
import { CancellationToken, extensions } from 'vscode';
3+
import { CancellationTokenSource, extensions } from 'vscode';
44
import { CodeQLExtensionInterface } from '../../../extension';
55
import { logger } from '../../../logging';
66
import * as config from '../../../config';
@@ -19,7 +19,7 @@ import { createMockVariantAnalysisRepoTask } from '../../factories/remote-querie
1919

2020
describe('Variant Analysis Manager', async function() {
2121
let sandbox: sinon.SinonSandbox;
22-
let cancellationToken: CancellationToken;
22+
let cancellationTokenSource: CancellationTokenSource;
2323
let variantAnalysisManager: VariantAnalysisManager;
2424
let variantAnalysis: VariantAnalysisApiResponse;
2525
let scannedRepos: ApiVariantAnalysisScannedRepository[];
@@ -33,9 +33,14 @@ describe('Variant Analysis Manager', async function() {
3333
sandbox.stub(fs, 'mkdirSync');
3434
sandbox.stub(fs, 'writeFile');
3535

36-
cancellationToken = {
37-
isCancellationRequested: false
38-
} as unknown as CancellationToken;
36+
cancellationTokenSource = {
37+
token: {
38+
isCancellationRequested: false,
39+
onCancellationRequested: sandbox.stub()
40+
},
41+
cancel: sandbox.stub(),
42+
dispose: sandbox.stub()
43+
};
3944

4045
scannedRepos = createMockScannedRepos();
4146
variantAnalysis = createMockApiResponse('in_progress', scannedRepos);
@@ -60,7 +65,7 @@ describe('Variant Analysis Manager', async function() {
6065
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
6166
scannedRepos[0],
6267
variantAnalysis,
63-
cancellationToken
68+
cancellationTokenSource.token
6469
);
6570
} catch (error: any) {
6671
expect(error.message).to.equal('Error authenticating with GitHub');
@@ -94,7 +99,7 @@ describe('Variant Analysis Manager', async function() {
9499
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
95100
scannedRepos[0],
96101
variantAnalysis,
97-
cancellationToken
102+
cancellationTokenSource.token
98103
);
99104

100105
expect(getVariantAnalysisRepoResultStub.notCalled).to.be.true;
@@ -111,12 +116,12 @@ describe('Variant Analysis Manager', async function() {
111116
});
112117

113118
it('should return early if variant analysis is cancelled', async () => {
114-
cancellationToken.isCancellationRequested = true;
119+
cancellationTokenSource.token.isCancellationRequested = true;
115120

116121
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
117122
scannedRepos[0],
118123
variantAnalysis,
119-
cancellationToken
124+
cancellationTokenSource.token
120125
);
121126

122127
expect(getVariantAnalysisRepoStub.notCalled).to.be.true;
@@ -126,7 +131,7 @@ describe('Variant Analysis Manager', async function() {
126131
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
127132
scannedRepos[0],
128133
variantAnalysis,
129-
cancellationToken
134+
cancellationTokenSource.token
130135
);
131136

132137
expect(getVariantAnalysisRepoStub.calledOnce).to.be.true;
@@ -136,7 +141,7 @@ describe('Variant Analysis Manager', async function() {
136141
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
137142
scannedRepos[0],
138143
variantAnalysis,
139-
cancellationToken
144+
cancellationTokenSource.token
140145
);
141146

142147
expect(getVariantAnalysisRepoResultStub.calledOnce).to.be.true;
@@ -146,7 +151,7 @@ describe('Variant Analysis Manager', async function() {
146151
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
147152
scannedRepos[0],
148153
variantAnalysis,
149-
cancellationToken
154+
cancellationTokenSource.token
150155
);
151156

152157
expect(getVariantAnalysisRepoResultStub.calledOnce).to.be.true;

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-monitor.test.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as sinon from 'sinon';
22
import { expect } from 'chai';
3-
import { CancellationToken, extensions } from 'vscode';
3+
import { CancellationTokenSource, extensions } from 'vscode';
44
import { CodeQLExtensionInterface } from '../../../extension';
55
import { logger } from '../../../logging';
66
import * as config from '../../../config';
@@ -22,7 +22,7 @@ import { createMockVariantAnalysis } from '../../factories/remote-queries/shared
2222
describe('Variant Analysis Monitor', async function() {
2323
let sandbox: sinon.SinonSandbox;
2424
let mockGetVariantAnalysis: sinon.SinonStub;
25-
let cancellationToken: CancellationToken;
25+
let cancellationTokenSource: CancellationTokenSource;
2626
let variantAnalysisMonitor: VariantAnalysisMonitor;
2727
let variantAnalysis: VariantAnalysis;
2828

@@ -31,9 +31,14 @@ describe('Variant Analysis Monitor', async function() {
3131
sandbox.stub(logger, 'log');
3232
sandbox.stub(config, 'isVariantAnalysisLiveResultsEnabled').returns(false);
3333

34-
cancellationToken = {
35-
isCancellationRequested: false
36-
} as unknown as CancellationToken;
34+
cancellationTokenSource = {
35+
token: {
36+
isCancellationRequested: false,
37+
onCancellationRequested: sandbox.stub()
38+
},
39+
cancel: sandbox.stub(),
40+
dispose: sandbox.stub()
41+
};
3742

3843
variantAnalysis = createMockVariantAnalysis();
3944

@@ -56,7 +61,7 @@ describe('Variant Analysis Monitor', async function() {
5661

5762
it('should return early if credentials are wrong', async () => {
5863
try {
59-
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
64+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
6065
} catch (error: any) {
6166
expect(error.message).to.equal('Error authenticating with GitHub');
6267
}
@@ -74,9 +79,9 @@ describe('Variant Analysis Monitor', async function() {
7479
});
7580

7681
it('should return early if variant analysis is cancelled', async () => {
77-
cancellationToken.isCancellationRequested = true;
82+
cancellationTokenSource.token.isCancellationRequested = true;
7883

79-
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
84+
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
8085

8186
expect(result).to.eql({ status: 'Cancelled', error: 'Variant Analysis was canceled.' });
8287
});
@@ -90,7 +95,7 @@ describe('Variant Analysis Monitor', async function() {
9095
});
9196

9297
it('should mark as failed locally and stop monitoring', async () => {
93-
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
98+
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
9499

95100
expect(mockGetVariantAnalysis.calledOnce).to.be.true;
96101
expect(result.status).to.eql('Failed');
@@ -112,7 +117,7 @@ describe('Variant Analysis Monitor', async function() {
112117
});
113118

114119
it('should succeed and return a list of scanned repo ids', async () => {
115-
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
120+
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
116121
const scannedRepoIds = scannedRepos.filter(r => r.analysis_status == 'succeeded').map(r => r.repository.id);
117122

118123
expect(result.status).to.equal('CompletedSuccessfully');
@@ -130,7 +135,7 @@ describe('Variant Analysis Monitor', async function() {
130135
});
131136

132137
it('should succeed and return an empty list of scanned repo ids', async () => {
133-
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
138+
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
134139

135140
expect(result.status).to.equal('CompletedSuccessfully');
136141
expect(result.scannedReposDownloaded).to.eql([]);
@@ -145,7 +150,7 @@ describe('Variant Analysis Monitor', async function() {
145150
});
146151

147152
it('should succeed and return an empty list of scanned repo ids', async () => {
148-
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
153+
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token);
149154

150155
expect(result.status).to.equal('CompletedSuccessfully');
151156
expect(result.scannedReposDownloaded).to.eql([]);

0 commit comments

Comments
 (0)