123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- #!/usr/bin/env python2
- '''
- Unit tests for oc secret
- '''
- # To run:
- # ./oc_secret.py
- #
- # .
- # Ran 1 test in 0.002s
- #
- # OK
- import os
- import six
- 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, locate_oc_binary # 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.locate_oc_binary')
- @mock.patch('oc_secret.Utils.create_tmpfile_copy')
- @mock.patch('oc_secret.Utils._write')
- @mock.patch('oc_secret.OCSecret._run')
- def test_adding_a_secret(self, mock_cmd, mock_write, mock_tmpfile_copy, mock_oc_binary):
- ''' Testing adding a secret '''
- # Arrange
- # run_ansible input parameters
- params = {
- 'state': 'present',
- 'namespace': 'default',
- 'name': 'testsecretname',
- '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_cmd.side_effect = [
- (1, '', 'Error from server: secrets "testsecretname" not found'),
- (0, 'secret/testsecretname', ''),
- ]
- mock_oc_binary.side_effect = [
- 'oc'
- ]
- mock_tmpfile_copy.side_effect = [
- '/tmp/mocked_kubeconfig',
- ]
- # 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_cmd.assert_has_calls([
- mock.call(['oc', '-n', 'default', 'get', 'secrets', 'testsecretname', '-o', 'json'], None),
- mock.call(['oc', '-n', 'default', 'secrets', 'new', 'testsecretname', mock.ANY], None),
- ])
- mock_write.assert_has_calls([
- mock.call(mock.ANY, "{'one': 1, 'two': 2, 'three': 3}"),
- ])
- @unittest.skipIf(six.PY3, 'py2 test only')
- @mock.patch('os.path.exists')
- @mock.patch('os.environ.get')
- def test_binary_lookup_fallback(self, mock_env_get, mock_path_exists):
- ''' Testing binary lookup fallback '''
- mock_env_get.side_effect = lambda _v, _d: ''
- mock_path_exists.side_effect = lambda _: False
- self.assertEqual(locate_oc_binary(), 'oc')
- @unittest.skipIf(six.PY3, 'py2 test only')
- @mock.patch('os.path.exists')
- @mock.patch('os.environ.get')
- def test_binary_lookup_in_path(self, mock_env_get, mock_path_exists):
- ''' Testing binary lookup in path '''
- oc_bin = '/usr/bin/oc'
- mock_env_get.side_effect = lambda _v, _d: '/bin:/usr/bin'
- mock_path_exists.side_effect = lambda f: f == oc_bin
- self.assertEqual(locate_oc_binary(), oc_bin)
- @unittest.skipIf(six.PY3, 'py2 test only')
- @mock.patch('os.path.exists')
- @mock.patch('os.environ.get')
- def test_binary_lookup_in_usr_local(self, mock_env_get, mock_path_exists):
- ''' Testing binary lookup in /usr/local/bin '''
- oc_bin = '/usr/local/bin/oc'
- mock_env_get.side_effect = lambda _v, _d: '/bin:/usr/bin'
- mock_path_exists.side_effect = lambda f: f == oc_bin
- self.assertEqual(locate_oc_binary(), oc_bin)
- @unittest.skipIf(six.PY3, 'py2 test only')
- @mock.patch('os.path.exists')
- @mock.patch('os.environ.get')
- def test_binary_lookup_in_home(self, mock_env_get, mock_path_exists):
- ''' Testing binary lookup in ~/bin '''
- oc_bin = os.path.expanduser('~/bin/oc')
- mock_env_get.side_effect = lambda _v, _d: '/bin:/usr/bin'
- mock_path_exists.side_effect = lambda f: f == oc_bin
- self.assertEqual(locate_oc_binary(), oc_bin)
- @unittest.skipIf(six.PY2, 'py3 test only')
- @mock.patch('shutil.which')
- @mock.patch('os.environ.get')
- def test_binary_lookup_fallback_py3(self, mock_env_get, mock_shutil_which):
- ''' Testing binary lookup fallback '''
- mock_env_get.side_effect = lambda _v, _d: ''
- mock_shutil_which.side_effect = lambda _f, path=None: None
- self.assertEqual(locate_oc_binary(), 'oc')
- @unittest.skipIf(six.PY2, 'py3 test only')
- @mock.patch('shutil.which')
- @mock.patch('os.environ.get')
- def test_binary_lookup_in_path_py3(self, mock_env_get, mock_shutil_which):
- ''' Testing binary lookup in path '''
- oc_bin = '/usr/bin/oc'
- mock_env_get.side_effect = lambda _v, _d: '/bin:/usr/bin'
- mock_shutil_which.side_effect = lambda _f, path=None: oc_bin
- self.assertEqual(locate_oc_binary(), oc_bin)
- @unittest.skipIf(six.PY2, 'py3 test only')
- @mock.patch('shutil.which')
- @mock.patch('os.environ.get')
- def test_binary_lookup_in_usr_local_py3(self, mock_env_get, mock_shutil_which):
- ''' Testing binary lookup in /usr/local/bin '''
- oc_bin = '/usr/local/bin/oc'
- mock_env_get.side_effect = lambda _v, _d: '/bin:/usr/bin'
- mock_shutil_which.side_effect = lambda _f, path=None: oc_bin
- self.assertEqual(locate_oc_binary(), oc_bin)
- @unittest.skipIf(six.PY2, 'py3 test only')
- @mock.patch('shutil.which')
- @mock.patch('os.environ.get')
- def test_binary_lookup_in_home_py3(self, mock_env_get, mock_shutil_which):
- ''' Testing binary lookup in ~/bin '''
- oc_bin = os.path.expanduser('~/bin/oc')
- mock_env_get.side_effect = lambda _v, _d: '/bin:/usr/bin'
- mock_shutil_which.side_effect = lambda _f, path=None: oc_bin
- self.assertEqual(locate_oc_binary(), oc_bin)
- def tearDown(self):
- '''TearDown method'''
- pass
- if __name__ == "__main__":
- unittest.main()
|