示例#1
0
    def test_execute(self):
        actor = elb_actor.SetCert(
            'Unit Test', {'name': 'unit-test',
                          'region': 'us-east-1',
                          'cert_name': 'unit-cert'}
        )
        elb = mock.Mock()
        elb.listeners = [
            (443, 443, 'HTTPS', 'HTTPS',
             'arn:aws:iam::12345:server-certificate/nextdoor.com')]
        actor._find_elb = helper.mock_tornado(elb)
        actor._get_cert_arn = helper.mock_tornado('arn')
        actor._check_access = helper.mock_tornado()
        actor._use_cert = helper.mock_tornado()

        yield actor._execute()

        self.assertEquals(actor._check_access._call_count, 0)
        self.assertEquals(actor._use_cert._call_count, 1)

        # Check quick exit if the cert is already in use
        actor._get_cert_arn = helper.mock_tornado(elb.listeners[0][4])
        yield actor._execute()

        # Function calls should remain unchanged
        self.assertEquals(actor._check_access._call_count, 0)
        self.assertEquals(actor._use_cert._call_count, 1)
示例#2
0
    def test_execute(self):
        self.actor._dry = False
        initial_array = mock.MagicMock(name='unittestarray')
        self.actor._find_server_arrays = mock_tornado(initial_array)

        @gen.coroutine
        def update_array(array, params):
            array.updated(params)

        self.client_mock.update.side_effect = update_array
        self.actor._terminate_all_instances = mock_tornado()
        self.actor._wait_until_empty = mock_tornado()
        ret = yield self.actor._execute()

        # Verify that the array object would have been patched
        self.client_mock.update.assert_called_once_with(
            initial_array, [('server_array[state]', 'disabled')])
        initial_array.updated.assert_called_once_with(
            [('server_array[state]', 'disabled')])

        # Now verify that each of the steps (terminate, wait, destroyed) were
        # all called.
        self.assertEquals(self.actor._wait_until_empty._call_count, 1)
        self.assertEquals(self.actor._terminate_all_instances._call_count, 1)
        self.assertEquals(ret, None)
示例#3
0
    def test_exec_not_found(self):
        self.actor._client.destroy_resource = helper.mock_tornado()
        self.actor._find_deployment = helper.mock_tornado(None)
        with self.assertRaises(exceptions.InvalidOptions):
            yield self.actor._execute()

        self.assertEquals(self.actor._client.destroy_resource._call_count, 0)
示例#4
0
    def test_execute(self):
        actor = sqs.WaitUntilEmpty('UTA!',
                                   {'name': 'unit-test-queue',
                                    'region': 'us-west-2'})

        actor._wait = mock_tornado(True)
        actor._fetch_queues = mock_tornado([mock.Mock()])
        yield actor.execute()
示例#5
0
 def test_execute_present(self):
     self.actor._ensure_mci = helper.mock_tornado(None)
     self.actor._ensure_description = helper.mock_tornado(None)
     self.actor._ensure_settings = helper.mock_tornado(None)
     self.actor._ensure_tags = helper.mock_tornado(None)
     self.actor._commit = helper.mock_tornado(None)
     self.actor.changed = True
     yield self.actor._execute()
示例#6
0
    def test_execute_present(self):
        self.actor.changed = True
        self.actor._dry = True
        self.actor._commit = helper.mock_tornado(None)
        self.actor._precache = helper.mock_tornado(None)
        self.actor._set_description = helper.mock_tornado(None)
        self.actor._set_images = helper.mock_tornado(None)

        yield self.actor._execute()
示例#7
0
    def test_exec_and_wait(self):
        self.client_mock.run_executable_on_instances = mock_tornado(['test'])
        self.client_mock.wait_for_task = mock_tornado('success-test')
        ret = yield self.actor._exec_and_wait('', {}, [], 1)

        self.assertEquals(ret, 'success-test')
        self.assertEquals(
            self.client_mock.run_executable_on_instances._call_count, 1)
        self.assertEquals(self.client_mock.wait_for_task._call_count, 1)
示例#8
0
    def test_execute_with_missing_array(self):
        mocked_array = mock.MagicMock(name='unittestarray')
        mocked_array.soul = {'name': 'unittestarray'}

        self.actor._update_params = mock_tornado(True)
        self.actor._find_server_arrays = mock_tornado(mocked_array)

        ret = yield self.actor._execute()
        self.assertEquals(None, ret)
