blob: c4c9f09c114bb4359c36f8630b28dec3817b43b2 [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
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000020from tempest.common import service_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
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000028class MessagingClientJSON(service_client.ServiceClient):
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050029
30 def __init__(self, auth_provider):
Ken'ichi Ohmichie9f50412015-01-05 04:57:26 +000031 super(MessagingClientJSON, self).__init__(
32 auth_provider,
33 CONF.messaging.catalog_type,
34 CONF.identity.region)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050035 self.version = '1'
36 self.uri_prefix = 'v{0}'.format(self.version)
37
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040038 client_id = data_utils.rand_uuid_hex()
39 self.headers = {'Client-ID': client_id}
40
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050041 def list_queues(self):
42 uri = '{0}/queues'.format(self.uri_prefix)
43 resp, body = self.get(uri)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040044
45 if resp['status'] != '204':
46 body = json.loads(body)
47 self.validate_response(queues_schema.list_queues, resp, body)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050048 return resp, body
49
50 def create_queue(self, queue_name):
51 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
52 resp, body = self.put(uri, body=None)
ghanshyam625b7f72014-10-03 15:34:24 +090053 self.expected_success(201, resp.status)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050054 return resp, body
55
56 def get_queue(self, queue_name):
57 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
58 resp, body = self.get(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090059 self.expected_success(204, resp.status)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050060 return resp, body
61
62 def head_queue(self, queue_name):
63 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
64 resp, body = self.head(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090065 self.expected_success(204, resp.status)
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -050066 return resp, body
67
68 def delete_queue(self, queue_name):
69 uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
ghanshyam625b7f72014-10-03 15:34:24 +090070 resp, body = self.delete(uri)
71 self.expected_success(204, resp.status)
72 return resp, body
Jorge Chai83ba4ee2014-04-15 18:58:08 +000073
74 def get_queue_stats(self, queue_name):
75 uri = '{0}/queues/{1}/stats'.format(self.uri_prefix, queue_name)
76 resp, body = self.get(uri)
77 body = json.loads(body)
78 self.validate_response(queues_schema.queue_stats, resp, body)
79 return resp, body
80
81 def get_queue_metadata(self, queue_name):
82 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
83 resp, body = self.get(uri)
ghanshyam625b7f72014-10-03 15:34:24 +090084 self.expected_success(200, resp.status)
Jorge Chai83ba4ee2014-04-15 18:58:08 +000085 body = json.loads(body)
86 return resp, body
87
88 def set_queue_metadata(self, queue_name, rbody):
89 uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
90 resp, body = self.put(uri, body=json.dumps(rbody))
ghanshyam625b7f72014-10-03 15:34:24 +090091 self.expected_success(204, resp.status)
Jorge Chai83ba4ee2014-04-15 18:58:08 +000092 return resp, body
Malini Kamalambal7458b4b2014-05-29 11:47:28 -040093
94 def post_messages(self, queue_name, rbody):
95 uri = '{0}/queues/{1}/messages'.format(self.uri_prefix, queue_name)
96 resp, body = self.post(uri, body=json.dumps(rbody),
97 extra_headers=True,
98 headers=self.headers)
99
100 body = json.loads(body)
ghanshyam625b7f72014-10-03 15:34:24 +0900101 self.validate_response(queues_schema.post_messages, resp, body)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400102 return resp, body
103
104 def list_messages(self, queue_name):
105 uri = '{0}/queues/{1}/messages?echo=True'.format(self.uri_prefix,
106 queue_name)
107 resp, body = self.get(uri, extra_headers=True, headers=self.headers)
108
109 if resp['status'] != '204':
110 body = json.loads(body)
111 self.validate_response(queues_schema.list_messages, resp, body)
112
113 return resp, body
114
115 def get_single_message(self, message_uri):
116 resp, body = self.get(message_uri, extra_headers=True,
117 headers=self.headers)
118 if resp['status'] != '204':
119 body = json.loads(body)
120 self.validate_response(queues_schema.get_single_message, resp,
121 body)
122 return resp, body
123
124 def get_multiple_messages(self, message_uri):
125 resp, body = self.get(message_uri, extra_headers=True,
126 headers=self.headers)
127
128 if resp['status'] != '204':
129 body = json.loads(body)
130 self.validate_response(queues_schema.get_multiple_messages,
131 resp,
132 body)
133
134 return resp, body
135
136 def delete_messages(self, message_uri):
137 resp, body = self.delete(message_uri)
ghanshyam625b7f72014-10-03 15:34:24 +0900138 self.expected_success(204, resp.status)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400139 return resp, body
140
141 def post_claims(self, queue_name, rbody, url_params=False):
142 uri = '{0}/queues/{1}/claims'.format(self.uri_prefix, queue_name)
143 if url_params:
144 uri += '?%s' % urllib.urlencode(url_params)
145
146 resp, body = self.post(uri, body=json.dumps(rbody),
147 extra_headers=True,
148 headers=self.headers)
149
150 body = json.loads(body)
151 self.validate_response(queues_schema.claim_messages, resp, body)
152 return resp, body
153
154 def query_claim(self, claim_uri):
155 resp, body = self.get(claim_uri)
156
157 if resp['status'] != '204':
158 body = json.loads(body)
159 self.validate_response(queues_schema.query_claim, resp, body)
160 return resp, body
161
162 def update_claim(self, claim_uri, rbody):
163 resp, body = self.patch(claim_uri, body=json.dumps(rbody))
ghanshyam625b7f72014-10-03 15:34:24 +0900164 self.expected_success(204, resp.status)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400165 return resp, body
166
167 def release_claim(self, claim_uri):
168 resp, body = self.delete(claim_uri)
ghanshyam625b7f72014-10-03 15:34:24 +0900169 self.expected_success(204, resp.status)
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400170 return resp, body