From ba69870d86b5840dec06c6c30c8ddf50398bdb44 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Wed, 15 Dec 2021 17:32:10 +0000 Subject: compute: Fix weird option definition for 'server ssh' argparse allows you to specify multiple options for a given argument when declaring the argument. For some reason, we weren't doing this for the 'server ssh' command. There's no apparent reason for doing things this way and it's been that way since the beginning (2013) so let's not do that. We also add unit tests since they were missing and should exist. Change-Id: I67a9e6516d7057266210cd4083e9ddeb1cfaa5de Signed-off-by: Stephen Finucane --- .../tests/unit/compute/v2/test_server.py | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'openstackclient/tests/unit') diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index 15be07fc..acff61e6 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -8265,6 +8265,83 @@ class TestServerShow(TestServer): exceptions.CommandError, self.cmd.take_action, parsed_args) +@mock.patch('openstackclient.compute.v2.server.os.system') +class TestServerSsh(TestServer): + + def setUp(self): + super().setUp() + + self.cmd = server.SshServer(self.app, None) + + self.app.client_manager.auth_ref = mock.Mock() + self.app.client_manager.auth_ref.username = 'cloud' + + self.attrs = { + 'addresses': { + 'public': [ + { + 'addr': '192.168.1.30', + 'OS-EXT-IPS-MAC:mac_addr': '00:0c:29:0d:11:74', + 'OS-EXT-IPS:type': 'fixed', + 'version': 4, + }, + ], + }, + } + self.server = compute_fakes.FakeServer.create_one_server( + attrs=self.attrs, methods=self.methods, + ) + self.servers_mock.get.return_value = self.server + + def test_server_ssh_no_opts(self, mock_exec): + arglist = [ + self.server.name, + ] + verifylist = [ + ('server', self.server.name), + ('login', None), + ('port', None), + ('identity', None), + ('option', None), + ('ipv4', False), + ('ipv6', False), + ('address_type', 'public'), + ('verbose', False), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + self.assertIsNone(result) + mock_exec.assert_called_once_with('ssh cloud@192.168.1.30') + + def test_server_ssh_opts(self, mock_exec): + arglist = [ + self.server.name, + '-l', 'username', + '-p', '2222', + ] + verifylist = [ + ('server', self.server.name), + ('login', 'username'), + ('port', 2222), + ('identity', None), + ('option', None), + ('ipv4', False), + ('ipv6', False), + ('address_type', 'public'), + ('verbose', False), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + self.assertIsNone(result) + mock_exec.assert_called_once_with( + 'ssh -p 2222 username@192.168.1.30' + ) + + class TestServerStart(TestServer): def setUp(self): -- cgit v1.2.1