Path: blob/develop/tests/unit/customizations/configservice/test_getstatus.py
1569 views
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License"). You3# may not use this file except in compliance with the License. A copy of4# the License is located at5#6# http://aws.amazon.com/apache2.0/7#8# or in the "license" file accompanying this file. This file is9# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF10# ANY KIND, either express or implied. See the License for the specific11# language governing permissions and limitations under the License.12from awscli.compat import StringIO13from awscli.testutils import mock, unittest14from awscli.customizations.configservice.getstatus import GetStatusCommand151617class TestGetStatusCommand(unittest.TestCase):18def setUp(self):19self.session = mock.Mock()2021# Setup the config client mock.22self.config_client = mock.Mock()23self.session.create_client.return_value = self.config_client2425# Create some handles to control the description outputs.26self.recorder_status = []27self.channel_status = []2829# Set the output handles to the client.30self.config_client.describe_configuration_recorder_status.\31return_value = {'ConfigurationRecordersStatus':32self.recorder_status}33self.config_client.describe_delivery_channel_status.\34return_value = {'DeliveryChannelsStatus': self.channel_status}3536self.parsed_args = mock.Mock()37self.parsed_globals = mock.Mock()38self.cmd = GetStatusCommand(self.session)3940def _make_delivery_channel_status(self, name, stream_delivery_status,41history_delivery_status,42snapshot_delivery_status):43status = {44'name': 'default',45'configStreamDeliveryInfo': stream_delivery_status,46'configHistoryDeliveryInfo': history_delivery_status,47'configSnapshotDeliveryInfo': snapshot_delivery_status48}49return status5051def test_create_client(self):52# Set values for the parsed globals.53self.parsed_globals.verify_ssl = True54self.parsed_globals.region = 'us-east-1'55self.parsed_globals.endpoint_url = 'https://foo.com'5657# Ensure that the client was built with the proper arguments.58self.cmd._run_main(self.parsed_args, self.parsed_globals)59self.session.create_client.assert_called_with(60'config',61verify=self.parsed_globals.verify_ssl,62region_name=self.parsed_globals.region,63endpoint_url=self.parsed_globals.endpoint_url64)6566def test_configuration_recorder_success(self):67status = {'name': 'default', 'recording': True,68'lastStatus': 'SUCCESS'}69self.recorder_status.append(status)7071expected_output = (72'Configuration Recorders:\n\n'73'name: default\n'74'recorder: ON\n'75'last status: SUCCESS\n\n'76'Delivery Channels:\n\n'77)7879with mock.patch('sys.stdout', StringIO()) as mock_stdout:80self.cmd._run_main(self.parsed_args, self.parsed_globals)81self.assertEqual(expected_output, mock_stdout.getvalue())8283def test_configuration_recorder_fail(self):84status = {'name': 'default', 'recording': True,85'lastStatus': 'FAILURE', 'lastErrorCode': '500',86'lastErrorMessage': 'This is the error'}87self.recorder_status.append(status)8889expected_output = (90'Configuration Recorders:\n\n'91'name: default\n'92'recorder: ON\n'93'last status: FAILURE\n'94'error code: 500\n'95'message: This is the error\n\n'96'Delivery Channels:\n\n'97)9899with mock.patch('sys.stdout', StringIO()) as mock_stdout:100self.cmd._run_main(self.parsed_args, self.parsed_globals)101self.assertEqual(expected_output, mock_stdout.getvalue())102103def test_configuration_recorder_off(self):104status = {'name': 'default', 'recording': False}105self.recorder_status.append(status)106107expected_output = (108'Configuration Recorders:\n\n'109'name: default\n'110'recorder: OFF\n\n'111'Delivery Channels:\n\n'112)113114with mock.patch('sys.stdout', StringIO()) as mock_stdout:115self.cmd._run_main(self.parsed_args, self.parsed_globals)116self.assertEqual(expected_output, mock_stdout.getvalue())117118def test_multiple_configuration_recorders(self):119status = {'name': 'default', 'recording': True,120'lastStatus': 'SUCCESS'}121self.recorder_status.append(status)122123status = {'name': 'default', 'recording': True,124'lastStatus': 'FAILURE', 'lastErrorCode': '500',125'lastErrorMessage': 'This is the error'}126self.recorder_status.append(status)127128status = {'name': 'default', 'recording': False}129self.recorder_status.append(status)130131expected_output = (132'Configuration Recorders:\n\n'133'name: default\n'134'recorder: ON\n'135'last status: SUCCESS\n\n'136'name: default\n'137'recorder: ON\n'138'last status: FAILURE\n'139'error code: 500\n'140'message: This is the error\n\n'141'name: default\n'142'recorder: OFF\n\n'143'Delivery Channels:\n\n'144)145with mock.patch('sys.stdout', StringIO()) as mock_stdout:146self.cmd._run_main(self.parsed_args, self.parsed_globals)147self.assertEqual(expected_output, mock_stdout.getvalue())148149def test_delivery_channel_success_single_delivery_info(self):150name = 'default'151success = {'lastStatus': 'SUCCESS'}152153stream_delivery_status = success154history_delivery_status = {}155snapshot_delivery_status = {}156157status = self._make_delivery_channel_status(158name, stream_delivery_status=stream_delivery_status,159history_delivery_status=history_delivery_status,160snapshot_delivery_status=snapshot_delivery_status161)162self.channel_status.append(status)163164expected_output = (165'Configuration Recorders:\n\n'166'Delivery Channels:\n\n'167'name: default\n'168'last stream delivery status: SUCCESS\n\n'169)170171with mock.patch('sys.stdout', StringIO()) as mock_stdout:172self.cmd._run_main(self.parsed_args, self.parsed_globals)173self.assertEqual(expected_output, mock_stdout.getvalue())174175def test_delivery_channel_success_multiple_delivery_info(self):176name = 'default'177success = {'lastStatus': 'SUCCESS'}178179stream_delivery_status = success180history_delivery_status = success181snapshot_delivery_status = success182183status = self._make_delivery_channel_status(184name, stream_delivery_status=stream_delivery_status,185history_delivery_status=history_delivery_status,186snapshot_delivery_status=snapshot_delivery_status187)188self.channel_status.append(status)189190expected_output = (191'Configuration Recorders:\n\n'192'Delivery Channels:\n\n'193'name: default\n'194'last stream delivery status: SUCCESS\n'195'last history delivery status: SUCCESS\n'196'last snapshot delivery status: SUCCESS\n\n'197)198199with mock.patch('sys.stdout', StringIO()) as mock_stdout:200self.cmd._run_main(self.parsed_args, self.parsed_globals)201self.assertEqual(expected_output, mock_stdout.getvalue())202203def test_delivery_channel_fail_single_delivery_info(self):204name = 'default'205failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',206'lastErrorMessage': 'This is the error'}207208stream_delivery_status = failure209history_delivery_status = {}210snapshot_delivery_status = {}211212status = self._make_delivery_channel_status(213name, stream_delivery_status=stream_delivery_status,214history_delivery_status=history_delivery_status,215snapshot_delivery_status=snapshot_delivery_status216)217self.channel_status.append(status)218219expected_output = (220'Configuration Recorders:\n\n'221'Delivery Channels:\n\n'222'name: default\n'223'last stream delivery status: FAILURE\n'224'error code: 500\n'225'message: This is the error\n\n'226)227228with mock.patch('sys.stdout', StringIO()) as mock_stdout:229self.cmd._run_main(self.parsed_args, self.parsed_globals)230self.assertEqual(expected_output, mock_stdout.getvalue())231232def test_delivery_channel_mixed_multiple_delivery_info(self):233name = 'default'234success = {'lastStatus': 'SUCCESS'}235failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',236'lastErrorMessage': 'This is the error'}237238stream_delivery_status = failure239history_delivery_status = success240snapshot_delivery_status = success241242status = self._make_delivery_channel_status(243name, stream_delivery_status=stream_delivery_status,244history_delivery_status=history_delivery_status,245snapshot_delivery_status=snapshot_delivery_status246)247self.channel_status.append(status)248249expected_output = (250'Configuration Recorders:\n\n'251'Delivery Channels:\n\n'252'name: default\n'253'last stream delivery status: FAILURE\n'254'error code: 500\n'255'message: This is the error\n'256'last history delivery status: SUCCESS\n'257'last snapshot delivery status: SUCCESS\n\n'258)259260with mock.patch('sys.stdout', StringIO()) as mock_stdout:261self.cmd._run_main(self.parsed_args, self.parsed_globals)262self.assertEqual(expected_output, mock_stdout.getvalue())263264def test_multiple_delivery_channels(self):265name = 'default'266success = {'lastStatus': 'SUCCESS'}267failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',268'lastErrorMessage': 'This is the error'}269270stream_delivery_status = failure271history_delivery_status = success272snapshot_delivery_status = success273274status = self._make_delivery_channel_status(275name, stream_delivery_status=stream_delivery_status,276history_delivery_status=history_delivery_status,277snapshot_delivery_status=snapshot_delivery_status278)279self.channel_status.append(status)280self.channel_status.append(status)281282expected_output = (283'Configuration Recorders:\n\n'284'Delivery Channels:\n\n'285'name: default\n'286'last stream delivery status: FAILURE\n'287'error code: 500\n'288'message: This is the error\n'289'last history delivery status: SUCCESS\n'290'last snapshot delivery status: SUCCESS\n\n'291'name: default\n'292'last stream delivery status: FAILURE\n'293'error code: 500\n'294'message: This is the error\n'295'last history delivery status: SUCCESS\n'296'last snapshot delivery status: SUCCESS\n\n'297)298299with mock.patch('sys.stdout', StringIO()) as mock_stdout:300self.cmd._run_main(self.parsed_args, self.parsed_globals)301self.assertEqual(expected_output, mock_stdout.getvalue())302303def test_full_get_status(self):304# Create the configuration recorder statuses.305status = {'name': 'default', 'recording': True,306'lastStatus': 'SUCCESS'}307self.recorder_status.append(status)308309status = {'name': 'default', 'recording': True,310'lastStatus': 'FAILURE', 'lastErrorCode': '500',311'lastErrorMessage': 'This is the error'}312self.recorder_status.append(status)313314status = {'name': 'default', 'recording': False}315self.recorder_status.append(status)316317# Create the delivery channel statuses.318name = 'default'319success = {'lastStatus': 'SUCCESS'}320failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',321'lastErrorMessage': 'This is the error'}322323stream_delivery_status = failure324history_delivery_status = success325snapshot_delivery_status = success326327status = self._make_delivery_channel_status(328name, stream_delivery_status=stream_delivery_status,329history_delivery_status=history_delivery_status,330snapshot_delivery_status=snapshot_delivery_status331)332self.channel_status.append(status)333self.channel_status.append(status)334335expected_output = (336'Configuration Recorders:\n\n'337'name: default\n'338'recorder: ON\n'339'last status: SUCCESS\n\n'340'name: default\n'341'recorder: ON\n'342'last status: FAILURE\n'343'error code: 500\n'344'message: This is the error\n\n'345'name: default\n'346'recorder: OFF\n\n'347'Delivery Channels:\n\n'348'name: default\n'349'last stream delivery status: FAILURE\n'350'error code: 500\n'351'message: This is the error\n'352'last history delivery status: SUCCESS\n'353'last snapshot delivery status: SUCCESS\n\n'354'name: default\n'355'last stream delivery status: FAILURE\n'356'error code: 500\n'357'message: This is the error\n'358'last history delivery status: SUCCESS\n'359'last snapshot delivery status: SUCCESS\n\n'360)361362with mock.patch('sys.stdout', StringIO()) as mock_stdout:363self.cmd._run_main(self.parsed_args, self.parsed_globals)364self.assertEqual(expected_output, mock_stdout.getvalue())365366367