Skip to content

Commit 5e87464

Browse files
committed
Add test timeout and -AsJob test
1 parent d2eb4ac commit 5e87464

File tree

1 file changed

+59
-3
lines changed

1 file changed

+59
-3
lines changed

test/PowerShellEditorServices.Test.E2E/DebugAdapterProtocolMessageTests.cs

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Linq;
77
using System.Runtime.InteropServices;
88
using System.Text;
9+
using System.Threading;
910
using System.Threading.Tasks;
1011
using Microsoft.PowerShell.EditorServices.Handlers;
1112
using Nerdbank.Streams;
@@ -54,11 +55,15 @@ public class DebugAdapterProtocolMessageTests(ITestOutputHelper output) : IAsync
5455
/// </summary>
5556
private Task<StoppedEvent> nextStopped => nextStoppedTcs.Task;
5657

57-
private readonly TaskCompletionSource<StartDebuggingAttachRequestArguments> startDebuggingAttachRequestTcs = new();
5858
/// <summary>
5959
/// This task is useful for waiting until a StartDebuggingAttachRequest is received.
6060
/// </summary>
61-
private Task<StartDebuggingAttachRequestArguments> startDebuggingAttachRequest => startDebuggingAttachRequestTcs.Task;
61+
private readonly TaskCompletionSource<StartDebuggingAttachRequestArguments> startDebuggingAttachRequestTcs = new();
62+
63+
/// <summary>
64+
/// This task is useful for waiting until the debug session has terminated.
65+
/// </summary>
66+
private readonly TaskCompletionSource<TerminatedEvent> terminatedTcs = new();
6267

6368
public async Task InitializeAsync()
6469
{
@@ -112,6 +117,11 @@ send until a launch is sent.
112117
startDebuggingAttachRequestTcs.SetResult(request);
113118
return Task.CompletedTask;
114119
})
120+
.OnTerminated((TerminatedEvent e) =>
121+
{
122+
terminatedTcs.SetResult(e);
123+
return Task.CompletedTask;
124+
})
115125
;
116126
});
117127

@@ -545,16 +555,62 @@ public async Task CanLaunchScriptWithNewChildAttachSession(
545555

546556
string script = NewTestFile($"Start-DebugAttachSession {paramString}");
547557

558+
using CancellationTokenSource timeoutCts = new(30000);
559+
using CancellationTokenRegistration _ = timeoutCts.Token.Register(() =>
560+
{
561+
startDebuggingAttachRequestTcs.TrySetCanceled();
562+
});
563+
using CancellationTokenRegistration _2 = timeoutCts.Token.Register(() =>
564+
{
565+
terminatedTcs.TrySetCanceled();
566+
});
567+
548568
await client.LaunchScript(script);
549569
await client.RequestConfigurationDone(new ConfigurationDoneArguments());
550570

551-
StartDebuggingAttachRequestArguments attachRequest = await startDebuggingAttachRequest;
571+
StartDebuggingAttachRequestArguments attachRequest = await startDebuggingAttachRequestTcs.Task;
552572
Assert.Equal("attach", attachRequest.Request);
553573
Assert.Equal(expectedComputerName, attachRequest.Configuration.ComputerName);
554574
Assert.Equal(expectedPipeName, attachRequest.Configuration.CustomPipeName);
555575
Assert.Equal(expectedProcessId, attachRequest.Configuration.ProcessId);
556576
Assert.Equal(expectedRunspaceId, attachRequest.Configuration.RunspaceId);
557577
Assert.Equal(expectedRunspaceName, attachRequest.Configuration.RunspaceName);
578+
579+
await terminatedTcs.Task;
580+
}
581+
582+
[SkippableFact]
583+
public async Task CanLaunchScriptWithNewChildAttachSessionAsJob()
584+
{
585+
Skip.If(PsesStdioLanguageServerProcessHost.RunningInConstrainedLanguageMode,
586+
"PowerShellEditorServices.Command is not signed to run FLM in Constrained Language Mode.");
587+
Skip.If(PsesStdioLanguageServerProcessHost.IsWindowsPowerShell,
588+
"WinPS does not have ThreadJob, needed by -AsJob, present by default.");
589+
590+
string script = NewTestFile("Start-DebugAttachSession -AsJob | Receive-Job -Wait -AutoRemoveJob");
591+
592+
using CancellationTokenSource timeoutCts = new(30000);
593+
using CancellationTokenRegistration _1 = timeoutCts.Token.Register(() =>
594+
{
595+
startDebuggingAttachRequestTcs.TrySetCanceled();
596+
});
597+
using CancellationTokenRegistration _2 = timeoutCts.Token.Register(() =>
598+
{
599+
terminatedTcs.TrySetCanceled();
600+
});
601+
602+
await client.LaunchScript(script);
603+
await client.RequestConfigurationDone(new ConfigurationDoneArguments());
604+
605+
StartDebuggingAttachRequestArguments attachRequest = await startDebuggingAttachRequestTcs.Task;
606+
Assert.Equal("attach", attachRequest.Request);
607+
Assert.Null(attachRequest.Configuration.ComputerName);
608+
Assert.Null(attachRequest.Configuration.CustomPipeName);
609+
Assert.Equal(0, attachRequest.Configuration.ProcessId);
610+
Assert.Equal(0, attachRequest.Configuration.RunspaceId);
611+
Assert.Null(attachRequest.Configuration.RunspaceName);
612+
613+
await terminatedTcs.Task;
558614
}
559615

560616
private record StartDebuggingAttachRequestArguments(PsesAttachRequestArguments Configuration, string Request);

0 commit comments

Comments
 (0)