summaryrefslogtreecommitdiff
path: root/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser
diff options
context:
space:
mode:
authorJordan Borean <jborean93@gmail.com>2020-03-02 16:12:08 +1000
committerGitHub <noreply@github.com>2020-03-02 16:12:08 +1000
commit97d2d4512fb6686cba7ab07126658810ba0e43c2 (patch)
tree4ad4392db64ea6734f9efc41637ccae18c8bdd7d /test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser
parentc66ee7e994d4211cf96eecdac1d7ebfaeae2f0f0 (diff)
downloadansible-97d2d4512fb6686cba7ab07126658810ba0e43c2.tar.gz
Separated ps module_util test targets, added WebRequest tests (#67914)
* Separated ps module_util test targets, added WebRequest tests * Simplify header test
Diffstat (limited to 'test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser')
-rw-r--r--test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/aliases3
-rw-r--r--test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/library/argv_parser_test.ps193
-rw-r--r--test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/meta/main.yml3
-rw-r--r--test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/tasks/main.yml9
4 files changed, 108 insertions, 0 deletions
diff --git a/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/aliases b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/aliases
new file mode 100644
index 0000000000..cf714783f5
--- /dev/null
+++ b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/aliases
@@ -0,0 +1,3 @@
+windows
+shippable/windows/group1
+shippable/windows/smoketest
diff --git a/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/library/argv_parser_test.ps1 b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/library/argv_parser_test.ps1
new file mode 100644
index 0000000000..d7bd4bb3e7
--- /dev/null
+++ b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/library/argv_parser_test.ps1
@@ -0,0 +1,93 @@
+#!powershell
+
+#Requires -Module Ansible.ModuleUtils.Legacy
+#Requires -Module Ansible.ModuleUtils.ArgvParser
+
+$ErrorActionPreference = 'Continue'
+
+$params = Parse-Args $args
+$exe = Get-AnsibleParam -obj $params -name "exe" -type "path" -failifempty $true
+
+Add-Type -TypeDefinition @'
+using System.IO;
+using System.Threading;
+
+namespace Ansible.Command
+{
+ public static class NativeUtil
+ {
+ public static void GetProcessOutput(StreamReader stdoutStream, StreamReader stderrStream, out string stdout, out string stderr)
+ {
+ var sowait = new EventWaitHandle(false, EventResetMode.ManualReset);
+ var sewait = new EventWaitHandle(false, EventResetMode.ManualReset);
+ string so = null, se = null;
+ ThreadPool.QueueUserWorkItem((s)=>
+ {
+ so = stdoutStream.ReadToEnd();
+ sowait.Set();
+ });
+ ThreadPool.QueueUserWorkItem((s) =>
+ {
+ se = stderrStream.ReadToEnd();
+ sewait.Set();
+ });
+ foreach(var wh in new WaitHandle[] { sowait, sewait })
+ wh.WaitOne();
+ stdout = so;
+ stderr = se;
+ }
+ }
+}
+'@
+
+Function Invoke-Process($executable, $arguments) {
+ $proc = New-Object System.Diagnostics.Process
+ $psi = $proc.StartInfo
+ $psi.FileName = $executable
+ $psi.Arguments = $arguments
+ $psi.RedirectStandardOutput = $true
+ $psi.RedirectStandardError = $true
+ $psi.UseShellExecute = $false
+
+ $proc.Start() > $null # will always return $true for non shell-exec cases
+ $stdout = $stderr = [string] $null
+
+ [Ansible.Command.NativeUtil]::GetProcessOutput($proc.StandardOutput, $proc.StandardError, [ref] $stdout, [ref] $stderr) > $null
+ $proc.WaitForExit() > $null
+ $actual_args = $stdout.Substring(0, $stdout.Length - 2) -split "`r`n"
+
+ return $actual_args
+}
+
+$tests = @(
+ @('abc', 'd', 'e'),
+ @('a\\b', 'de fg', 'h'),
+ @('a\"b', 'c', 'd'),
+ @('a\\b c', 'd', 'e'),
+ @('C:\Program Files\file\', 'arg with " quote'),
+ @('ADDLOCAL="a,b,c"', '/s', 'C:\\Double\\Backslash')
+)
+
+foreach ($expected in $tests) {
+ $joined_string = Argv-ToString -arguments $expected
+ # We can't used CommandLineToArgvW to test this out as it seems to mangle
+ # \, might be something to do with unicode but not sure...
+ $actual = Invoke-Process -executable $exe -arguments $joined_string
+
+ if ($expected.Count -ne $actual.Count) {
+ $result.actual = $actual -join "`n"
+ $result.expected = $expected -join "`n"
+ Fail-Json -obj $result -message "Actual arg count: $($actual.Count) != Expected arg count: $($expected.Count)"
+ }
+ for ($i = 0; $i -lt $expected.Count; $i++) {
+ $expected_arg = $expected[$i]
+ $actual_arg = $actual[$i]
+ if ($expected_arg -cne $actual_arg) {
+ $result.actual = $actual -join "`n"
+ $result.expected = $expected -join "`n"
+ Fail-Json -obj $result -message "Actual arg: '$actual_arg' != Expected arg: '$expected_arg'"
+ }
+ }
+}
+
+Exit-Json @{ data = 'success' }
diff --git a/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/meta/main.yml b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/meta/main.yml
new file mode 100644
index 0000000000..fd0dc54312
--- /dev/null
+++ b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/meta/main.yml
@@ -0,0 +1,3 @@
+---
+dependencies:
+- setup_win_printargv
diff --git a/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/tasks/main.yml b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/tasks/main.yml
new file mode 100644
index 0000000000..b39155e040
--- /dev/null
+++ b/test/integration/targets/module_utils_Ansible.ModuleUtils.ArgvParser/tasks/main.yml
@@ -0,0 +1,9 @@
+---
+- name: call module with ArgvParser tests
+ argv_parser_test:
+ exe: '{{ win_printargv_path }}'
+ register: argv_test
+
+- assert:
+ that:
+ - argv_test.data == 'success'