blob: 5f6c32af52b608d0a33329e0b53ce26976f6ac1c [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
Ken'ichi Ohmichib3b75682015-01-22 05:05:29 +000017import uuid
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050018
Matthew Treinish89128142015-04-23 10:44:30 -040019from six.moves.urllib import parse as urllib
20
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -030021from tempest.api_schema.response.messaging.v1 import queues as queues_schema
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000022from tempest.common import service_client
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050023
24
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000025class MessagingClientJSON(service_client.ServiceClient):
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050026
Ken'ichi Ohmichi2183a652015-01-22 05:00:20 +000027 def __init__(self, auth_provider, service, region,
28 endpoint_type=None, build_interval=None, build_timeout=None,
29 disable_ssl_certificate_validation=None, ca_certs=None,
30 trace_requests=None):
31 dscv = disable_ssl_certificate_validation
Ken'ichi Ohmichie9f50412015-01-05 04:57:26 +000032 super(MessagingClientJSON, self).__init__(
Ken'ichi Ohmichi2183a652015-01-22 05:00:20 +000033 auth_provider, service, region,
34 endpoint_type=endpoint_type,
35 build_interval=build_interval,
36 build_timeout=build_timeout,
37 disable_ssl_certificate_validation=dscv,
38 ca_certs=ca_certs,
39 trace_requests=trace_requests)
40
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050041 self.version = '1'
42 self.uri_prefix = 'v{0}'.format(self.version)
43
Ken'ichi Ohmichib3b75682015-01-22 05:05:29 +000044 client_id = uuid.uuid4().hex
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040045 self.headers = {'Client-ID': client_id}
46
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050047 def list_queues(self):
48 uri = '{0}/queues'.format(self.uri_prefix)
49 resp, body = self.get(uri)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040050
51 if resp['status'] != '204':
52 body = json.loads(body)
53 self.validate_response(queues_schema.list_queues, resp, body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010054 return resp, body
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050055
56 def create_queue(self, queue_name):
57 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
58 resp, body = self.put(uri, body=None)
ghanshyam625b7f72014-10-03 15:34:24 +090059 self.expected_success(201, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010060 return resp, body
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050061
Ken'ichi Ohmichi7e3ccd52015-04-06 23:55:46 +000062 def show_queue(self, queue_name):
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050063 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
64 resp, body = self.get(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090065 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010066 return resp, body
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050067
68 def head_queue(self, queue_name):
69 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
70 resp, body = self.head(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090071 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010072 return resp, body
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050073
74 def delete_queue(self, queue_name):
75 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
ghanshyam625b7f72014-10-03 15:34:24 +090076 resp, body = self.delete(uri)
77 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010078 return resp, body
Jorge Chai83ba4ee2014-04-15 18:58:08 +000079
Ken'ichi Ohmichi7e3ccd52015-04-06 23:55:46 +000080 def show_queue_stats(self, queue_name):
Jorge Chai83ba4ee2014-04-15 18:58:08 +000081 uri = '{0}/queues/{1}/stats'.format(self.uri_prefix, queue_name)
82 resp, body = self.get(uri)
83 body = json.loads(body)
84 self.validate_response(queues_schema.queue_stats, resp, body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010085 return resp, body
Jorge Chai83ba4ee2014-04-15 18:58:08 +000086
Ken'ichi Ohmichi7e3ccd52015-04-06 23:55:46 +000087 def show_queue_metadata(self, queue_name):
Jorge Chai83ba4ee2014-04-15 18:58:08 +000088 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
89 resp, body = self.get(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090090 self.expected_success(200, resp.status)
Jorge Chai83ba4ee2014-04-15 18:58:08 +000091 body = json.loads(body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010092 return resp, body
Jorge Chai83ba4ee2014-04-15 18:58:08 +000093
94 def set_queue_metadata(self, queue_name, rbody):
95 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
96 resp, body = self.put(uri, body=json.dumps(rbody))
ghanshyam625b7f72014-10-03 15:34:24 +090097 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +010098 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040099
100 def post_messages(self, queue_name, rbody):
101 uri = '{0}/queues/{1}/messages'.format(self.uri_prefix, queue_name)
102 resp, body = self.post(uri, body=json.dumps(rbody),
103 extra_headers=True,
104 headers=self.headers)
105
106 body = json.loads(body)
ghanshyam625b7f72014-10-03 15:34:24 +0900107 self.validate_response(queues_schema.post_messages, resp, body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100108 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400109
110 def list_messages(self, queue_name):
111 uri = '{0}/queues/{1}/messages?echo=True'.format(self.uri_prefix,
112 queue_name)
113 resp, body = self.get(uri, extra_headers=True, headers=self.headers)
114
115 if resp['status'] != '204':
116 body = json.loads(body)
117 self.validate_response(queues_schema.list_messages, resp, body)
118
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100119 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400120
Ken'ichi Ohmichi7e3ccd52015-04-06 23:55:46 +0000121 def show_single_message(self, message_uri):
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400122 resp, body = self.get(message_uri, extra_headers=True,
123 headers=self.headers)
124 if resp['status'] != '204':
125 body = json.loads(body)
126 self.validate_response(queues_schema.get_single_message, resp,
127 body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100128 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400129
Ken'ichi Ohmichi7e3ccd52015-04-06 23:55:46 +0000130 def show_multiple_messages(self, message_uri):
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400131 resp, body = self.get(message_uri, extra_headers=True,
132 headers=self.headers)
133
134 if resp['status'] != '204':
135 body = json.loads(body)
136 self.validate_response(queues_schema.get_multiple_messages,
137 resp,
138 body)
139
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100140 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400141
142 def delete_messages(self, message_uri):
143 resp, body = self.delete(message_uri)
ghanshyam625b7f72014-10-03 15:34:24 +0900144 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100145 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400146
147 def post_claims(self, queue_name, rbody, url_params=False):
148 uri = '{0}/queues/{1}/claims'.format(self.uri_prefix, queue_name)
149 if url_params:
150 uri += '?%s' % urllib.urlencode(url_params)
151
152 resp, body = self.post(uri, body=json.dumps(rbody),
153 extra_headers=True,
154 headers=self.headers)
155
156 body = json.loads(body)
157 self.validate_response(queues_schema.claim_messages, resp, body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100158 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400159
160 def query_claim(self, claim_uri):
161 resp, body = self.get(claim_uri)
162
163 if resp['status'] != '204':
164 body = json.loads(body)
165 self.validate_response(queues_schema.query_claim, resp, body)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100166 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400167
168 def update_claim(self, claim_uri, rbody):
169 resp, body = self.patch(claim_uri, body=json.dumps(rbody))
ghanshyam625b7f72014-10-03 15:34:24 +0900170 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100171 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400172
173 def release_claim(self, claim_uri):
174 resp, body = self.delete(claim_uri)
ghanshyam625b7f72014-10-03 15:34:24 +0900175 self.expected_success(204, resp.status)
Flavio Percoco5ee9f2f2015-02-25 08:36:09 +0100176 return resp, body