示例#9
0
    def test_execute_empty(self):
        actor = sqs.WaitUntilEmpty('UTA!',
                                   {'name': 'unit-test-queue',
                                    'region': 'us-west-2',
                                    'required': True})

        actor._wait = mock_tornado(True)
        actor._fetch_queues = mock_tornado()
        with self.assertRaises(sqs.QueueNotFound):
            yield actor.execute()
示例#10
0
    def test_execute(self):
        self.actor._dry = False
        mocked_array = mock.MagicMock(name='unittestarray')

        self.actor._update_params = mock_tornado(True)
        self.actor._find_server_arrays = mock_tornado(mocked_array)

        ret = yield self.actor._execute()

        self.assertEquals(None, ret)
示例#11
0
    def test_execute_dry_with_missing_array(self):
        self.actor._dry = True
        mocked_array = mock.MagicMock(name='unittestarray')
        mocked_array.soul = {'name': 'unittestarray'}

        self.actor._check_array_inputs = mock_tornado(True)
        self.actor._find_server_arrays = mock_tornado(mocked_array)

        ret = yield self.actor._execute()
        self.assertEquals(None, ret)
示例#12
0
    def test_exec(self):
        mci = mock.MagicMock(name='unit-test-mci')
        self.actor._client.find_by_name_and_keys = helper.mock_tornado(mci)
        self.actor._client.show = helper.mock_tornado(mock.MagicMock())

        with mock.patch.object(self.actor._client, 'destroy_resource') as dr:
            dr.return_value = helper.tornado_value(1)
            yield self.actor._execute()
            self.assertEquals(
                self.actor._client.destroy_resource._mock_call_count, 1)
示例#13
0
    def test_exec(self):
        self.actor._find_deployment = helper.mock_tornado(None)
        self.actor._client.find_by_name_and_keys = helper.mock_tornado(None)
        self.actor._get_image_def = helper.mock_tornado('fake_mci_params')
        mci_mock = mock.MagicMock(name='fake-created-mci')

        with mock.patch.object(self.actor._client, 'create_resource') as cr:
            cr.side_effect = helper.mock_tornado(mci_mock)
            yield self.actor._execute()
            self.assertEquals(cr._mock_call_count, 3)
示例#14
0
    def test_exec_dry(self):
        self.actor._dry = True
        self.actor._client.find_by_name_and_keys = helper.mock_tornado(None)
        self.actor._get_image_def = helper.mock_tornado('fake_mci_params')

        with mock.patch.object(self.actor._client, 'create_resource') as cr:
            cr.return_value = 1
            yield self.actor._execute()
            self.assertEquals(
                self.actor._client.create_resource._mock_call_count, 0)
示例#15
0
    def test_execute_dry_fail(self):
        self.actor._dry = True
        mock_array = mock.MagicMock(name='array')
        self.actor._find_server_arrays = mock_tornado(mock_array)

        # Checking script fails
        self.actor._check_script = mock_tornado(False)
        self.client_mock.get_server_array_current_instances = mock_tornado([])

        with self.assertRaises(exceptions.InvalidOptions):
            yield self.actor._execute()
示例#16
0
    def test_execute_in_dry_mode(self):
        self.actor._dry = True

        source_array = mock.MagicMock(name='unittestarray')
        source_array.self.path = '/fo/bar/123'
        self.actor._find_server_arrays = mock_tornado(source_array)

        self.client_mock.update = mock_tornado()

        ret = yield self.actor._execute()
        self.assertEquals(None, ret)
示例#17
0
    def test_execute_dry(self):
        self.actor._dry = True
        mocked_array = mock.MagicMock(name='fake array')
        mocked_array.soul = {'name': 'mocked-array'}
        mocked_array.self.path = '/a/b/1234'

        self.actor._check_array_inputs = mock_tornado(True)
        self.actor._find_server_arrays = mock_tornado(mocked_array)

        ret = yield self.actor._execute()
        self.assertEquals(None, ret)
示例#18
0
    def setUp(self, *args, **kwargs):
        super(TestDeploymentDestroyActor, self).setUp()
        base.TOKEN = "unittest"

        # Create the actor
        self.actor = deployment.Destroy("Test", {"name": "unit-test"})

        # Patch the actor so that we use the client mock
        self.actor._client = mock.Mock()
        self.actor._find_deployment = helper.mock_tornado(mock.MagicMock())
        self.actor._client.show = helper.mock_tornado(mock.MagicMock())
