From b2d609b6f1b02335b8410472470b660e57b709bc Mon Sep 17 00:00:00 2001
From: Abhijeet Kasurde <akasurde@redhat.com>
Date: Wed, 26 Jul 2017 15:46:10 +0530
Subject: [PATCH] Add testcase for ipify_facts (#26421)

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
---
 lib/ansible/modules/net_tools/ipify_facts.py  | 17 ++++++--
 test/integration/targets/ipify_facts/aliases  |  1 +
 .../targets/ipify_facts/tasks/main.yml        | 39 +++++++++++++++++++
 .../targets/ipify_facts/vars/main.yml         |  2 +
 test/sanity/pep8/legacy-files.txt             |  1 -
 5 files changed, 55 insertions(+), 5 deletions(-)
 create mode 100644 test/integration/targets/ipify_facts/aliases
 create mode 100644 test/integration/targets/ipify_facts/tasks/main.yml
 create mode 100644 test/integration/targets/ipify_facts/vars/main.yml

diff --git a/lib/ansible/modules/net_tools/ipify_facts.py b/lib/ansible/modules/net_tools/ipify_facts.py
index 1fb7024562b..cc585daee7c 100644
--- a/lib/ansible/modules/net_tools/ipify_facts.py
+++ b/lib/ansible/modules/net_tools/ipify_facts.py
@@ -44,6 +44,12 @@ options:
     required: false
     default: 10
     version_added: "2.3"
+  validate_certs:
+    description:
+      - When set to C(NO), SSL certificates will not be validated.
+    required: false
+    default: "yes"
+    version_added: "2.4"
 notes:
   - "Visit https://www.ipify.org to get more information."
 '''
@@ -80,6 +86,7 @@ except ImportError:
 
 from ansible.module_utils.basic import AnsibleModule
 from ansible.module_utils.urls import fetch_url
+from ansible.module_utils._text import to_text
 
 
 class IpifyFacts(object):
@@ -92,21 +99,23 @@ class IpifyFacts(object):
         result = {
             'ipify_public_ip': None
         }
-        (response, info) = fetch_url(module=module, url=self.api_url + "?format=json" , force=True, timeout=self.timeout)
+        (response, info) = fetch_url(module=module, url=self.api_url + "?format=json", force=True, timeout=self.timeout)
 
         if not response:
             module.fail_json(msg="No valid or no response from url %s within %s seconds (timeout)" % (self.api_url, self.timeout))
 
-        data = json.loads(response.read())
+        data = json.loads(to_text(response.read()))
         result['ipify_public_ip'] = data.get('ip')
         return result
 
+
 def main():
     global module
     module = AnsibleModule(
-        argument_spec = dict(
-            api_url=dict(default='https://api.ipify.org'),
+        argument_spec=dict(
+            api_url=dict(default='https://api.ipify.org/'),
             timeout=dict(type='int', default=10),
+            validate_certs=dict(type='bool', default=True),
         ),
         supports_check_mode=True,
     )
diff --git a/test/integration/targets/ipify_facts/aliases b/test/integration/targets/ipify_facts/aliases
new file mode 100644
index 00000000000..7af8b7f05bb
--- /dev/null
+++ b/test/integration/targets/ipify_facts/aliases
@@ -0,0 +1 @@
+posix/ci/group2
diff --git a/test/integration/targets/ipify_facts/tasks/main.yml b/test/integration/targets/ipify_facts/tasks/main.yml
new file mode 100644
index 00000000000..505118fa8c9
--- /dev/null
+++ b/test/integration/targets/ipify_facts/tasks/main.yml
@@ -0,0 +1,39 @@
+# Test code for the ipify_facts
+# (c) 2017, Abhijeet Kasurde <akasurde@redhat.com>
+
+# This file is part of Ansible
+#
+# Ansible is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Ansible is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+- debug: var=ansible_distribution
+- debug: var=ansible_distribution_version
+
+- set_fact:
+    validate_certs: false
+  when: (ansible_distribution == "MacOSX" and ansible_distribution_version == "10.11.1")
+
+- name: get information about current IP using ipify facts
+  ipify_facts:
+    timeout: 30
+    validate_certs: "{{ validate_certs }}"
+  register: external_ip
+- debug: var="{{ external_ip }}"
+
+- name: check if task was successful
+  assert:
+    that:
+      - "{{ external_ip.changed == false }}"
+      - "{{ external_ip['ansible_facts'] is defined }}"
+      - "{{ external_ip['ansible_facts']['ipify_public_ip'] is defined }}"
diff --git a/test/integration/targets/ipify_facts/vars/main.yml b/test/integration/targets/ipify_facts/vars/main.yml
new file mode 100644
index 00000000000..1ccaab46697
--- /dev/null
+++ b/test/integration/targets/ipify_facts/vars/main.yml
@@ -0,0 +1,2 @@
+---
+validate_certs: true
diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt
index 83e3e4a6336..37550d417f7 100644
--- a/test/sanity/pep8/legacy-files.txt
+++ b/test/sanity/pep8/legacy-files.txt
@@ -323,7 +323,6 @@ lib/ansible/modules/network/iosxr/iosxr_command.py
 lib/ansible/modules/network/iosxr/iosxr_config.py
 lib/ansible/modules/network/iosxr/iosxr_facts.py
 lib/ansible/modules/network/iosxr/iosxr_system.py
-lib/ansible/modules/net_tools/ipify_facts.py
 lib/ansible/modules/net_tools/ipinfoio_facts.py
 lib/ansible/modules/network/lenovo/cnos_conditional_template.py
 lib/ansible/modules/network/lenovo/cnos_template.py