blob: 2794ea9d8c6a257fe3b9fd2ede3893c1347a5d91 [file] [log] [blame]
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -05001# Copyright (c) 2014 Rackspace, Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12# implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16import json
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040017import urllib
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050018
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -030019from tempest.api_schema.response.messaging.v1 import queues as queues_schema
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050020from tempest.common import rest_client
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040021from tempest.common.utils import data_utils
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050022from tempest import config
23
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040024
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050025CONF = config.CONF
26
27
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -030028class MessagingClientJSON(rest_client.RestClient):
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050029
30 def __init__(self, auth_provider):
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -030031 super(MessagingClientJSON, self).__init__(auth_provider)
32 self.service = CONF.messaging.catalog_type
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050033 self.version = '1'
34 self.uri_prefix = 'v{0}'.format(self.version)
35
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040036 client_id = data_utils.rand_uuid_hex()
37 self.headers = {'Client-ID': client_id}
38
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050039 def list_queues(self):
40 uri = '{0}/queues'.format(self.uri_prefix)
41 resp, body = self.get(uri)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040042
43 if resp['status'] != '204':
44 body = json.loads(body)
45 self.validate_response(queues_schema.list_queues, resp, body)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050046 return resp, body
47
48 def create_queue(self, queue_name):
49 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
50 resp, body = self.put(uri, body=None)
ghanshyam625b7f72014-10-03 15:34:24 +090051 self.expected_success(201, resp.status)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050052 return resp, body
53
54 def get_queue(self, queue_name):
55 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
56 resp, body = self.get(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090057 self.expected_success(204, resp.status)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050058 return resp, body
59
60 def head_queue(self, queue_name):
61 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
62 resp, body = self.head(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090063 self.expected_success(204, resp.status)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050064 return resp, body
65
66 def delete_queue(self, queue_name):
67 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
ghanshyam625b7f72014-10-03 15:34:24 +090068 resp, body = self.delete(uri)
69 self.expected_success(204, resp.status)
70 return resp, body
Jorge Chai83ba4ee2014-04-15 18:58:08 +000071
72 def get_queue_stats(self, queue_name):
73 uri = '{0}/queues/{1}/stats'.format(self.uri_prefix, queue_name)
74 resp, body = self.get(uri)
75 body = json.loads(body)
76 self.validate_response(queues_schema.queue_stats, resp, body)
77 return resp, body
78
79 def get_queue_metadata(self, queue_name):
80 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
81 resp, body = self.get(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090082 self.expected_success(200, resp.status)
Jorge Chai83ba4ee2014-04-15 18:58:08 +000083 body = json.loads(body)
84 return resp, body
85
86 def set_queue_metadata(self, queue_name, rbody):
87 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
88 resp, body = self.put(uri, body=json.dumps(rbody))
ghanshyam625b7f72014-10-03 15:34:24 +090089 self.expected_success(204, resp.status)
Jorge Chai83ba4ee2014-04-15 18:58:08 +000090 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040091
92 def post_messages(self, queue_name, rbody):
93 uri = '{0}/queues/{1}/messages'.format(self.uri_prefix, queue_name)
94 resp, body = self.post(uri, body=json.dumps(rbody),
95 extra_headers=True,
96 headers=self.headers)
97
98 body = json.loads(body)
ghanshyam625b7f72014-10-03 15:34:24 +090099 self.validate_response(queues_schema.post_messages, resp, body)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400100 return resp, body
101
102 def list_messages(self, queue_name):
103 uri = '{0}/queues/{1}/messages?echo=True'.format(self.uri_prefix,
104 queue_name)
105 resp, body = self.get(uri, extra_headers=True, headers=self.headers)
106
107 if resp['status'] != '204':
108 body = json.loads(body)
109 self.validate_response(queues_schema.list_messages, resp, body)
110
111 return resp, body
112
113 def get_single_message(self, message_uri):
114 resp, body = self.get(message_uri, extra_headers=True,
115 headers=self.headers)
116 if resp['status'] != '204':
117 body = json.loads(body)
118 self.validate_response(queues_schema.get_single_message, resp,
119 body)
120 return resp, body
121
122 def get_multiple_messages(self, message_uri):
123 resp, body = self.get(message_uri, extra_headers=True,
124 headers=self.headers)
125
126 if resp['status'] != '204':
127 body = json.loads(body)
128 self.validate_response(queues_schema.get_multiple_messages,
129 resp,
130 body)
131
132 return resp, body
133
134 def delete_messages(self, message_uri):
135 resp, body = self.delete(message_uri)
ghanshyam625b7f72014-10-03 15:34:24 +0900136 self.expected_success(204, resp.status)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400137 return resp, body
138
139 def post_claims(self, queue_name, rbody, url_params=False):
140 uri = '{0}/queues/{1}/claims'.format(self.uri_prefix, queue_name)
141 if url_params:
142 uri += '?%s' % urllib.urlencode(url_params)
143
144 resp, body = self.post(uri, body=json.dumps(rbody),
145 extra_headers=True,
146 headers=self.headers)
147
148 body = json.loads(body)
149 self.validate_response(queues_schema.claim_messages, resp, body)
150 return resp, body
151
152 def query_claim(self, claim_uri):
153 resp, body = self.get(claim_uri)
154
155 if resp['status'] != '204':
156 body = json.loads(body)
157 self.validate_response(queues_schema.query_claim, resp, body)
158 return resp, body
159
160 def update_claim(self, claim_uri, rbody):
161 resp, body = self.patch(claim_uri, body=json.dumps(rbody))
ghanshyam625b7f72014-10-03 15:34:24 +0900162 self.expected_success(204, resp.status)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400163 return resp, body
164
165 def release_claim(self, claim_uri):
166 resp, body = self.delete(claim_uri)
ghanshyam625b7f72014-10-03 15:34:24 +0900167 self.expected_success(204, resp.status)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400168 return resp, body