1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
"""
SoftLayer.tests.CLI.modules.sshkey_tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:license: MIT, see LICENSE for more details.
"""
import json
import os.path
import sys
import tempfile
from unittest import mock as mock
from SoftLayer.CLI import exceptions
from SoftLayer import testing
class SshKeyTests(testing.TestCase):
def test_add_without_key_errors(self):
result = self.run_command(['sshkey', 'add', 'key1'])
self.assertEqual(result.exit_code, 2)
self.assertIsInstance(result.exception, exceptions.ArgumentError)
def test_add_with_key_file_and_key_argument_errors(self):
path = os.path.join(testing.FIXTURE_PATH, 'id_rsa.pub')
result = self.run_command(['sshkey', 'add', 'key1',
'--key=some_key',
'--in-file=%s' % path])
self.assertEqual(result.exit_code, 2)
self.assertIsInstance(result.exception, exceptions.ArgumentError)
def test_add_by_option(self):
service = self.client['Security_Ssh_Key']
mock_key = service.getObject()['key']
result = self.run_command(['sshkey', 'add', 'key1',
'--key=%s' % mock_key,
'--note=my key'])
self.assert_no_fail(result)
self.assertEqual(json.loads(result.output),
"SSH key added: aa:bb:cc:dd")
self.assert_called_with('SoftLayer_Security_Ssh_Key', 'createObject',
args=({'notes': 'my key',
'key': mock_key,
'label': 'key1'},))
def test_add_by_file(self):
path = os.path.join(testing.FIXTURE_PATH, 'id_rsa.pub')
result = self.run_command(['sshkey', 'add', 'key1',
'--in-file=%s' % path])
self.assert_no_fail(result)
self.assertEqual(json.loads(result.output),
"SSH key added: aa:bb:cc:dd")
service = self.client['Security_Ssh_Key']
mock_key = service.getObject()['key']
self.assert_called_with('SoftLayer_Security_Ssh_Key', 'createObject',
args=({'notes': None,
'key': mock_key,
'label': 'key1'},))
def test_remove_key(self):
result = self.run_command(['--really', 'sshkey', 'remove', '1234'])
self.assert_no_fail(result)
self.assert_called_with('SoftLayer_Security_Ssh_Key', 'deleteObject',
identifier=1234)
@mock.patch('SoftLayer.CLI.formatting.no_going_back')
def test_remove_key_fail(self, ngb_mock):
ngb_mock.return_value = False
result = self.run_command(['sshkey', 'remove', '1234'])
self.assertEqual(result.exit_code, 2)
def test_edit_key(self):
result = self.run_command(['sshkey', 'edit', '1234',
'--label=key1', '--note=my key'])
self.assert_no_fail(result)
self.assert_called_with('SoftLayer_Security_Ssh_Key', 'editObject',
args=({'notes': 'my key',
'label': 'key1'},),
identifier=1234)
def test_edit_key_fail(self):
fixture = self.set_mock('SoftLayer_Security_Ssh_Key', 'editObject')
fixture.return_value = False
result = self.run_command(['sshkey', 'edit', '1234',
'--label=key1', '--note=my key'])
self.assertEqual(result.exit_code, 2)
def test_list_keys(self):
result = self.run_command(['sshkey', 'list'])
self.assert_no_fail(result)
self.assertEqual(json.loads(result.output),
[{'notes': '-',
'fingerprint': None,
'id': '100',
'label': 'Test 1'},
{'notes': 'my key',
'fingerprint': None,
'id': '101',
'label': 'Test 2'}])
def test_print_key(self):
result = self.run_command(['sshkey', 'print', '1234'])
self.assert_no_fail(result)
self.assertEqual(json.loads(result.output),
{'id': 1234, 'label': 'label', 'notes': 'notes'})
def test_print_key_file(self):
if sys.platform.startswith("win"):
self.skipTest("Test doesn't work in Windows")
with tempfile.NamedTemporaryFile() as sshkey_file:
service = self.client['Security_Ssh_Key']
mock_key = service.getObject()['key']
result = self.run_command(['sshkey', 'print', '1234',
'--out-file=%s' % sshkey_file.name])
self.assert_no_fail(result)
self.assertEqual(mock_key, sshkey_file.read().decode("utf-8"))
|