示例#19
0
    def test_execute(self):
        mock_array = mock.MagicMock(name='array')
        mock_array.soul = {'name': 'array'}
        self.actor._find_server_arrays = mock_tornado(mock_array)
        self.actor._apply = mock.MagicMock()
        self.actor._apply.side_effect = mock_tornado()

        yield self.actor._execute()
        self.actor._apply.assert_has_calls([
            mock.call(self.actor._execute_array,
                      mock_array,
                      [(u'inputs[foo]', u'text:bar')])])
示例#20
0
    def test_execute(self):
        actor = packagecloud.Delete(
            'Unit test action',
            {'packages_to_delete': 'unittest', 'repo': 'unittest'})
        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)
        actor._packagecloud_client.delete().http_delete = mock_tornado({})

        deleted_packages = yield actor._execute()

        self.assertEquals(deleted_packages, None)
示例#21
0
    def test_execute_concurrent(self):
        mock_array = mock.MagicMock(name='array')
        mock_array.soul = {'name': 'array'}
        self.actor._options['concurrency'] = 2
        self.actor._find_server_arrays = mock_tornado(mock_array)
        self.actor._execute_array_with_concurrency = mock.MagicMock()
        self.actor._execute_array_with_concurrency.side_effect = mock_tornado()

        yield self.actor._execute()

        self.actor._execute_array_with_concurrency.assert_has_calls([
            mock.call(mock_array,
                      [(u'inputs[foo]', u'text:bar')])])
示例#22
0
    def test_execute(self):
        actor = packagecloud.WaitForPackage(
            'Unit test action',
            {'name': 'unittest', 'repo': 'unittest', 'version': '0.2'})

        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)
        actor._packagecloud_client.delete().http_delete = mock_tornado({})

        matched_packages = yield actor._execute()

        self.assertEquals(matched_packages, None)
示例#23
0
    def test_execute_present(self):
        self.actor.changed = True

        self.actor.script = mock.MagicMock()
        self.actor.script.soul = {
            'name': 'test-script',
            'description': 'test description',
            'packages': 'curl'
        }
        self.actor.source = 'echo script1\n'
        self.actor._precache = helper.mock_tornado(None)
        self.actor._commit = helper.mock_tornado(None)

        yield self.actor._execute()
示例#24
0
    def test_update_params_400_error(self):
        # Mock out our array object, and the next_instance. Then mock out the
        # api.show() method to return the mocked instance. Verify that the
        # right calls were made to the API though.
        mocked_array = mock.MagicMock(name='unittestarray')
        mocked_instance = mock.MagicMock(name='nextinstance')
        self.actor._find_def_image_href = mock_tornado('fake_href')
        self.actor._client.show.side_effect = mock_tornado(mocked_instance)

        error = api.RightScaleError('error')
        self.client_mock.update.side_effect = error

        with self.assertRaises(exceptions.RecoverableActorFailure):
            yield self.actor._update_params(mocked_array)
示例#25
0
    def test_execute(self):

        source_array = mock.MagicMock(name='unittestarray')
        source_array.self.path = '/fo/bar/123'
        self.actor._find_server_arrays = mock_tornado(source_array)

        new_array = mock.MagicMock(name='unittestarray v1')
        new_array.self.path = '/foo/bar/124'
        self.client_mock.clone_server_array = mock_tornado(new_array)

        self.client_mock.update = mock_tornado()

        ret = yield self.actor._execute()
        self.assertEquals(None, ret)
示例#26
0
    def test_execute_422_error(self):
        mocked_array = mock.MagicMock(name='unittestarray')

        self.actor._check_array_inputs = mock_tornado(True)
        self.actor._find_server_arrays = mock_tornado(mocked_array)

        error = api.RightScaleError('error doing thing')
        self.client_mock.update.side_effect = error

        with self.assertRaises(exceptions.RecoverableActorFailure):
            yield self.actor._execute()

        self.client_mock.update.assert_called_once_with(
            mocked_array, [('server_array[name]', 'newunitarray')])
