From 8f06d5e59f4bfb138b55569431f665f21437ff6c Mon Sep 17 00:00:00 2001 From: Thomas Wiest Date: Thu, 19 Jan 2017 16:16:19 -0500 Subject: Added oc_secret to lib_openshift. --- .../src/test/integration/oc_secret.yml | 125 +++++++++++++++++++++ roles/lib_openshift/src/test/unit/oc_secret.py | 94 ++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100755 roles/lib_openshift/src/test/integration/oc_secret.yml create mode 100755 roles/lib_openshift/src/test/unit/oc_secret.py (limited to 'roles/lib_openshift/src/test') diff --git a/roles/lib_openshift/src/test/integration/oc_secret.yml b/roles/lib_openshift/src/test/integration/oc_secret.yml new file mode 100755 index 000000000..e0456bd6e --- /dev/null +++ b/roles/lib_openshift/src/test/integration/oc_secret.yml @@ -0,0 +1,125 @@ +#!/usr/bin/ansible-playbook --module-path=../../../library/ + +--- +- hosts: "{{ cli_master_test }}" + gather_facts: no + user: root + vars_prompt: + - name: cli_master_test + prompt: "Master to run against" + private: false + default: localhost + + vars: + secret_name: secret-int-test + ns_name: default + config_path: "/tmp/{{ secret_name }}--config.yml" + passwords_path: "/tmp/{{ secret_name }}--passwords.yml" + + post_tasks: + + - name: Setup our files to test with + copy: + dest: "{{ item.name }}" + content: "{{ item.content }}" + with_items: + - name: "{{ config_path }}" + content: | + value: True + - name: "{{ passwords_path }}" + content: | + test1 + test2 + test3 + test4 + + + - name: Make sure we're starting with a clean slate + oc_secret: + state: absent + namespace: "{{ ns_name }}" + name: "{{ secret_name }}" + register: secret_out + + - name: Test adding a secret - Act + oc_secret: + state: present + namespace: "{{ ns_name }}" + name: "{{ secret_name }}" + files: + - name: config.yml + path: "{{ config_path }}" + - name: passwords.yml + path: "{{ passwords_path }}" + register: secret_out + + - name: Test adding a secret - Assert + assert: + that: + - "secret_out.results.returncode == 0" + - "secret_out.changed == True" + + - name: Test secret present idempotentcy - Act + oc_secret: + state: present + namespace: "{{ ns_name }}" + name: "{{ secret_name }}" + files: + - name: config.yml + path: "{{ config_path }}" + - name: passwords.yml + path: "{{ passwords_path }}" + register: secret_out + + - name: Test secret present idempotentcy - Assert + assert: + that: + - "secret_out.changed == false" + + - name: Test list secrets - Act + oc_secret: + state: list + namespace: "{{ ns_name }}" + name: "{{ secret_name }}" + register: secret_out + + - name: Test list secrets - Assert + assert: + that: + - "secret_out.changed == false" + - "secret_out.results.exists == true" + + + - name: Test secret absent - Act + oc_secret: + state: absent + namespace: "{{ ns_name }}" + name: "{{ secret_name }}" + register: secret_out + + - name: Test secret absent - Assert + assert: + that: + - "secret_out.changed == true" + - "secret_out.results.returncode == 0" + + - name: Test secret absent idempotentcy - Act + oc_secret: + state: absent + namespace: "{{ ns_name }}" + name: "{{ secret_name }}" + register: secret_out + + - name: Test secret idempotentcy - Assert + assert: + that: + - "secret_out.changed == false" + + + - name: Clean up the files we created + file: + state: absent + path: "{{ item }}" + with_items: + - "/tmp/{{ secret_name }}--config.yml" + - "/tmp/{{ secret_name }}--passwords.yml" diff --git a/roles/lib_openshift/src/test/unit/oc_secret.py b/roles/lib_openshift/src/test/unit/oc_secret.py new file mode 100755 index 000000000..221f00ed6 --- /dev/null +++ b/roles/lib_openshift/src/test/unit/oc_secret.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python2 +''' + Unit tests for oc secret +''' +# To run: +# ./oc_secret.py +# +# . +# Ran 1 test in 0.002s +# +# OK + +import os +import sys +import unittest +import mock + +# Removing invalid variable names for tests so that I can +# keep them brief +# pylint: disable=invalid-name,no-name-in-module +# Disable import-error b/c our libraries aren't loaded in jenkins +# pylint: disable=import-error,wrong-import-position +# place class in our python path +module_path = os.path.join('/'.join(os.path.realpath(__file__).split('/')[:-4]), 'library') # noqa: E501 +sys.path.insert(0, module_path) +from oc_secret import OCSecret # noqa: E402 + + +class OCSecretTest(unittest.TestCase): + ''' + Test class for OCSecret + ''' + + def setUp(self): + ''' setup method will create a file and set to known configuration ''' + pass + + @mock.patch('oc_secret.OCSecret.openshift_cmd') + def test_adding_a_secret(self, mock_openshift_cmd): + ''' Testing adding a secret ''' + + # Arrange + + # run_ansible input parameters + params = { + 'state': 'present', + 'namespace': 'default', + 'name': 'secretname', + 'contents': [{ + 'path': "/tmp/somesecret.json", + 'data': "{'one': 1, 'two': 2, 'three', 3}", + }], + 'decode': False, + 'kubeconfig': '/etc/origin/master/admin.kubeconfig', + 'debug': False, + 'files': None, + 'delete_after': True, + } + + # Return values of our mocked function call. These get returned once per call. + mock_openshift_cmd.side_effect = [ + { + "cmd": "/usr/bin/oc get secrets -o json secretname", + "results": "", + "returncode": 0, + }, # oc output for first call to openshift_cmd (oc secrets get) + { + "cmd": "/usr/bin/oc secrets new secretname somesecret.json=/tmp/somesecret.json", + "results": "", + "returncode": 0, + }, # oc output for second call to openshift_cmd (oc secrets new) + ] + + # Act + results = OCSecret.run_ansible(params, False) + + # Assert + self.assertTrue(results['changed']) + self.assertEqual(results['results']['returncode'], 0) + self.assertEqual(results['state'], 'present') + + # Making sure our mock was called as we expected + mock_openshift_cmd.assert_has_calls([ + mock.call(['get', 'secrets', '-o', 'json', 'secretname'], output=True), + mock.call(['secrets', 'new', 'secretname', 'somesecret.json=/tmp/somesecret.json']), + ]) + + def tearDown(self): + '''TearDown method''' + pass + + +if __name__ == "__main__": + unittest.main() -- cgit v1.2.3