Reduce time for stack overflow test (#9302)

Create a small class to do the work.
I saw 100x performance improvement in this test.
This commit is contained in:
James Truher [MSFT] 2019-04-12 14:21:33 -07:00 committed by Travis Plunk
parent 4884317d00
commit 1006db647b

View file

@ -480,14 +480,44 @@ foo
}
Context "Exception handling" {
It "Should handle a CallDepthOverflow" {
# Infinite recursion
function recurse
{
recurse $args
BeforeAll {
# the default stack size in PowerShell is 10000000, set the stack
# to something much smaller which will produce the error much faster
# I saw a reduction from 65 seconds to 79 milliseconds.
$classDefinition = @'
using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Threading;
namespace StackTest {
public class StackDepthTest {
public static PowerShell ps;
public static int size = 512 * 1024;
public static void CauseError() {
Thread t = new Thread(RunPS, size);
t.Start();
t.Join();
}
public static void RunPS() {
InitialSessionState iss = InitialSessionState.CreateDefault2();
iss.ThreadOptions = PSThreadOptions.UseCurrentThread;
ps = PowerShell.Create(iss);
ps.AddScript("function recurse { recurse }; recurse").Invoke();
}
public static void GetPSError() {
if ( ps.Streams.Error.Count > 0) {
throw ps.Streams.Error[0].Exception.InnerException;
}
}
}
}
'@
$TestType = Add-Type -PassThru -TypeDefinition $classDefinition
}
{ recurse "args" } | Should -Throw -ErrorId "CallDepthOverflow"
It "Should handle a CallDepthOverflow" {
$TestType::CauseError()
{ $TestType::GetPSError() } | Should -Throw -ErrorId "CallDepthOverflow"
}
}