示例#27
0
    def test_execte(self):
        mocked_array = mock.MagicMock(name='unittest')
        mocked_array.soul = {'name': 'unittest'}
        self.actor._find_server_arrays = mock_tornado(mocked_array)
        self.actor._apply = mock.MagicMock(name='apply')
        self.actor._apply.side_effect = mock_tornado()

        yield self.actor._execute()

        # Now verify that the right calls were made
        self.actor._apply.assert_has_calls([
            mock.call(self.actor._enable_array, mocked_array),
            mock.call(self.actor._launch_instances, mocked_array, False),
            mock.call(self.actor._wait_until_healthy, mocked_array),
        ])
示例#28
0
    def test_delete_keep_one(self):
        actor = packagecloud.PackagecloudBase('Unit test action', {})
        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)
        actor._packagecloud_client.delete().http_delete = mock_tornado({})

        deleted_packages = yield actor._delete(
            regex='unittest', repo='unittest', number_to_keep=1)

        self.assertEquals(
            deleted_packages,
            [{'created_at': datetime.datetime(2014, 7, 7, 20, 27, 18),
              'name': 'unittest', 'distro_version': 'ubuntu/trusty',
              'filename': 'unittest_0.1-1_all.deb'}])
示例#29
0
 def test_get_all_packages(self):
     actor = packagecloud.PackagecloudBase('Unit test action', {})
     actor._packagecloud_client = mock.Mock()
     actor._packagecloud_client.packages().http_get = mock_tornado(
         ALL_PACKAGES_MOCK_RESPONSE)
     all_packages = yield actor._get_all_packages(repo='unittest')
     self.assertEquals(all_packages, ALL_PACKAGES_MOCK_RESPONSE)
示例#30
0
    def test_execute(self):
        older_than = _get_older_than()
        actor = packagecloud.DeleteByDate(
            'Unit test action',
            {'packages_to_delete': 'unittest',
             'repo': 'unittest',
             'older_than': int(older_than.total_seconds())})

        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)
        actor._packagecloud_client.delete().http_delete = mock_tornado({})

        deleted_packages = yield actor._execute()

        self.assertEquals(deleted_packages, None)
示例#31
0
    def test_find_server_arrays_many_returned(self):
        mocked_array1 = mock.MagicMock(name='mocked array1')
        mocked_array2 = mock.MagicMock(name='mocked array2')

        mock_find = mock_tornado([mocked_array1, mocked_array2])
        self.client_mock.find_server_arrays = mock_find

        ret = yield self.actor._find_server_arrays('t', raise_on='notfound')
        self.assertEqual([mocked_array1, mocked_array2], ret)
示例#32
0
    def test_update_params_dry(self):
        self.actor._dry = True

        # Mock out our array object, and the next_instance. Then mock out the
        # api.show() method to return the mocked instance. Verify that the
        # right calls were made to the API though.
        mocked_array = mock.MagicMock(name='unittestarray')
        mocked_instance = mock.MagicMock(name='nextinstance')
        self.actor._find_def_image_href = mock_tornado('fake_href')
        self.actor._client.show.side_effect = mock_tornado(mocked_instance)
        self.actor._client.update.side_effect = mock_tornado(True)

        yield self.actor._update_params(mocked_array)

        self.client_mock.show.assert_has_calls([
            mock.call(mocked_array.next_instance),
        ])
        self.assertFalse(self.client_mock.update.called)
示例#33
0
    def test_delete_keep_one(self):
        actor = packagecloud.PackagecloudBase('Unit test action', {})
        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)
        actor._packagecloud_client.delete().http_delete = mock_tornado({})

        deleted_packages = yield actor._delete(regex='unittest',
                                               repo='unittest',
                                               number_to_keep=1)

        self.assertEquals(
            deleted_packages,
            [{
                'created_at': datetime.datetime(2014, 7, 7, 20, 27, 18),
                'name': 'unittest',
                'distro_version': 'ubuntu/trusty',
                'filename': 'unittest_0.1-1_all.deb'
            }])
示例#34
0
    def test_execute_data_json(self):
        actor = misc.GenericHTTP('Unit Test Action', {
            'url': 'http://example.com',
            'data-json': {
                'foo': 'bar'
            }
        })
        actor._fetch = mock_tornado({'success': {'code': 200}})

        yield actor.execute()
示例#35
0
    def test_get_group_too_many_results(self):
        matching_group = {
            'name': 'unittest',
            'id': 'bogus',
        }
        self.actor._list_groups = mock_tornado(
            [matching_group, matching_group])

        with self.assertRaises(exceptions.InvalidOptions):
            yield self.actor._get_group()
