diff options
author | Max Illfelder <illfelder@users.noreply.github.com> | 2016-05-17 09:45:56 -0700 |
---|---|---|
committer | Max Illfelder <illfelder@users.noreply.github.com> | 2016-05-17 09:45:56 -0700 |
commit | 729a0cfc4a3bbe6757a9a61b0002bc572edaf023 (patch) | |
tree | 468262d71af0995ceca554a631529386f33ca285 | |
parent | 7087603a860f422590b72a5404d7977fa2c84ab6 (diff) | |
parent | f713a378a0d496509b8f2eb5fcae7fede920cb44 (diff) | |
download | google-compute-image-packages-729a0cfc4a3bbe6757a9a61b0002bc572edaf023.tar.gz |
Merge pull request #237 from illfelder/development
100% unit test coverage on Linux guest code.
5 files changed, 67 insertions, 3 deletions
diff --git a/google_compute_engine/accounts/tests/accounts_daemon_test.py b/google_compute_engine/accounts/tests/accounts_daemon_test.py index 1027f4b..50c3c68 100644 --- a/google_compute_engine/accounts/tests/accounts_daemon_test.py +++ b/google_compute_engine/accounts/tests/accounts_daemon_test.py @@ -113,6 +113,7 @@ class AccountsDaemonTest(unittest.TestCase): 'user:ssh-rsa key user@domain.com': False, 'user:ssh-rsa key google {"expireOn":"%s"}' % _GetTimestamp(-1): False, 'user:ssh-rsa key google-ssh': False, + 'user:ssh-rsa key google-ssh {invalid:json}': False, 'user:ssh-rsa key google-ssh {"userName":"user"}': False, 'user:ssh-rsa key google-ssh {"expireOn":"invalid"}': False, 'user:xyz key google-ssh {"expireOn":"%s"}' % _GetTimestamp(1): False, @@ -129,7 +130,7 @@ class AccountsDaemonTest(unittest.TestCase): 'a': ['1', '2'], 'b': ['3', '4', '5'], } - accounts_data = '' + accounts_data = 'skip\n' for user, keys in user_map.items(): for key in keys: accounts_data += '%s:%s\n' % (user, key) diff --git a/google_compute_engine/accounts/tests/accounts_utils_test.py b/google_compute_engine/accounts/tests/accounts_utils_test.py index f1308f2..b51ef96 100644 --- a/google_compute_engine/accounts/tests/accounts_utils_test.py +++ b/google_compute_engine/accounts/tests/accounts_utils_test.py @@ -282,11 +282,54 @@ class AccountsUtilsTest(unittest.TestCase): self.assertEqual(mock_permissions.mock_calls, expected_calls) @mock.patch('google_compute_engine.accounts.accounts_utils.file_utils.SetPermissions') + @mock.patch('google_compute_engine.accounts.accounts_utils.shutil.copy') + @mock.patch('google_compute_engine.accounts.accounts_utils.tempfile.NamedTemporaryFile') + @mock.patch('google_compute_engine.accounts.accounts_utils.os.path.exists') + def testUpdateAuthorizedKeysNoKeys(self, mock_exists, mock_tempfile, + mock_copy, mock_permissions): + user = 'user' + ssh_keys = ['Google key 1'] + temp_dest = '/tmp/dest' + pw_uid = 1 + pw_gid = 2 + pw_dir = '/home' + ssh_dir = '/home/.ssh' + authorized_keys_file = '/home/.ssh/authorized_keys' + pw_entry = accounts_utils.pwd.struct_passwd( + ('', '', pw_uid, pw_gid, '', pw_dir, '')) + self.mock_utils._GetUser.return_value = pw_entry + mock_exists.return_value = False + mock_tempfile.return_value = mock_tempfile + mock_tempfile.__enter__.return_value.name = temp_dest + self.mock_logger.name = 'test' + + # The authorized keys file does not exist so write a new one. + accounts_utils.AccountsUtils._UpdateAuthorizedKeys( + self.mock_utils, user, ssh_keys) + expected_calls = [ + mock.call(mode='w', prefix='test-', delete=True), + mock.call.__enter__(), + mock.call.__enter__().write(self.mock_utils.google_comment + '\n'), + mock.call.__enter__().write('Google key 1\n'), + mock.call.__enter__().flush(), + mock.call.__exit__(None, None, None), + ] + self.assertEqual(mock_tempfile.mock_calls, expected_calls) + mock_copy.assert_called_once_with(temp_dest, authorized_keys_file) + expected_calls = [ + mock.call(pw_dir, mode=0o755, uid=pw_uid, gid=pw_gid, mkdir=True), + mock.call(ssh_dir, mode=0o700, uid=pw_uid, gid=pw_gid, mkdir=True), + mock.call(authorized_keys_file, mode=0o600, uid=pw_uid, gid=pw_gid), + ] + self.assertEqual(mock_permissions.mock_calls, expected_calls) + + @mock.patch('google_compute_engine.accounts.accounts_utils.file_utils.SetPermissions') def testUpdateAuthorizedKeysNoUser(self, mock_permissions): user = 'user' ssh_keys = ['key'] self.mock_utils._GetUser.return_value = None + # The user does not exist, so do not write authorized keys. accounts_utils.AccountsUtils._UpdateAuthorizedKeys( self.mock_utils, user, ssh_keys) self.mock_utils._GetUser.assert_called_once_with(user) diff --git a/google_compute_engine/ip_forwarding/ip_forwarding_utils.py b/google_compute_engine/ip_forwarding/ip_forwarding_utils.py index ad9258e..6e206b5 100644 --- a/google_compute_engine/ip_forwarding/ip_forwarding_utils.py +++ b/google_compute_engine/ip_forwarding/ip_forwarding_utils.py @@ -81,8 +81,6 @@ class IpForwardingUtils(object): if fields and fields[0] == 'default' and 'dev' in fields: index = fields.index('dev') + 1 return fields[index] if index < len(fields) else 'eth0' - else: - continue return 'eth0' def ParseForwardedIps(self, forwarded_ips): diff --git a/google_compute_engine/tests/config_manager_test.py b/google_compute_engine/tests/config_manager_test.py index 7862b9e..1fccbf9 100644 --- a/google_compute_engine/tests/config_manager_test.py +++ b/google_compute_engine/tests/config_manager_test.py @@ -118,6 +118,15 @@ class ConfigManagerTest(unittest.TestCase): ] self.assertEqual(self.mock_config.mock_calls, expected_calls) + def testSetOptionNoOverwrite(self): + self.mock_config_manager.SetOption( + self.section, self.option, self.value, overwrite=False) + expected_calls = [ + mock.call.read(self.config_file), + mock.call.has_option(self.section, self.option), + ] + self.assertEqual(self.mock_config.mock_calls, expected_calls) + def testSetOptionNewSection(self): section = 'test-section' self.mock_config_manager.SetOption(section, self.option, self.value) diff --git a/google_compute_engine/tests/metadata_watcher_test.py b/google_compute_engine/tests/metadata_watcher_test.py index 40e162c..4a7de5a 100644 --- a/google_compute_engine/tests/metadata_watcher_test.py +++ b/google_compute_engine/tests/metadata_watcher_test.py @@ -105,6 +105,19 @@ class MetadataWatcherTest(unittest.TestCase): @mock.patch('google_compute_engine.metadata_watcher.urlrequest.urlopen') @mock.patch('google_compute_engine.metadata_watcher.urlrequest.Request') + def testGetMetadataRequestHttpException(self, mock_request, mock_urlopen): + mock_request.return_value = mock_request + mock_response = mock.Mock() + mock_response.getcode.return_value = metadata_watcher.httpclient.NOT_FOUND + mock_urlopen.side_effect = metadata_watcher.StatusException(mock_response), + + with self.assertRaises(metadata_watcher.StatusException): + self.mock_watcher._GetMetadataRequest(self.url) + self.assertEqual(mock_request.call_count, 1) + self.assertEqual(mock_urlopen.call_count, 1) + + @mock.patch('google_compute_engine.metadata_watcher.urlrequest.urlopen') + @mock.patch('google_compute_engine.metadata_watcher.urlrequest.Request') def testGetMetadataRequestException(self, mock_request, mock_urlopen): mock_request.return_value = mock_request mock_response = mock.Mock() |