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);
            });
        }
Beispiel #6
0
        public static CollectionRuleOptions AddExecuteActionAppAction(this CollectionRuleOptions options, bool waitForCompletion, params string[] args)
        {
            options.AddExecuteAction(DotNetHost.HostExePath, ExecuteActionTestHelper.GenerateArgumentsString(args), waitForCompletion);

            return(options);
        }