示例#36
0
    def test_execute_dry(self):
        actor = misc.GenericHTTP('Unit Test Action',
                                 {'url': 'http://example.com'},
                                 dry=True)

        actor._fetch = mock_tornado()

        yield actor.execute()

        self.assertEqual(actor._fetch._call_count, 0)
示例#37
0
    def test_execute(self):
        # Mock out the array calls. Make sure that a fake array is returned
        mock_array = mock.MagicMock(name='mockarray')
        mock_array.soul = {'name': 'mockarray'}
        mock_array.href = '/href'
        self.actor._find_server_arrays = helper.mock_tornado(mock_array)

        # Now, mock out the find_alert_spec call
        mock_alert = mock.MagicMock(name='unittest')
        mock_alert.soul = {'name': 'mockalert'}
        self.actor._find_alert_spec = helper.mock_tornado([mock_alert])

        # Finally, mock out the destroy_resource call
        destroy_mock = helper.mock_tornado([])
        self.client_mock.destroy_resource = destroy_mock

        # Do it!
        yield self.actor._execute()
        self.assertEquals(1, destroy_mock._call_count)
示例#38
0
    def test_ensure_mci_is_present_and_would_create(self):
        new_mci = mock.MagicMock(name='new_mci')
        self.actor._options['state'] = 'present'
        self.actor._get_mci = helper.mock_tornado(None)
        self.actor._create_mci = mock.MagicMock(name='create_mci')
        self.actor._create_mci.side_effect = [helper.tornado_value(new_mci)]

        ret = yield self.actor._ensure_mci()
        self.assertEquals(new_mci, ret)
        self.assertTrue(self.actor._create_mci.called)
示例#39
0
    def test_ensure_mci_is_absent_but_is_present(self):
        existing_mci = mock.MagicMock(name='existing_mci')
        self.actor._options['state'] = 'absent'
        self.actor._get_mci = helper.mock_tornado(existing_mci)
        self.actor._delete_mci = mock.MagicMock(name='delete_mci')
        self.actor._delete_mci.side_effect = [helper.tornado_value(None)]

        ret = yield self.actor._ensure_mci()
        self.assertEquals(None, ret)
        self.assertTrue(self.actor._delete_mci.called)
示例#40
0
    def test_launch_instances(self):
        array_mock = mock.MagicMock(name='unittest')
        array_mock.soul = {
            'name': 'unittest',
            'elasticity_params': {
                'bounds': {
                    'max_count': '4'
                }
            }
        }

        launch = mock_tornado()
        self.client_mock.launch_server_array.side_effect = launch

        # Regular function call
        self.client_mock.get_server_array_current_instances = mock_tornado([])
        self.client_mock.launch_server_array.reset_mock()
        yield self.actor._launch_instances(array_mock)
        self.assertEquals(1, self.client_mock.launch_server_array.call_count)
        self.client_mock.launch_server_array.assert_has_calls(
            [mock.call(array_mock, count=4)])

        # Regular function call with some servers already existing.
        self.client_mock.get_server_array_current_instances = mock_tornado(
            [1, 2])
        self.client_mock.launch_server_array.reset_mock()
        yield self.actor._launch_instances(array_mock)
        self.client_mock.launch_server_array.assert_has_calls(
            [mock.call(array_mock, count=2)])

        # Regular function call more arrays than max_count
        self.client_mock.get_server_array_current_instances = mock_tornado(
            [1, 2, 3, 4, 5])
        self.client_mock.launch_server_array.reset_mock()
        yield self.actor._launch_instances(array_mock)
        self.assertEquals(self.client_mock.launch_server_array.call_count, 0)

        # Dry call
        self.actor._dry = True
        self.client_mock.launch_server_array.reset_mock()
        yield self.actor._launch_instances(array_mock)
        self.client_mock.launch_server_array.assert_has_calls([])
示例#41
0
    def test_execute_dry(self):
        actor = elb_actor.SetCert('Unit Test', {
            'name': 'unit-test',
            'region': 'us-east-1',
            'cert_name': 'unit-cert'
        },
                                  dry=True)

        elb = mock.Mock()
        elb.listeners = [(443, 443, 'HTTPS', 'HTTPS',
                          'arn:aws:iam::12345:server-certificate/nextdoor.com')
                         ]

        actor._find_elb = helper.mock_tornado(elb)
        actor._get_cert_arn = helper.mock_tornado('arn')
        actor._check_access = helper.mock_tornado()

        yield actor._execute()

        self.assertEqual(actor._check_access._call_count, 1)
