From 05f5b5b27954cbdc199fb6345ac977680291cdef Mon Sep 17 00:00:00 2001 From: Juha Litola Date: Fri, 25 Jan 2013 13:29:39 +0200 Subject: [PATCH 1/2] Fixed add_key stalling indefinitely, and test code leaking into production setting --- library/apt_key | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/library/apt_key b/library/apt_key index dcc4d12717f..8e521a4751a 100644 --- a/library/apt_key +++ b/library/apt_key @@ -105,7 +105,7 @@ def download_key(url): def add_key(key): - return call("apt-key add -", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + p = Popen("apt-key add -", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) (_, _) = p.communicate(key) return p.returncode == 0 @@ -163,12 +163,12 @@ if 'ANSIBLE_TEST_APT_KEY' in environ: return extra -if environ.get('ANSIBLE_TEST_APT_KEY') == 'none': - def key_present(key_id): - return False -else: - def key_present(key_id): - return key_id == environ['ANSIBLE_TEST_APT_KEY'] + if environ.get('ANSIBLE_TEST_APT_KEY') == 'none': + def key_present(key_id): + return False + else: + def key_present(key_id): + return key_id == environ['ANSIBLE_TEST_APT_KEY'] def main(): From 2796603c9206d70affb972064c9fe66612329aee Mon Sep 17 00:00:00 2001 From: Juha Litola Date: Fri, 25 Jan 2013 17:10:04 +0200 Subject: [PATCH 2/2] Removed apt_key tests, as they didn't test the real functionality. Tests used heavily mocked version of the apt_key code, which meant that it didn't properly test real life scenario. --- library/apt_key | 50 -------------------------------------- test/TestRunner.py | 60 ---------------------------------------------- 2 files changed, 110 deletions(-) diff --git a/library/apt_key b/library/apt_key index 8e521a4751a..14d1b734fda 100644 --- a/library/apt_key +++ b/library/apt_key @@ -121,56 +121,6 @@ def return_values(tb=False): else: return {} - -# use cues from the environment to mock out functions for testing -if 'ANSIBLE_TEST_APT_KEY' in environ: - orig_download_key = download_key - KEY_ADDED=0 - KEY_REMOVED=0 - KEY_DOWNLOADED=0 - - - def download_key(url): - global KEY_DOWNLOADED - KEY_DOWNLOADED += 1 - return orig_download_key(url) - - - def find_missing_binaries(): - return [] - - - def add_key(key): - global KEY_ADDED - KEY_ADDED += 1 - return True - - - def remove_key(key_id): - global KEY_REMOVED - KEY_REMOVED += 1 - return True - - - def return_values(tb=False): - extra = dict( - added=KEY_ADDED, - removed=KEY_REMOVED, - downloaded=KEY_DOWNLOADED - ) - if tb: - extra['exception'] = format_exc() - return extra - - - if environ.get('ANSIBLE_TEST_APT_KEY') == 'none': - def key_present(key_id): - return False - else: - def key_present(key_id): - return key_id == environ['ANSIBLE_TEST_APT_KEY'] - - def main(): module = AnsibleModule( argument_spec=dict( diff --git a/test/TestRunner.py b/test/TestRunner.py index 9526dbbdeed..6a191821ff1 100644 --- a/test/TestRunner.py +++ b/test/TestRunner.py @@ -290,63 +290,3 @@ class TestRunner(unittest.TestCase): print result assert result['changed'] == False - def test_apt_key(self): - try: - key_file = self._get_test_file("apt_key.gpg") - key_file_url = 'file://' + urllib2.quote(key_file) - key_id = '473041FA' - - os.environ['ANSIBLE_TEST_APT_KEY'] = 'none' - # key missing, should download and add - result = self._run('apt_key', ['state=present', 'url=' + key_file_url]) - assert 'failed' not in result - assert result['added'] == 1 - assert result['downloaded'] == 1 - assert result['removed'] == 0 - assert result['changed'] - - os.environ["ANSIBLE_TEST_APT_KEY"] = key_id - # key missing, shouldn't download, no changes - result = self._run('apt_key', ['id=12345678', 'state=absent', 'url=' + key_file_url]) - assert 'failed' not in result - assert result['added'] == 0 - assert result['downloaded'] == 0 - assert result['removed'] == 0 - assert not result['changed'] - # key missing, should download and fail sanity check, no changes - result = self._run('apt_key', ['id=12345678', 'state=present', 'url=' + key_file_url]) - assert 'failed' in result - assert result['added'] == 0 - assert result['downloaded'] == 1 - assert result['removed'] == 0 - # key present, shouldn't download, no changes - result = self._run('apt_key', ['id=' + key_id, 'state=present', 'url=' + key_file_url]) - assert 'failed' not in result - assert result['added'] == 0 - assert result['downloaded'] == 0 - assert result['removed'] == 0 - assert not result['changed'] - # key present, should download to get key id - result = self._run('apt_key', ['state=present', 'url=' + key_file_url]) - assert 'failed' not in result - assert result['added'] == 0 - assert result['downloaded'] == 1 - assert result['removed'] == 0 - assert not result['changed'] - # key present, should download to get key id and remove - result = self._run('apt_key', ['state=absent', 'url=' + key_file_url]) - assert 'failed' not in result - assert result['added'] == 0 - assert result['downloaded'] == 1 - assert result['removed'] == 1 - assert result['changed'] - # key present, should remove but not download - result = self._run('apt_key', ['id=' + key_id, 'state=absent', 'url=' + key_file_url]) - assert 'failed' not in result - assert result['added'] == 0 - assert result['downloaded'] == 0 - assert result['removed'] == 1 - assert result['changed'] - finally: - # always clean up the environment - os.environ.pop('ANSIBLE_TEST_APT_KEY', None)