Skip to content

Commit 2f20b79

Browse files
Add a CLI command to validate endpoint connection info
Add `endpoint validate connection info`, which validates the given platform and connection info without creating an endpoint. Signed-off-by: Mihaela Balutoiu <mbalutoiu@cloudbasesolutions.com>
1 parent 69305e3 commit 2f20b79

3 files changed

Lines changed: 97 additions & 0 deletions

File tree

‎coriolisclient/cli/endpoints.py‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,3 +295,30 @@ def take_action(self, args):
295295
valid, message = endpoints.validate_connection(endpoint_id)
296296
if not valid:
297297
raise exceptions.EndpointConnectionValidationFailed(message)
298+
299+
300+
class EndpointValidateConnectionInfo(command.Command):
301+
"""Validates the given endpoint connection info"""
302+
303+
def get_parser(self, prog_name):
304+
parser = super(
305+
EndpointValidateConnectionInfo, self).get_parser(prog_name)
306+
parser.add_argument('--provider', required=True,
307+
help='The provider, e.g.: '
308+
'vmware_vsphere, openstack')
309+
parser.add_argument('--coriolis-region', action='append',
310+
dest='regions', default=[],
311+
help="ID of a region the connection info should "
312+
"be validated in. Can be supplied multiple "
313+
"times.")
314+
add_connection_info_args_to_parser(parser)
315+
316+
return parser
317+
318+
def take_action(self, args):
319+
conn_info = get_connection_info_from_args(args)
320+
endpoints = self.app.client_manager.coriolis.endpoints
321+
valid, message = endpoints.validate_connection_info(
322+
args.provider, conn_info, regions=args.regions)
323+
if not valid:
324+
raise exceptions.EndpointConnectionValidationFailed(message)

‎coriolisclient/tests/cli/test_endpoints.py‎

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,72 @@ def test_take_action_not_valid(self, mock_list_objects):
531531
mock.sentinel.id)
532532
mock_validate_connection.assert_called_once_with(
533533
mock_endpoint.get_endpoint_id_for_name.return_value)
534+
535+
536+
class EndpointValidateConnectionInfoTestCase(test_base.CoriolisBaseTestCase):
537+
"""Test suite for the Coriolis Client Endpoint Validate Connection
538+
Info."""
539+
540+
def setUp(self):
541+
self.mock_app = mock.Mock()
542+
super(EndpointValidateConnectionInfoTestCase, self).setUp()
543+
self.endpoint = endpoints.EndpointValidateConnectionInfo(
544+
self.mock_app, mock.sentinel.app_args)
545+
546+
@mock.patch.object(endpoints, 'add_connection_info_args_to_parser')
547+
@mock.patch.object(command.Command, 'get_parser')
548+
def test_get_parser(
549+
self,
550+
mock_get_parser,
551+
mock_add_connection_info_args_to_parser
552+
):
553+
result = self.endpoint.get_parser(mock.sentinel.prog_name)
554+
555+
self.assertEqual(
556+
mock_get_parser.return_value,
557+
result
558+
)
559+
mock_get_parser.assert_called_once_with(mock.sentinel.prog_name)
560+
mock_add_connection_info_args_to_parser.assert_called_once_with(
561+
mock_get_parser.return_value)
562+
563+
@mock.patch.object(endpoints, 'get_connection_info_from_args')
564+
def test_take_action(self, mock_get_connection_info_from_args):
565+
args = mock.Mock()
566+
args.provider = mock.sentinel.provider
567+
args.regions = mock.sentinel.regions
568+
mock_validate_connection_info = mock.Mock()
569+
mock_validate_connection_info.return_value = (True, None)
570+
(self.mock_app.client_manager.coriolis.endpoints
571+
.validate_connection_info) = mock_validate_connection_info
572+
573+
self.endpoint.take_action(args)
574+
575+
mock_get_connection_info_from_args.assert_called_once_with(args)
576+
mock_validate_connection_info.assert_called_once_with(
577+
mock.sentinel.provider,
578+
mock_get_connection_info_from_args.return_value,
579+
regions=mock.sentinel.regions)
580+
581+
@mock.patch.object(endpoints, 'get_connection_info_from_args')
582+
def test_take_action_not_valid(self, mock_get_connection_info_from_args):
583+
args = mock.Mock()
584+
args.provider = mock.sentinel.provider
585+
args.regions = mock.sentinel.regions
586+
mock_validate_connection_info = mock.Mock()
587+
mock_validate_connection_info.return_value = (False, "mock_message")
588+
(self.mock_app.client_manager.coriolis.endpoints
589+
.validate_connection_info) = mock_validate_connection_info
590+
591+
self.assertRaisesRegex(
592+
exceptions.EndpointConnectionValidationFailed,
593+
"mock_message",
594+
self.endpoint.take_action,
595+
args
596+
)
597+
598+
mock_get_connection_info_from_args.assert_called_once_with(args)
599+
mock_validate_connection_info.assert_called_once_with(
600+
mock.sentinel.provider,
601+
mock_get_connection_info_from_args.return_value,
602+
regions=mock.sentinel.regions)

‎setup.cfg‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ coriolis.v1 =
3333
endpoint_list = coriolisclient.cli.endpoints:ListEndpoint
3434
endpoint_show = coriolisclient.cli.endpoints:ShowEndpoint
3535
endpoint_validate_connection = coriolisclient.cli.endpoints:EndpointValidateConnection
36+
endpoint_validate_connection_info = coriolisclient.cli.endpoints:EndpointValidateConnectionInfo
3637
endpoint_export_inventory = coriolisclient.cli.endpoints:ExportEndpointInventory
3738

3839
endpoint_instance_list = coriolisclient.cli.endpoint_instances:ListEndpointInstance

0 commit comments

Comments
 (0)