示例#42
0
    def test_execute(self):
        self.actor._dry = False
        mocked_array = mock.MagicMock(name='unittestarray')

        self.actor._check_array_inputs = mock_tornado(True)
        self.actor._find_server_arrays = mock_tornado(mocked_array)

        self.client_mock.update.return_value = tornado_value(None)

        self.client_mock.update_server_array_inputs.return_value = (
            tornado_value(None))

        ret = yield self.actor._execute()

        self.client_mock.update.assert_called_once_with(
            mocked_array, [('server_array[name]', 'newunitarray')])
        self.client_mock.update_server_array_inputs.assert_called_once_with(
            mocked_array, [('inputs[test]', 'text:test')])

        self.assertEqual(None, ret)
示例#43
0
    def test_precache(self):
        fake_group = {
            'name': 'unittest',
            'id': 'bogus',
            'group': {
                'capacity': {
                    'target': 128
                }
            }
        }
        self.actor._get_group = mock_tornado(fake_group)
        self.actor._validate_group = mock_tornado(None)
        yield self.actor._precache()

        # First make sure we stored the group
        self.assertEquals(fake_group, self.actor._group)

        # Second, make sure we overwrote the user config's [capacity][target]
        # setting with the spotinst value
        self.assertEquals(self.actor._config['group']['capacity']['target'],
                          128)
示例#44
0
    def test_execute_self(self):
        actor = elbv2_actor.DeregisterInstance('UTA', {
            'target_group': 'elb-test',
            'region': 'us-east-1'})

        actor._find_target_group = mock.Mock()
        actor._find_target_group.return_value = helper.tornado_value('arn')
        actor._get_meta_data = helper.mock_tornado('i-test')
        actor._remove = mock.Mock()
        actor._remove.return_value = helper.tornado_value(mock.Mock())
        yield actor._execute()
        actor._remove.assert_called_with('arn', ['i-test'])
示例#45
0
    def test_check_name(self):
        actor = pingdom.PingdomBase('Unit Test Action', {'name': 'lollipop'})

        actor._pingdom_client = mock.Mock()
        actor._pingdom_client.checks().http_get = mock_tornado(
            {'checks': [{
                'name': 'lollipop'
            }]})

        check = yield actor._get_check()

        self.assertEquals(check['name'], 'lollipop')
示例#46
0
    def test_find_server_arrays_dry_not_found(self):
        self.client_mock.find_server_arrays = mock_tornado(None)

        self.actor._dry = True

        # With allow_mock enabled, we should receive a mock back
        ret = yield self.actor._find_server_arrays('t', allow_mock=True)
        self.assertTrue(isinstance(ret, mock.MagicMock))

        # With it set to false, we should raise an exception
        with self.assertRaises(exceptions.ActorException):
            yield self.actor._find_server_arrays('t', allow_mock=False)
示例#47
0
    def test_execute_dry(self):
        self.actor._dry = True
        initial_array = mock.MagicMock(name='unittestarray')
        self.actor._find_server_arrays = mock_tornado(initial_array)

        @gen.coroutine
        def update_array(array, params):
            array.updated(params)
        self.client_mock.update.side_effect = update_array

        # ensure that we never called the update_array method!
        yield self.actor._execute()
        initial_array.updated.assert_has_calls([])
示例#48
0
    def test_execute_dry(self):
        # Mock out the calls to SlackAPI.auth_test().auth_test()
        auth_test_mock = mock.MagicMock(name='auth_test')
        auth_test_mock.http_post.side_effect = mock_tornado({'ok': 'true'})
        self._slack_mock.auth_test.return_value = auth_test_mock

        # Ensure we're dry
        self.actor._dry = True
        ret = yield self.actor._execute()
        self.assertEqual(None, ret)

        # Ensure the calls were made to the API
        auth_test_mock.http_post.assert_has_calls([mock.call()])
