From c189df3fd663eee3dca7738ffb19cc263e66614c Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Fri, 25 Feb 2022 17:19:43 -0800 Subject: [PATCH] Ensure Graph results can only be seen if in canary mode --- extensions/ql-vscode/src/run-queries.ts | 11 +++++--- .../vscode-tests/no-workspace/helpers.test.ts | 3 +++ .../no-workspace/run-queries.test.ts | 25 ++++++++++++++++--- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/extensions/ql-vscode/src/run-queries.ts b/extensions/ql-vscode/src/run-queries.ts index 0f3079037..6b34abd3f 100644 --- a/extensions/ql-vscode/src/run-queries.ts +++ b/extensions/ql-vscode/src/run-queries.ts @@ -206,16 +206,21 @@ export class QueryEvaluationInfo { return false; } - const hasKind = !!this.metadata?.kind; + const kind = this.metadata?.kind; + const hasKind = !!kind; if (!hasKind) { void logger.log('Cannot produce interpreted results since the query does not have @kind metadata.'); return false; } + // Graph queries only return interpreted results if we are in canary mode. + if (kind === 'graph') { + return config.isCanary(); + } + // table is the default query kind. It does not produce interpreted results. // any query kind that is not table can, in principle, produce interpreted results. - const isTable = hasKind && this.metadata?.kind === 'table'; - return !isTable; + return kind !== 'table'; } /** diff --git a/extensions/ql-vscode/src/vscode-tests/no-workspace/helpers.test.ts b/extensions/ql-vscode/src/vscode-tests/no-workspace/helpers.test.ts index 38a4699f8..6af5fdda7 100644 --- a/extensions/ql-vscode/src/vscode-tests/no-workspace/helpers.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/no-workspace/helpers.test.ts @@ -407,6 +407,7 @@ describe('walkDirectory', () => { tmpDir.removeCallback(); }); + it('should walk a directory', async () => { const file1 = path.join(dir, 'file1'); const file2 = path.join(dir, 'file2'); @@ -438,6 +439,8 @@ describe('walkDirectory', () => { fs.writeFileSync(file8, 'file8'); fs.writeFileSync(file9, 'file9'); + // We don't really need to be testing all of these variants of symlinks, + // but it doesn't hurt, and will help us if we ever do decide to support them. fs.symlinkSync(file6, symLinkFile7, 'file'); fs.symlinkSync(dir3, symlinkDir, 'dir'); fs.symlinkSync(file8, symlinkFile2, 'file'); diff --git a/extensions/ql-vscode/src/vscode-tests/no-workspace/run-queries.test.ts b/extensions/ql-vscode/src/vscode-tests/no-workspace/run-queries.test.ts index 3b0a9f776..1b34faf79 100644 --- a/extensions/ql-vscode/src/vscode-tests/no-workspace/run-queries.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/no-workspace/run-queries.test.ts @@ -4,15 +4,27 @@ import 'mocha'; import 'sinon-chai'; import * as sinon from 'sinon'; import * as chaiAsPromised from 'chai-as-promised'; +import { Uri } from 'vscode'; import { QueryEvaluationInfo } from '../../run-queries'; import { Severity, compileQuery } from '../../pure/messages'; -import { Uri } from 'vscode'; +import * as config from '../../config'; chai.use(chaiAsPromised); const expect = chai.expect; describe('run-queries', () => { + let sandbox: sinon.SinonSandbox; + beforeEach(() => { + sandbox = sinon.createSandbox(); + + sandbox.stub(config, 'isCanary').returns(false); + }); + + afterEach(() => { + sandbox.restore(); + }); + it('should create a QueryEvaluationInfo', () => { const saveDir = 'query-save-dir'; const info = createMockQueryInfo(true, saveDir); @@ -38,6 +50,13 @@ describe('run-queries', () => { info.metadata!.kind = 'table'; expect(info.canHaveInterpretedResults()).to.eq(false); + + // Graphs are not interpreted unless canary is set + info.metadata!.kind = 'graph'; + expect(info.canHaveInterpretedResults()).to.eq(false); + + (config.isCanary as sinon.SinonStub).returns(true); + expect(info.canHaveInterpretedResults()).to.eq(true); }); describe('compile', () => { @@ -108,7 +127,7 @@ describe('run-queries', () => { config: { timeoutSecs: 5 }, - sendRequest: sinon.stub().returns(new Promise(resolve => { + sendRequest: sandbox.stub().returns(new Promise(resolve => { resolve({ messages: [ { message: 'err', severity: Severity.ERROR }, @@ -117,7 +136,7 @@ describe('run-queries', () => { }); })), logger: { - log: sinon.spy() + log: sandbox.spy() } }; }