File: StressTests.cs
Web Access
Project: src\src\Interactive\HostTest\InteractiveHost.UnitTests.csproj (InteractiveHost.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
extern alias InteractiveHost;
 
using System;
using System.Diagnostics;
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp.Scripting.Hosting;
using Xunit;
 
namespace Microsoft.CodeAnalysis.UnitTests.Interactive
{
    using InteractiveHost::Microsoft.CodeAnalysis.Interactive;
 
    public sealed class StressTests
    {
        [Fact]
        public async Task TestKill()
        {
            for (int sleep = 0; sleep < 20; sleep++)
            {
                await TestKillAfterAsync(sleep).ConfigureAwait(false);
            }
        }
 
        private async Task TestKillAfterAsync(int milliseconds)
        {
            using var host = new InteractiveHost(typeof(CSharpReplServiceProvider), ".", millisecondsTimeout: 1, joinOutputWritingThreadsOnDisposal: true);
            var options = InteractiveHostOptions.CreateFromDirectory(TestUtils.HostRootPath, initializationFileName: null, CultureInfo.InvariantCulture, CultureInfo.InvariantCulture, InteractiveHostPlatform.Desktop64);
 
            host.InteractiveHostProcessCreated += new Action<Process>(proc =>
            {
                _ = Task.Run(async () =>
                {
                    await Task.Delay(milliseconds).ConfigureAwait(false);
 
                    try
                    {
                        proc.Kill();
                    }
                    catch
                    {
                    }
                });
            });
 
            await host.ResetAsync(options).ConfigureAwait(false);
 
            for (int j = 0; j < 10; j++)
            {
                await host.ExecuteAsync("1+1").ConfigureAwait(false);
            }
        }
    }
}