示例#49
0
    def test_get_operational_instances_warn(self):
        mock_array = mock.MagicMock(name='array')
        mock_op_instance = mock.MagicMock(name='mock_instance')
        mock_op_instance.soul = {'state': 'operational'}
        mock_non_op_instance = mock.MagicMock(name='mock_instance')
        mock_non_op_instance.soul = {'state': 'booting'}

        get = mock_tornado(
            [mock_op_instance, mock_non_op_instance, mock_op_instance])
        self.client_mock.get_server_array_current_instances = get

        ret = yield self.actor._get_operational_instances(mock_array)
        self.assertEquals(2, len(ret))
示例#50
0
    def test_execute_array(self):
        mock_array = mock.MagicMock(name='array')
        mock_op_instance = mock.MagicMock(name='mock_instance')
        mock_op_instance.soul = {
            'state': 'operational',
            'name': 'unit-test-instance'
        }
        mock_task = mock.MagicMock(name='mock_task')

        yi = tornado_value([mock_op_instance])
        self.client_mock.get_server_array_current_instances.return_value = yi

        run_e = tornado_value([(mock_op_instance, mock_task)])
        self.client_mock.run_executable_on_instances.return_value = run_e

        wait = tornado_value(True)
        self.client_mock.wait_for_task.return_value = wait

        # Now verify that each of the expected steps were called in a
        # successful execution.
        ret = yield self.actor._execute_array(mock_array, 1)

        (self.client_mock.get_server_array_current_instances.
         assert_called_twice_with(mock_array))
        (self.client_mock.run_executable_on_instances.assert_called_once_with(
            'test_script', 1, [mock_op_instance]))

        self.client_mock.wait_for_task.assert_called_with(
            task=mock_task,
            task_name=('Executing "test_script" '
                       'on instance: unit-test-instance'),
            sleep=5,
            loc_log=self.actor.log,
            instance=mock_op_instance)
        self.assertEquals(ret, None)

        # Now mock out a failure of the script execution
        wait = mock_tornado(False)
        self.client_mock.wait_for_task = wait
        self.client_mock.get_audit_logs.side_effect = [
            tornado_value(False),
            tornado_value(['logs'])
        ]
        with self.assertRaises(server_array.TaskExecutionFailed):
            yield self.actor._execute_array(mock_array, 1)

        # Finally, a test that mocks out an http error on bad inputs
        error = api.ServerArrayException()
        self.client_mock.run_executable_on_instances.side_effect = error
        with self.assertRaises(exceptions.RecoverableActorFailure):
            yield self.actor._execute_array(mock_array, 1)
示例#51
0
    def test_execute(self):
        # Mock out the calls to SlackAPI.chat_postMessage().http_post()
        post_mock = mock.MagicMock()
        post_mock.http_post.side_effect = mock_tornado({'ok': 'true'})
        self._slack_mock.chat_postMessage.return_value = post_mock

        ret = yield self.actor._execute()
        self.assertEqual(None, ret)

        # Ensure the calls were made to the API
        post_mock.http_post.assert_has_calls([mock.call(
            username='******', unfurl_links=True, text='Unittest',
            unfurl_media=True, parse='none', link_names=1, channel='#testing'
        )])
示例#52
0
    def test_search(self):
        actor = packagecloud.WaitForPackage('Unit test action', {
            'name': 'unittest',
            'repo': 'unittest',
            'version': '0.2'
        })
        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)

        matched_packages = yield actor._search(repo='unittest',
                                               name='unittest',
                                               version='0.2')

        self.assertEquals(matched_packages, [ALL_PACKAGES_MOCK_RESPONSE[0]])
示例#53
0
    def test_execute_dry(self):
        actor = pingdom.Pause('Unit Test Action', {'name': 'lollipop'},
                              dry=True)

        actor._pingdom_client = mock.Mock()
        actor._get_check = mock_tornado({
            'name': 'lollipop',
            'hostname': 'http://lollipop.com',
            'id': 'lol'
        })

        yield actor._execute()

        self.assertEquals(actor._get_check._call_count, 1)
        actor._pingdom_client.check().http_put.assert_not_called()
示例#54
0
    def test_set_state_present(self):
        fake_ret = {
            'ok': True,
            'response': {
                'items': [
                    {'desc': 'new group'}
                ]
            }
        }
        mock_client = mock.MagicMock()
        mock_client.http_post.return_value = tornado_value(fake_ret)
        self.actor._client.aws.ec2.create_group = mock_client

        # Mock out the _get_group method which is called again after the
        # create_group API call is made.
        self.actor._get_group = mock_tornado(None)

        # Mock out the call to our wait_until_stable() call since thats not in
        # the scope of this test.
        self.actor._wait_until_stable = mock_tornado(None)

        yield self.actor._set_state()
        mock_client.http_post.assert_called_with(
            group=self.actor._config['group'])
