blob: 3e82399088f425e1f8be0fd329e489b2339453b7 [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)
51 return resp, body
52
53 def get_queue(self, queue_name):
54 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
55 resp, body = self.get(uri)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050056 return resp, body
57
58 def head_queue(self, queue_name):
59 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
60 resp, body = self.head(uri)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050061 return resp, body
62
63 def delete_queue(self, queue_name):
64 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
65 resp = self.delete(uri)
66 return resp
Jorge Chai83ba4ee2014-04-15 18:58:08 +000067
68 def get_queue_stats(self, queue_name):
69 uri = '{0}/queues/{1}/stats'.format(self.uri_prefix, queue_name)
70 resp, body = self.get(uri)
71 body = json.loads(body)
72 self.validate_response(queues_schema.queue_stats, resp, body)
73 return resp, body
74
75 def get_queue_metadata(self, queue_name):
76 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
77 resp, body = self.get(uri)
78 body = json.loads(body)
79 return resp, body
80
81 def set_queue_metadata(self, queue_name, rbody):
82 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
83 resp, body = self.put(uri, body=json.dumps(rbody))
84 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040085
86 def post_messages(self, queue_name, rbody):
87 uri = '{0}/queues/{1}/messages'.format(self.uri_prefix, queue_name)
88 resp, body = self.post(uri, body=json.dumps(rbody),
89 extra_headers=True,
90 headers=self.headers)
91
92 body = json.loads(body)
93 return resp, body
94
95 def list_messages(self, queue_name):
96 uri = '{0}/queues/{1}/messages?echo=True'.format(self.uri_prefix,
97 queue_name)
98 resp, body = self.get(uri, extra_headers=True, headers=self.headers)
99
100 if resp['status'] != '204':
101 body = json.loads(body)
102 self.validate_response(queues_schema.list_messages, resp, body)
103
104 return resp, body
105
106 def get_single_message(self, message_uri):
107 resp, body = self.get(message_uri, extra_headers=True,
108 headers=self.headers)
109 if resp['status'] != '204':
110 body = json.loads(body)
111 self.validate_response(queues_schema.get_single_message, resp,
112 body)
113 return resp, body
114
115 def get_multiple_messages(self, message_uri):
116 resp, body = self.get(message_uri, extra_headers=True,
117 headers=self.headers)
118
119 if resp['status'] != '204':
120 body = json.loads(body)
121 self.validate_response(queues_schema.get_multiple_messages,
122 resp,
123 body)
124
125 return resp, body
126
127 def delete_messages(self, message_uri):
128 resp, body = self.delete(message_uri)
129 assert(resp['status'] == '204')
130 return resp, body
131
132 def post_claims(self, queue_name, rbody, url_params=False):
133 uri = '{0}/queues/{1}/claims'.format(self.uri_prefix, queue_name)
134 if url_params:
135 uri += '?%s' % urllib.urlencode(url_params)
136
137 resp, body = self.post(uri, body=json.dumps(rbody),
138 extra_headers=True,
139 headers=self.headers)
140
141 body = json.loads(body)
142 self.validate_response(queues_schema.claim_messages, resp, body)
143 return resp, body
144
145 def query_claim(self, claim_uri):
146 resp, body = self.get(claim_uri)
147
148 if resp['status'] != '204':
149 body = json.loads(body)
150 self.validate_response(queues_schema.query_claim, resp, body)
151 return resp, body
152
153 def update_claim(self, claim_uri, rbody):
154 resp, body = self.patch(claim_uri, body=json.dumps(rbody))
155 assert(resp['status'] == '204')
156 return resp, body
157
158 def release_claim(self, claim_uri):
159 resp, body = self.delete(claim_uri)
160 assert(resp['status'] == '204')
161 return resp, body