Skip to content

Commit 77dc2e3

Browse files
author
Andrew Hall (METAL)
committed
Merged PR 475343: Fix session id in unit tests
Session id is a default value when vs code is being tested. Add the same workaround that green does: https://dev.azure.com/devdiv/DevDiv/_git/vs-green?path=/src/telemetry/TelemetryService.ts&version=GBmain&line=73&lineEnd=74&lineStartColumn=1&lineEndColumn=1&lineStyle=plain&_a=contents
1 parent 4c82bc2 commit 77dc2e3

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/lsptoolshost/roslynLanguageServer.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import { ServerStateChange } from './ServerStateChange';
5555
import TelemetryReporter from '@vscode/extension-telemetry';
5656
import CSharpIntelliCodeExports from '../CSharpIntelliCodeExports';
5757
import { csharpDevkitExtensionId, getCSharpDevKit } from '../utils/getCSharpDevKit';
58+
import { randomUUID } from 'crypto';
5859

5960
let _languageServer: RoslynLanguageServer;
6061
let _channel: vscode.OutputChannel;
@@ -365,28 +366,28 @@ export class RoslynLanguageServer {
365366
let options = this.optionProvider.GetLatestOptions();
366367
let serverPath = this.getServerPath(options);
367368

368-
let dotnetRuntimePath = options.commonOptions.dotnetPath;
369+
let dotnetRuntimePath = options.commonOptions.dotnetPath;
369370
if (!dotnetRuntimePath)
370371
{
371-
let dotnetPath = await acquireDotNetProcessDependencies(serverPath);
372-
dotnetRuntimePath = path.dirname(dotnetPath);
372+
let dotnetPath = await acquireDotNetProcessDependencies(serverPath);
373+
dotnetRuntimePath = path.dirname(dotnetPath);
373374
}
374-
375+
375376
const dotnetExecutableName = this.platformInfo.isWindows() ? 'dotnet.exe' : 'dotnet';
376377
const dotnetExecutablePath = path.join(dotnetRuntimePath, dotnetExecutableName);
377378
if (!fs.existsSync(dotnetExecutablePath)) {
378379
throw new Error(`Cannot find dotnet path '${dotnetExecutablePath}'`);
379380
}
380381

381382
_channel.appendLine("Dotnet path: " + dotnetExecutablePath);
382-
383+
383384
// Take care to always run .NET processes on the runtime that we intend.
384385
// The dotnet.exe we point to should not go looking for other runtimes.
385386
const env: NodeJS.ProcessEnv = { ...process.env };
386387
env.DOTNET_ROOT = dotnetRuntimePath;
387388
env.DOTNET_MULTILEVEL_LOOKUP = '0';
388389
// Save user's DOTNET_ROOT env-var value so server can recover the user setting when needed
389-
env.DOTNET_ROOT_USER = process.env.DOTNET_ROOT ?? 'EMPTY';
390+
env.DOTNET_ROOT_USER = process.env.DOTNET_ROOT ?? 'EMPTY';
390391

391392
let args: string[] = [ ];
392393

@@ -532,7 +533,7 @@ export class RoslynLanguageServer {
532533
args.push(extensionPath);
533534
}
534535

535-
args.push("--sessionId", vscode.env.sessionId);
536+
args.push("--sessionId", getSessionId());
536537
return args;
537538
}
538539

@@ -676,3 +677,15 @@ export async function deactivate() {
676677
return _languageServer.stop();
677678
}
678679

680+
// VS code will have a default session id when running under tests. Since we may still
681+
// report telemetry, we need to give a unique session id instead of the default value.
682+
function getSessionId(): string {
683+
let sessionId = vscode.env.sessionId;
684+
685+
// 'somevalue.sessionid' is the test session id provided by vs code
686+
if (sessionId.toLowerCase() === 'somevalue.sessionid') {
687+
return randomUUID();
688+
}
689+
690+
return sessionId;
691+
}

0 commit comments

Comments
 (0)