示例#55
0
    def test_execute_with_sleep(self):
        actor = packagecloud.WaitForPackage('Unit test action', {
            'name': 'not_found',
            'repo': 'unittest',
            'version': '0.2',
            'sleep': 1
        })

        actor._packagecloud_client = mock.Mock()
        actor._packagecloud_client.packages().http_get = mock_tornado(
            ALL_PACKAGES_MOCK_RESPONSE)
        actor._search = mock.Mock(
            side_effect=[tornado_value([]),
                         tornado_value(['something'])])
        yield actor._execute()
        self.assertEquals(actor._search.call_count, 2)
示例#56
0
    def test_execute_dry(self):
        # Mock out the array calls. Make sure that a fake array is returned
        mock_array = mock.MagicMock(name='mockarray')
        mock_array.soul = {'name': 'mockarray'}
        mock_array.href = '/href'
        self.actor._find_server_arrays = helper.mock_tornado(mock_array)

        # Mock the create_resource() call so we don't really try to do work
        mock_create_res = mock.MagicMock(name='create_resource')
        mock_create_res.return_value = helper.tornado_value()
        self.actor._client.create_resource = mock_create_res

        # Do it, then check the mock calls
        self.actor._dry = True
        yield self.actor._execute()
        mock_create_res.assert_has_calls([])
示例#57
0
    def test_find_server_arrays_not_found(self):
        self.client_mock.find_server_arrays = mock_tornado()

        # If the array is not found, but we do want it found, it should
        # raise an exception.
        with self.assertRaises(exceptions.ActorException):
            yield self.actor._find_server_arrays('t', raise_on='notfound')

        # If the array is not found, and we don't want it found, it should
        # return properly.
        ret = yield self.actor._find_server_arrays('t', raise_on='found')
        self.assertEquals(None, ret)

        # Lastly, if the array is not found and we don't care whether its
        # found or not, None should be returned
        ret = yield self.actor._find_server_arrays('t', raise_on=None)
        self.assertEquals(None, ret)
示例#58
0
    def test_execute_exc_500(self):
        # Mock out the array calls. Make sure that a fake array is returned
        mock_array = mock.MagicMock(name='mockarray')
        mock_array.soul = {'name': 'mockarray'}
        mock_array.href = '/href'
        self.actor._find_server_arrays = helper.mock_tornado(mock_array)

        # Mock the create_resource() call so we don't really try to do work
        msg = '500: Unknown error'
        mocked_response = mock.MagicMock(name='response')
        mocked_response.status_code = 500
        exc = requests.exceptions.HTTPError(msg, response=mocked_response)
        self.actor._client.create_resource.side_effect = exc

        # Do it, then check the mock calls
        with self.assertRaises(requests.exceptions.HTTPError):
            yield self.actor._execute()
示例#59
0
    def test_execute_self(self):
        # No instance id specified
        act = elb_actor.DeregisterInstance('UTA', {
            'elb': 'elb-test',
            'region': 'us-east-1'
        })

        act._find_elb = mock.Mock()
        act._find_elb.return_value = helper.tornado_value(mock.Mock())
        act._remove = mock.Mock()
        act._remove.return_value = helper.tornado_value(mock.Mock())
        act._get_meta_data = helper.mock_tornado('i-test')
        yield act._execute()

        act._find_elb.assert_called_with('elb-test')
        lb = yield act._find_elb()
        act._remove.assert_called_with(lb, ['i-test'])
示例#60
0
    def test_execute(self):

        misc.Macro._check_macro = mock.Mock()
        misc.Macro._get_macro = mock.Mock()
        misc.Macro._get_config_from_script = mock.Mock()
        misc.Macro._get_config_from_script.return_value = {}
        misc.Macro._check_schema = mock.Mock()

        with mock.patch('kingpin.actors.utils.get_actor') as get_actor:
            actor = misc.Macro('Unit Test', {'macro': 'test.json',
                                             'tokens': {}},
                               dry=True)

            get_actor().execute = mock_tornado()
            yield actor._execute()

            self.assertEqual(get_actor().execute._call_count, 1)