public async Task ExecuteAction_TextFileOutput() { using TemporaryDirectory outputDirectory = new(_outputHelper); string textFileOutputPath = Path.Combine(outputDirectory.FullName, "file.txt"); const string testMessage = "TestMessage"; await ValidateAction( options => { options.Path = DotNetHost.HostExePath; options.Arguments = ExecuteActionTestHelper.GenerateArgumentsString(new string[] { ActionTestsConstants.TextFileOutput, textFileOutputPath, testMessage }); }, async (action, token) => { await action.StartAsync(token); CollectionRuleActionResult result = await action.WaitForCompletionAsync(token); ValidateActionResult(result, "0"); }); Assert.Equal(testMessage, File.ReadAllText(textFileOutputPath)); }
public async Task ExecuteAction_TokenCancellation() { // This timeout is much shorter than the default test timeout. TimeSpan CompletionTimeout = TimeSpan.FromSeconds(3); // Have app sleep longer than the timeout period so that cancellation can be effective. string sleepMsArg = (2 * CompletionTimeout).TotalMilliseconds.ToString(CultureInfo.InvariantCulture); await ValidateAction( options => { options.Path = DotNetHost.HostExePath; options.Arguments = ExecuteActionTestHelper.GenerateArgumentsString(new string[] { ActionTestsConstants.Sleep, sleepMsArg }); }, async (action, token) => { await action.StartAsync(token); // Start a separate cancellation source for the completion timeout since it needs // to be much shorter than the default test timeout. using CancellationTokenSource completionCancellation = new(CompletionTimeout); await Assert.ThrowsAsync <TaskCanceledException>( () => action.WaitForCompletionAsync(completionCancellation.Token)); }); }
public async Task ExecuteAction_ZeroExitCode() { await ValidateAction( options => { options.Path = DotNetHost.HostExePath; options.Arguments = ExecuteActionTestHelper.GenerateArgumentsString(new string[] { ActionTestsConstants.ZeroExitCode }); }, async (action, token) => { await action.StartAsync(token); CollectionRuleActionResult result = await action.WaitForCompletionAsync(token); ValidateActionResult(result, "0"); }); }
public async Task ExecuteAction_NonzeroExitCode() { await ValidateAction( options => { options.Path = DotNetHost.HostExePath; options.Arguments = ExecuteActionTestHelper.GenerateArgumentsString(new string[] { ActionTestsConstants.NonzeroExitCode }); }, async (action, token) => { await action.StartAsync(token); CollectionRuleActionException invalidOperationException = await Assert.ThrowsAsync <CollectionRuleActionException>( () => action.WaitForCompletionAsync(token)); Assert.Equal(string.Format(Tools.Monitor.Strings.ErrorMessage_NonzeroExitCode, "1"), invalidOperationException.Message); }); }
public async Task ExecuteAction_InvalidPath() { string uniquePathName = Guid.NewGuid().ToString(); await ValidateAction( options => { options.Path = uniquePathName; options.Arguments = ExecuteActionTestHelper.GenerateArgumentsString(Array.Empty <string>()); }, async (action, token) => { CollectionRuleActionException fileNotFoundException = await Assert.ThrowsAsync <CollectionRuleActionException>( () => action.StartAsync(token)); Assert.Equal(string.Format(Tools.Monitor.Strings.ErrorMessage_FileNotFound, uniquePathName), fileNotFoundException.Message); }); }
public static CollectionRuleOptions AddExecuteActionAppAction(this CollectionRuleOptions options, bool waitForCompletion, params string[] args) { options.AddExecuteAction(DotNetHost.HostExePath, ExecuteActionTestHelper.GenerateArgumentsString(args), waitForCompletion); return(options); }