summaryrefslogtreecommitdiff
path: root/test/integration/targets/lookup_csvfile
diff options
context:
space:
mode:
authorRick Elrod <rick@elrod.me>2020-07-10 16:21:03 -0500
committerGitHub <noreply@github.com>2020-07-10 16:21:03 -0500
commit1b4fd23ba6dab52a395278e3ef7ca994e0819d60 (patch)
tree23a536c66aad0ab370b80e249d2c47123c1371b9 /test/integration/targets/lookup_csvfile
parentf4c89eab23f2d595b64562aa69880d967a9a2559 (diff)
downloadansible-1b4fd23ba6dab52a395278e3ef7ca994e0819d60.tar.gz
csvfile: use parse_kv() for args, add tests (#70550)
Change: - Use parse_kv() for parsing in the csvfile lookup plugin. This allows us to handle multi-word search keys and filenames. Previously, the plugin split on space and so none of these things worked as expected. - Add integration tests for csvfile, testing a plethora of weird cases. Test Plan: - New integration tests, CI Tickets: - Fixes #70545 Signed-off-by: Rick Elrod <rick@elrod.me>
Diffstat (limited to 'test/integration/targets/lookup_csvfile')
-rw-r--r--test/integration/targets/lookup_csvfile/aliases2
-rw-r--r--test/integration/targets/lookup_csvfile/files/cool list of things.csv3
-rw-r--r--test/integration/targets/lookup_csvfile/files/crlf.csv2
-rw-r--r--test/integration/targets/lookup_csvfile/files/people.csv6
-rw-r--r--test/integration/targets/lookup_csvfile/files/tabs.csv4
-rw-r--r--test/integration/targets/lookup_csvfile/files/x1a.csv3
-rw-r--r--test/integration/targets/lookup_csvfile/tasks/main.yml54
7 files changed, 74 insertions, 0 deletions
diff --git a/test/integration/targets/lookup_csvfile/aliases b/test/integration/targets/lookup_csvfile/aliases
new file mode 100644
index 0000000000..45489be80c
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/aliases
@@ -0,0 +1,2 @@
+shippable/posix/group2
+skip/python2.6 # lookups are controller only, and we no longer support Python 2.6 on the controller
diff --git a/test/integration/targets/lookup_csvfile/files/cool list of things.csv b/test/integration/targets/lookup_csvfile/files/cool list of things.csv
new file mode 100644
index 0000000000..b1a74a0abe
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/files/cool list of things.csv
@@ -0,0 +1,3 @@
+woo,i,have,spaces,in,my,filename
+i,am,so,cool,haha,be,jealous
+maybe,i,will,work,like,i,should
diff --git a/test/integration/targets/lookup_csvfile/files/crlf.csv b/test/integration/targets/lookup_csvfile/files/crlf.csv
new file mode 100644
index 0000000000..a17f6c4757
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/files/crlf.csv
@@ -0,0 +1,2 @@
+this file,has,crlf,line,endings
+ansible,parses,them,just,fine
diff --git a/test/integration/targets/lookup_csvfile/files/people.csv b/test/integration/targets/lookup_csvfile/files/people.csv
new file mode 100644
index 0000000000..f93498cf22
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/files/people.csv
@@ -0,0 +1,6 @@
+# Last,First,Email,Extension
+Smith,Jane,jsmith@example.com,1234
+Ipsum,Lorem,lipsum@another.example.com,9001
+"German von Lastname",Demo,hello@example.com,123123
+Example,Person,"crazy email"@example.com,9876
+"""The Rock"" Johnson",Dwayne,uhoh@example.com,1337
diff --git a/test/integration/targets/lookup_csvfile/files/tabs.csv b/test/integration/targets/lookup_csvfile/files/tabs.csv
new file mode 100644
index 0000000000..69f4d876de
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/files/tabs.csv
@@ -0,0 +1,4 @@
+fruit bananas 30
+fruit apples 9
+electronics tvs 8
+shoes sneakers 26
diff --git a/test/integration/targets/lookup_csvfile/files/x1a.csv b/test/integration/targets/lookup_csvfile/files/x1a.csv
new file mode 100644
index 0000000000..d2d5a0d459
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/files/x1a.csv
@@ -0,0 +1,3 @@
+separatedbyx1achars
+againbecause
+wecan
diff --git a/test/integration/targets/lookup_csvfile/tasks/main.yml b/test/integration/targets/lookup_csvfile/tasks/main.yml
new file mode 100644
index 0000000000..8e65b2e245
--- /dev/null
+++ b/test/integration/targets/lookup_csvfile/tasks/main.yml
@@ -0,0 +1,54 @@
+- set_fact:
+ this_will_error: "{{ lookup('csvfile', 'file=people.csv delimiter=, col=1') }}"
+ ignore_errors: yes
+ register: no_keyword
+
+- name: Make sure we failed above
+ assert:
+ that:
+ - no_keyword is failed
+ - >
+ "Search key is required but was not found" in no_keyword.msg
+
+- name: Check basic comma-separated file
+ assert:
+ that:
+ - lookup('csvfile', 'Smith file=people.csv delimiter=, col=1') == "Jane"
+ - lookup('csvfile', 'German von Lastname file=people.csv delimiter=, col=1') == "Demo"
+
+- name: Check tab-separated file
+ assert:
+ that:
+ - lookup('csvfile', 'electronics file=tabs.csv delimiter=TAB col=1') == "tvs"
+ - lookup('csvfile', 'fruit file=tabs.csv delimiter=TAB col=1') == "bananas"
+ - lookup('csvfile', 'fruit file=tabs.csv delimiter="\t" col=1') == "bananas"
+
+- name: Check \x1a-separated file
+ assert:
+ that:
+ - lookup('csvfile', 'again file=x1a.csv delimiter=\x1a col=1') == "because"
+
+- name: Check CSV file with CRLF line endings
+ assert:
+ that:
+ - lookup('csvfile', 'this file file=crlf.csv delimiter=, col=2') == "crlf"
+ - lookup('csvfile', 'ansible file=crlf.csv delimiter=, col=1') == "parses"
+
+- name: Check file with multi word filename
+ assert:
+ that:
+ - lookup('csvfile', 'maybe file="cool list of things.csv" delimiter=, col=3') == "work"
+
+- name: Test default behavior
+ assert:
+ that:
+ - lookup('csvfile', 'notfound file=people.csv delimiter=, col=2') == []
+ - lookup('csvfile', 'notfound file=people.csv delimiter=, col=2, default=what?') == "what?"
+
+# NOTE: For historical reasons, this is correct; quotes in the search field must
+# be treated literally as if they appear (escaped as required) in the field in the
+# file. They cannot be used to surround the search text in general.
+- name: Test quotes in the search field
+ assert:
+ that:
+ - lookup('csvfile', '"The Rock" Johnson file=people.csv delimiter=, col=1') == "Dwayne"