def test_get_event(self):
        fields = {'stack_id': 'teststack',
                  'resource_name': 'testresource',
                  'event_id': '1'}

        class FakeAPI(object):
            """Fake API and ensure request url is correct."""

            def json_request(self, *args, **kwargs):
                expect = ('GET',
                          '/stacks/teststack%2Fabcd1234/resources'
                          '/testresource/events/1')
                assert args == expect
                return {}, {'event': []}

            def get(self, *args, **kwargs):
                pass

        manager = events.EventManager(FakeAPI())
        with mock.patch('heatclient.v1.events.Event'):
            self.m.StubOutWithMock(manager, '_resolve_stack_id')
            self.m.StubOutWithMock(utils, 'get_response_body')
            utils.get_response_body(mox.IgnoreArg()).AndReturn({'event': []})
            manager._resolve_stack_id('teststack').AndReturn(
                'teststack/abcd1234')
            self.m.ReplayAll()
            manager.get(**fields)
示例#2
0
 def create(self, **kwargs):
     """Create a stack."""
     headers = self.client.credentials_headers()
     resp = self.client.post('/stacks',
                             data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return body
    def test_redirect_302_location(self):
        fake1 = fakes.FakeHTTPResponse(
            302,
            'OK',
            {'location': 'http://no.where/ishere'},
            ''
        )
        fake2 = fakes.FakeHTTPResponse(
            200,
            'OK',
            {'content-type': 'application/json'},
            jsonutils.dumps({'Mount': 'Fuji'})
        )
        self.request.side_effect = [
            (fake1, ''), (fake2, jsonutils.dumps({'Mount': 'Fuji'}))]

        client = http.SessionClient(session=mock.ANY,
                                    auth=mock.ANY,
                                    endpoint_override='http://no.where/')
        resp = client.request('', 'GET', redirect=True)

        self.assertEqual(200, resp.status_code)
        self.assertEqual({'Mount': 'Fuji'}, utils.get_response_body(resp))

        self.assertEqual(('', 'GET'), self.request.call_args_list[0][0])
        self.assertEqual(('ishere', 'GET'), self.request.call_args_list[1][0])
        for call in self.request.call_args_list:
            self.assertEqual({'user_agent': 'python-heatclient',
                              'raise_exc': False,
                              'redirect': True}, call[1])
示例#4
0
 def preview(self, **kwargs):
     """Preview a stack."""
     headers = self.client.credentials_headers()
     resp = self.client.post('/stacks/preview',
                             data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return Stack(self, body.get('stack'))
示例#5
0
 def create(self, **kwargs):
     """Create a stack."""
     headers = self.client.credentials_headers()
     resp = self.client.post('/stacks',
                             data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return body
示例#6
0
 def preview(self, **kwargs):
     """Preview a stack."""
     headers = self.client.credentials_headers()
     resp = self.client.post('/stacks/preview',
                             data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return Stack(self, body.get('stack'))
    def test_302_location_no_endpoint(self):
        fake1 = fakes.FakeHTTPResponse(
            302,
            'OK',
            {'location': 'http://no.where/ishere'},
            ''
        )
        fake2 = fakes.FakeHTTPResponse(
            200,
            'OK',
            {'content-type': 'application/json'},
            jsonutils.dumps({'Mount': 'Fuji'})
        )
        self.request.side_effect = [
            (fake1, ''), (fake2, jsonutils.dumps({'Mount': 'Fuji'}))]

        client = http.SessionClient(session=mock.ANY,
                                    auth=mock.ANY)
        resp = client.request('', 'GET', redirect=True)

        self.assertEqual(200, resp.status_code)
        self.assertEqual({'Mount': 'Fuji'}, utils.get_response_body(resp))

        self.assertEqual(('', 'GET'), self.request.call_args_list[0][0])
        self.assertEqual(('http://no.where/ishere',
                          'GET'), self.request.call_args_list[1][0])
        for call in self.request.call_args_list:
            self.assertEqual({'user_agent': 'python-heatclient',
                              'raise_exc': False,
                              'redirect': True}, call[1])
示例#8
0
 def output_show(self, stack_id, output_key):
     stack_identifier = self._resolve_stack_id(stack_id)
     resp = self.client.get('/stacks/%(id)s/outputs/%(key)s' % {
         'id': stack_identifier,
         'key': output_key
     })
     body = utils.get_response_body(resp)
     return body
示例#9
0
    def get(self, stack_id):
        """Get the metadata for a specific stack.

        :param stack_id: Stack ID to lookup
        """
        resp = self.client.get('/stacks/%s' % stack_id)
        body = utils.get_response_body(resp)
        return Stack(self, body.get('stack'))
示例#10
0
    def get(self, config_id):
        """Get the details for a specific software config.

        :param config_id: ID of the software config
        """
        resp = self.client.get('/software_configs/%s' % config_id)
        body = utils.get_response_body(resp)
        return SoftwareConfig(self, body.get('software_config'))
示例#11
0
    def get(self, config_id):
        """Get the details for a specific software config.

        :param config_id: ID of the software config
        """
        resp = self.client.get('/software_configs/%s' % config_id)
        body = utils.get_response_body(resp)
        return SoftwareConfig(self, body.get('software_config'))
示例#12
0
    def generate_template(self, resource_name):
        """Deprecated in favor of generate_template in ResourceTypeManager."""

        url_str = '/resource_types/%s/template' % (
                  parse.quote(encodeutils.safe_encode(resource_name)))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return body
示例#13
0
    def template(self, stack_id):
        """Get template content for a specific stack as a parsed JSON object.

        :param stack_id: Stack ID to get the template for
        """
        resp = self.client.get('/stacks/%s/template' % stack_id)
        body = utils.get_response_body(resp)
        return body
示例#14
0
    def generate_template(self, resource_name):
        """Deprecated in favor of generate_template in ResourceTypeManager."""

        url_str = '/resource_types/%s/template' % (
                  parse.quote(encodeutils.safe_encode(resource_name), ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return body
示例#15
0
    def template(self, stack_id):
        """Get template content for a specific stack as a parsed JSON object.

        :param stack_id: Stack ID to get the template for
        """
        resp = self.client.get('/stacks/%s/template' % stack_id)
        body = utils.get_response_body(resp)
        return body
示例#16
0
    def get(self, stack_id):
        """Get the metadata for a specific stack.

        :param stack_id: Stack ID to lookup
        """
        resp = self.client.get('/stacks/%s' % stack_id)
        body = utils.get_response_body(resp)
        return Stack(self, body.get('stack'))
示例#17
0
 def output_show(self, stack_id, output_key):
     stack_identifier = self._resolve_stack_id(stack_id)
     resp = self.client.get('/stacks/%(id)s/outputs/%(key)s' % {
         'id': stack_identifier,
         'key': output_key
     })
     body = utils.get_response_body(resp)
     return body
示例#18
0
 def preview_update(self, stack_id, **kwargs):
     """Preview a stack update."""
     s = self.get(stack_id)
     headers = self.client.credentials_headers()
     resp = self.client.put('/stacks/%s/%s/preview' % (s.stack_name, s.id),
                            data=kwargs,
                            headers=headers)
     body = utils.get_response_body(resp)
     return body
示例#19
0
    def get(self, deployment_id):
        """Get the details for a specific software deployment.

        :param deployment_id: ID of the software deployment
        """
        resp = self.client.get('/software_deployments/%s' % deployment_id)
        body = utils.get_response_body(resp)

        return SoftwareDeployment(self, body.get('software_deployment'))
    def get(self, deployment_id):
        """Get the details for a specific software deployment.

        :param deployment_id: ID of the software deployment
        """
        resp = self.client.get('/software_deployments/%s' % deployment_id)
        body = utils.get_response_body(resp)

        return SoftwareDeployment(self, body.get('software_deployment'))
示例#21
0
    def files(self, stack_id):
        """Returns the files for an existing stack.

        :param stack_id: identifies the stack
        :return:
        """
        resp = self.client.get('/stacks/%s/files' % stack_id)
        body = utils.get_response_body(resp)
        return body
示例#22
0
    def environment(self, stack_id):
        """Returns the environment for an existing stack.

        :param stack_id: identifies the stack
        :return:
        """
        resp = self.client.get('/stacks/%s/environment' % stack_id)
        body = utils.get_response_body(resp)
        return body
 def generate_template(self, resource_name):
     """DEPRECATED! Use `generate_template` of `ResourceTypeManager`
     instead.
     """
     url_str = '/resource_types/%s/template' % (parse.quote(
         encodeutils.safe_encode(resource_name), ''))
     resp = self.client.get(url_str)
     body = utils.get_response_body(resp)
     return body
示例#24
0
 def snapshot(self, stack_id, name=None):
     """Snapshot a stack."""
     stack = self.get(stack_id)
     data = {}
     if name:
         data["name"] = name
     resp = self.client.post("/stacks/%s/snapshots" % stack.identifier, data=data)
     body = utils.get_response_body(resp)
     return body
示例#25
0
 def generate_template(self, resource_name):
     """DEPRECATED! Use `generate_template` of `ResourceTypeManager`
     instead.
     """
     url_str = '/resource_types/%s/template' % (
               parse.quote(encodeutils.safe_encode(resource_name), ''))
     resp = self.client.get(url_str)
     body = utils.get_response_body(resp)
     return body
示例#26
0
    def abandon(self, stack_id):
        """Abandon a stack.

        :param stack_id: Stack name or ID to identifies the stack
        """
        stack_identifier = self._resolve_stack_id(stack_id)
        resp = self.client.delete('/stacks/%s/abandon' % stack_identifier)
        body = utils.get_response_body(resp)
        return body
示例#27
0
    def environment(self, stack_id):
        """Returns the environment for an existing stack.

        :param stack_id: Stack name or ID to identifies the stack
        :return:
        """
        resp = self.client.get('/stacks/%s/environment' % stack_id)
        body = utils.get_response_body(resp)
        return body
示例#28
0
 def generate_template(self, resource_type, template_type='cfn'):
     url_str = '/%s/%s/template' % (
         self.KEY, parse.quote(encodeutils.safe_encode(resource_type), ''))
     if template_type:
         url_str += '?%s' % parse.urlencode(
             {'template_type': template_type}, True)
     resp = self.client.get(url_str)
     body = utils.get_response_body(resp)
     return body
示例#29
0
    def metadata(self, server_id):
        """Get a collection of software deployment metadata for given server.

        :rtype: list of :class:`SoftwareDeployment`
        """
        url = '/software_deployments/metadata/%s' % parse.quote(server_id, '')
        resp = self.client.get(url)
        body = utils.get_response_body(resp)
        return body.get('metadata')
示例#30
0
 def preview_update(self, stack_id, **kwargs):
     """Preview a stack update."""
     s = self.get(stack_id)
     headers = self.client.credentials_headers()
     resp = self.client.put('/stacks/%s/%s/preview' %
                            (s.stack_name, s.id),
                            data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return body
示例#31
0
    def validate(self, **kwargs):
        """Validate a stack template."""
        url = '/validate'
        if kwargs.pop('show_nested', False):
            url += '?show_nested=True'

        resp = self.client.post(url, data=kwargs)
        body = utils.get_response_body(resp)
        return body
示例#32
0
    def files(self, stack_id):
        """Returns the files for an existing stack.

        :param stack_id: Stack name or ID to identifies the stack.
        :return:
        """
        resp = self.client.get('/stacks/%s/files' % stack_id)
        body = utils.get_response_body(resp)
        return body
 def generate_template(self, resource_type, template_type='cfn'):
     url_str = '/resource_types/%s/template' % (
               parse.quote(encodeutils.safe_encode(resource_type), ''))
     if template_type:
         url_str += '?%s' % parse.urlencode(
             {'template_type': template_type}, True)
     resp = self.client.get(url_str)
     body = utils.get_response_body(resp)
     return body
示例#34
0
    def export(self, stack_id):
        """Export data of a stack.

        :param stack_id: Stack name or ID to identifies the stack
        """
        stack_identifier = self._resolve_stack_id(stack_id)
        resp = self.client.get('/stacks/%s/export' % stack_identifier)
        body = utils.get_response_body(resp)
        return body
示例#35
0
    def validate(self, **kwargs):
        """Validate a stack template."""
        url = '/validate'
        if kwargs.pop('show_nested', False):
            url += '?show_nested=True'

        resp = self.client.post(url, data=kwargs)
        body = utils.get_response_body(resp)
        return body
    def metadata(self, server_id):
        """Get a collection of software deployment metadata for given server.

        :rtype: list of :class:`SoftwareDeployment`
        """
        url = '/software_deployments/metadata/%s' % parse.quote(
            server_id)
        resp = self.client.get(url)
        body = utils.get_response_body(resp)
        return body.get('metadata')
示例#37
0
 def snapshot(self, stack_id, name=None):
     """Snapshot a stack."""
     stack_identifier = self._resolve_stack_id(stack_id)
     data = {}
     if name:
         data['name'] = name
     resp = self.client.post('/stacks/%s/snapshots' % stack_identifier,
                             data=data)
     body = utils.get_response_body(resp)
     return body
示例#38
0
    def get(self, resource_type):
        """Get the details for a specific resource_type.

        :param resource_type: name of the resource type to get the details for
        """
        url_str = '/%s/%s' % (
            self.KEY, parse.quote(encodeutils.safe_encode(resource_type), ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return body
示例#39
0
 def snapshot(self, stack_id, name=None):
     """Snapshot a stack."""
     stack_identifier = self._resolve_stack_id(stack_id)
     data = {}
     if name:
         data['name'] = name
     resp = self.client.post('/stacks/%s/snapshots' % stack_identifier,
                             data=data)
     body = utils.get_response_body(resp)
     return body
    def get(self, resource_type):
        """Get the details for a specific resource_type.

        :param resource_type: name of the resource type to get the details for
        """
        url_str = '/resource_types/%s' % (
                  parse.quote(encodeutils.safe_encode(resource_type), ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return body
示例#41
0
    def json_request(self, method, url, **kwargs):
        kwargs.setdefault('headers', {})
        kwargs['headers'].setdefault('Content-Type', 'application/json')
        kwargs['headers'].setdefault('Accept', 'application/json')

        if 'data' in kwargs:
            kwargs['data'] = jsonutils.dumps(kwargs['data'])

        resp = self._http_request(url, method, **kwargs)
        body = utils.get_response_body(resp)
        return resp, body
示例#42
0
    def json_request(self, method, url, **kwargs):
        kwargs.setdefault('headers', {})
        kwargs['headers'].setdefault('Content-Type', 'application/json')
        kwargs['headers'].setdefault('Accept', 'application/json')

        if 'data' in kwargs:
            kwargs['data'] = jsonutils.dumps(kwargs['data'])

        resp = self._http_request(url, method, **kwargs)
        body = utils.get_response_body(resp)
        return resp, body
示例#43
0
    def _base_test(self, expect, key):
        class FakeAPI(object):
            """Fake API and ensure request url is correct."""
            def get(self, *args, **kwargs):
                assert ('GET', args[0]) == expect

            def json_request(self, *args, **kwargs):
                assert args == expect
                ret = key and {key: []} or {}
                return {}, {key: ret}

            def raw_request(self, *args, **kwargs):
                assert args == expect
                return {}

            def head(self, url, **kwargs):
                return self.json_request("HEAD", url, **kwargs)

            def post(self, url, **kwargs):
                return self.json_request("POST", url, **kwargs)

            def put(self, url, **kwargs):
                return self.json_request("PUT", url, **kwargs)

            def delete(self, url, **kwargs):
                return self.raw_request("DELETE", url, **kwargs)

            def patch(self, url, **kwargs):
                return self.json_request("PATCH", url, **kwargs)

        manager = resources.ResourceManager(FakeAPI())
        self.m.StubOutWithMock(manager, '_resolve_stack_id')
        self.m.StubOutWithMock(utils, 'get_response_body')
        utils.get_response_body(mox.IgnoreArg()).AndReturn(
            {key: key and {
                key: []
            } or {}})
        manager._resolve_stack_id('teststack').AndReturn('teststack/abcd1234')
        self.m.ReplayAll()

        return manager
    def _base_test(self, expect, key):

        class FakeAPI(object):
            """Fake API and ensure request url is correct."""

            def get(self, *args, **kwargs):
                assert ('GET', args[0]) == expect

            def json_request(self, *args, **kwargs):
                assert args == expect
                ret = key and {key: []} or {}
                return {}, {key: ret}

            def raw_request(self, *args, **kwargs):
                assert args == expect
                return {}

            def head(self, url, **kwargs):
                return self.json_request("HEAD", url, **kwargs)

            def post(self, url, **kwargs):
                return self.json_request("POST", url, **kwargs)

            def put(self, url, **kwargs):
                return self.json_request("PUT", url, **kwargs)

            def delete(self, url, **kwargs):
                return self.raw_request("DELETE", url, **kwargs)

            def patch(self, url, **kwargs):
                return self.json_request("PATCH", url, **kwargs)

        manager = resources.ResourceManager(FakeAPI())
        self.m.StubOutWithMock(manager, '_resolve_stack_id')
        self.m.StubOutWithMock(utils, 'get_response_body')
        utils.get_response_body(mox.IgnoreArg()).AndReturn(
            {key: key and {key: []} or {}})
        manager._resolve_stack_id('teststack').AndReturn('teststack/abcd1234')
        self.m.ReplayAll()

        return manager
示例#45
0
    def metadata(self, stack_id, resource_name):
        """Get the metadata for a specific resource.

        :param stack_id: ID or name of stack containing the resource
        :param resource_name: ID of resource to get metadata for
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s/metadata' % (parse.quote(
            stack_id), parse.quote(encodeutils.safe_encode(resource_name)))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return body.get('metadata')
示例#46
0
    def signal(self, stack_id, resource_name, data=None):
        """Signal a specific resource.

        :param stack_id: ID or name of stack containing the resource
        :param resource_name: ID of resource to send signal to
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s/signal' % (parse.quote(
            stack_id), parse.quote(encodeutils.safe_encode(resource_name)))
        resp = self.client.post(url_str, data=data)
        body = utils.get_response_body(resp)
        return body
示例#47
0
    def get(self, resource_type, with_description=False):
        """Get the details for a specific resource_type.

        :param resource_type: name of the resource type to get the details for
        :param with_description: return result with description or not
        """
        url_str = '/%s/%s' % (
            self.KEY, parse.quote(encodeutils.safe_encode(resource_type)))
        resp = self.client.get(url_str,
                               params={'with_description': with_description})
        body = utils.get_response_body(resp)
        return body
示例#48
0
 def preview_update(self, stack_id, **kwargs):
     """Preview a stack update."""
     stack_identifier = self._resolve_stack_id(stack_id)
     headers = self.client.credentials_headers()
     path = '/stacks/%s/preview' % stack_identifier
     if kwargs.pop('show_nested', False):
         path += '?show_nested=True'
     if kwargs.pop('existing', None):
         resp = self.client.patch(path, data=kwargs, headers=headers)
     else:
         resp = self.client.put(path, data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return body
示例#49
0
    def get(self, stack_id, resource_name):
        """Get the details for a specific resource.

        :param stack_id: ID of stack containing the resource
        :param resource_name: ID of resource to get the details for
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s' % (
                  parse.quote(stack_id, ''),
                  parse.quote(encodeutils.safe_encode(resource_name), ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return Resource(self, body.get('resource'))
    def get(self, stack_id, resource_name):
        """Get the details for a specific resource.

        :param stack_id: ID of stack containing the resource
        :param resource_name: ID of resource to get the details for
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s' % (parse.quote(
            stack_id,
            ''), parse.quote(encodeutils.safe_encode(resource_name), ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return Resource(self, body.get('resource'))
示例#51
0
    def get(self, stack_id, resolve_outputs=True):
        """Get the metadata for a specific stack.

        :param stack_id: Stack ID to lookup
        :param resolve_outputs: If True, then outputs for this
               stack will be resolved
        """
        kwargs = {}
        if not resolve_outputs:
            kwargs['params'] = {"resolve_outputs": False}
        resp = self.client.get('/stacks/%s' % stack_id, **kwargs)
        body = utils.get_response_body(resp)
        return Stack(self, body.get('stack'), loaded=True)
示例#52
0
    def metadata(self, stack_id, resource_name):
        """Get the metadata for a specific resource.

        :param stack_id: ID of stack containing the resource
        :param resource_name: ID of resource to get metadata for
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s/metadata' % (
                  parse.quote(stack_id),
                  parse.quote(encodeutils.safe_encode(resource_name)))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return body.get('metadata')
示例#53
0
    def signal(self, stack_id, resource_name, data=None):
        """Signal a specific resource.

        :param stack_id: ID of stack containing the resource
        :param resource_name: ID of resource to send signal to
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s/signal' % (
                  parse.quote(stack_id),
                  parse.quote(encodeutils.safe_encode(resource_name)))
        resp = self.client.post(url_str, data=data)
        body = utils.get_response_body(resp)
        return body
示例#54
0
    def get(self, resource_type, with_description=False):
        """Get the details for a specific resource_type.

        :param resource_type: name of the resource type to get the details for
        :param with_description: return result with description or not
        """
        url_str = '/%s/%s' % (
                  self.KEY,
                  parse.quote(encodeutils.safe_encode(resource_type), ''))
        resp = self.client.get(url_str,
                               params={'with_description': with_description})
        body = utils.get_response_body(resp)
        return body
示例#55
0
 def preview_update(self, stack_id, **kwargs):
     """Preview a stack update."""
     stack_identifier = self._resolve_stack_id(stack_id)
     headers = self.client.credentials_headers()
     path = '/stacks/%s/preview' % stack_identifier
     if kwargs.pop('show_nested', False):
         path += '?show_nested=True'
     if kwargs.pop('existing', None):
         resp = self.client.patch(path, data=kwargs, headers=headers)
     else:
         resp = self.client.put(path, data=kwargs, headers=headers)
     body = utils.get_response_body(resp)
     return body
示例#56
0
    def get(self, stack_id, resolve_outputs=True):
        """Get the metadata for a specific stack.

        :param stack_id: Stack ID to lookup
        :param resolve_outputs: If True, then outputs for this
               stack will be resolved
        """
        kwargs = {}
        if not resolve_outputs:
            kwargs['params'] = {"resolve_outputs": False}
        resp = self.client.get('/stacks/%s' % stack_id, **kwargs)
        body = utils.get_response_body(resp)
        return Stack(self, body.get('stack'))
示例#57
0
    def get(self, stack_id, resource_name, event_id):
        """Get the details for a specific event.

        :param stack_id: ID of stack containing the event
        :param resource_name: ID of resource the event belongs to
        :param event_id: ID of event to get the details for
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s/events/%s' % (
                  parse.quote(stack_id),
                  parse.quote(encodeutils.safe_encode(resource_name)),
                  parse.quote(event_id, ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return Event(self, body.get('event'))
    def test_generate_template(self):
        fields = {'resource_name': 'testresource'}
        expect = ('GET', '/resource_types/testresource/template')
        key = None

        class FakeAPI(object):
            """Fake API and ensure request url is correct."""

            def get(self, *args, **kwargs):
                assert ('GET', args[0]) == expect

            def json_request(self, *args, **kwargs):
                assert args == expect
                ret = key and {key: []} or {}
                return {}, {key: ret}

        manager = resources.ResourceManager(FakeAPI())
        self.m.StubOutWithMock(utils, 'get_response_body')
        utils.get_response_body(mox.IgnoreArg()).AndReturn(
            {key: key and {key: []} or {}})
        self.m.ReplayAll()

        manager.generate_template(**fields)
        self.m.VerifyAll()
    def test_generate_template(self):
        fields = {'resource_name': 'testresource'}
        expect = ('GET', '/resource_types/testresource/template')
        key = None

        class FakeAPI(object):
            """Fake API and ensure request url is correct."""

            def get(self, *args, **kwargs):
                assert ('GET', args[0]) == expect

            def json_request(self, *args, **kwargs):
                assert args == expect
                ret = key and {key: []} or {}
                return {}, {key: ret}

        manager = resources.ResourceManager(FakeAPI())
        self.m.StubOutWithMock(utils, 'get_response_body')
        utils.get_response_body(mox.IgnoreArg()).AndReturn(
            {key: key and {key: []} or {}})
        self.m.ReplayAll()

        manager.generate_template(**fields)
        self.m.VerifyAll()
示例#60
0
    def get(self, stack_id, resource_name, event_id):
        """Get the details for a specific event.

        :param stack_id: ID of stack containing the event
        :param resource_name: ID of resource the event belongs to
        :param event_id: ID of event to get the details for
        """
        stack_id = self._resolve_stack_id(stack_id)
        url_str = '/stacks/%s/resources/%s/events/%s' % (parse.quote(
            stack_id,
            ''), parse.quote(encodeutils.safe_encode(resource_name),
                             ''), parse.quote(event_id, ''))
        resp = self.client.get(url_str)
        body = utils.get_response_body(resp)
        return Event(self, body.get('event'))