Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/test/sanity/src/cli.test.ts
4772 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { spawn } from 'child_process';
8
import { TestContext } from './context';
9
10
export function setup(context: TestContext) {
11
describe('CLI', () => {
12
if (context.platform === 'linux-arm64') {
13
it('cli-alpine-arm64', async () => {
14
const dir = await context.downloadAndUnpack('cli-alpine-arm64');
15
const entryPoint = context.getEntryPoint('cli', dir);
16
await testCliApp(entryPoint);
17
});
18
}
19
20
if (context.platform === 'linux-x64') {
21
it('cli-alpine-x64', async () => {
22
const dir = await context.downloadAndUnpack('cli-alpine-x64');
23
const entryPoint = context.getEntryPoint('cli', dir);
24
await testCliApp(entryPoint);
25
});
26
}
27
28
if (context.platform === 'darwin-arm64') {
29
it('cli-darwin-arm64', async () => {
30
const dir = await context.downloadAndUnpack('cli-darwin-arm64');
31
context.validateAllCodesignSignatures(dir);
32
const entryPoint = context.getEntryPoint('cli', dir);
33
await testCliApp(entryPoint);
34
});
35
}
36
37
if (context.platform === 'darwin-x64') {
38
it('cli-darwin-x64', async () => {
39
const dir = await context.downloadAndUnpack('cli-darwin-x64');
40
context.validateAllCodesignSignatures(dir);
41
const entryPoint = context.getEntryPoint('cli', dir);
42
await testCliApp(entryPoint);
43
});
44
}
45
46
if (context.platform === 'linux-arm64') {
47
it('cli-linux-arm64', async () => {
48
const dir = await context.downloadAndUnpack('cli-linux-arm64');
49
const entryPoint = context.getEntryPoint('cli', dir);
50
await testCliApp(entryPoint);
51
});
52
}
53
54
if (context.platform === 'linux-arm') {
55
it('cli-linux-armhf', async () => {
56
const dir = await context.downloadAndUnpack('cli-linux-armhf');
57
const entryPoint = context.getEntryPoint('cli', dir);
58
await testCliApp(entryPoint);
59
});
60
}
61
62
if (context.platform === 'linux-x64') {
63
it('cli-linux-x64', async () => {
64
const dir = await context.downloadAndUnpack('cli-linux-x64');
65
const entryPoint = context.getEntryPoint('cli', dir);
66
await testCliApp(entryPoint);
67
});
68
}
69
70
if (context.platform === 'win32-arm64') {
71
it('cli-win32-arm64', async () => {
72
const dir = await context.downloadAndUnpack('cli-win32-arm64');
73
context.validateAllAuthenticodeSignatures(dir);
74
const entryPoint = context.getEntryPoint('cli', dir);
75
await testCliApp(entryPoint);
76
});
77
}
78
79
if (context.platform === 'win32-x64') {
80
it('cli-win32-x64', async () => {
81
const dir = await context.downloadAndUnpack('cli-win32-x64');
82
context.validateAllAuthenticodeSignatures(dir);
83
const entryPoint = context.getEntryPoint('cli', dir);
84
await testCliApp(entryPoint);
85
});
86
}
87
88
async function testCliApp(entryPoint: string) {
89
const result = context.runNoErrors(entryPoint, '--version');
90
const version = result.stdout.trim();
91
assert.ok(version.includes(`(commit ${context.commit})`));
92
93
const workspaceDir = context.createTempDir();
94
process.chdir(workspaceDir);
95
context.log(`Changed current directory to: ${workspaceDir}`);
96
97
const args = [
98
'--cli-data-dir', context.createTempDir(),
99
'--user-data-dir', context.createTempDir(),
100
'tunnel',
101
'--accept-server-license-terms',
102
'--server-data-dir', context.createTempDir(),
103
'--extensions-dir', context.createTempDir(),
104
];
105
106
context.log(`Running CLI ${entryPoint} with args ${args.join(' ')}`);
107
const cli = spawn(entryPoint, args, { detached: true });
108
109
cli.stderr.on('data', (data) => {
110
context.error(`[CLI Error] ${data.toString().trim()}`);
111
});
112
113
cli.stdout.on('data', (data) => {
114
const text = data.toString().trim();
115
text.split('\n').forEach((line: string) => {
116
context.log(`[CLI Output] ${line}`);
117
});
118
119
const match = /Using GitHub for authentication/.exec(text);
120
if (match !== null) {
121
context.log(`CLI started successfully and is waiting for authentication`);
122
context.killProcessTree(cli.pid!);
123
}
124
});
125
126
await new Promise<void>((resolve, reject) => {
127
cli.on('error', reject);
128
cli.on('exit', resolve);
129
});
130
}
131
});
132
}
133
134