Merge pull request #1252 from JackDanger/jack/implement-sqs-queuedoesnotexist-error
implement SQS QueueDoesNotExist error
This commit is contained in:
		
						commit
						aa46795ade
					
				| @ -16,3 +16,8 @@ class MessageAttributesInvalid(Exception): | |||||||
| 
 | 
 | ||||||
|     def __init__(self, description): |     def __init__(self, description): | ||||||
|         self.description = description |         self.description = description | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class QueueDoesNotExist(Exception): | ||||||
|  |     status_code = 404 | ||||||
|  |     description = "The specified queue does not exist for this wsdl version." | ||||||
|  | |||||||
| @ -12,7 +12,12 @@ import boto.sqs | |||||||
| from moto.core import BaseBackend, BaseModel | from moto.core import BaseBackend, BaseModel | ||||||
| from moto.core.utils import camelcase_to_underscores, get_random_message_id, unix_time, unix_time_millis | from moto.core.utils import camelcase_to_underscores, get_random_message_id, unix_time, unix_time_millis | ||||||
| from .utils import generate_receipt_handle | from .utils import generate_receipt_handle | ||||||
| from .exceptions import ReceiptHandleIsInvalid, MessageNotInflight, MessageAttributesInvalid | from .exceptions import ( | ||||||
|  |     MessageAttributesInvalid, | ||||||
|  |     MessageNotInflight, | ||||||
|  |     QueueDoesNotExist, | ||||||
|  |     ReceiptHandleIsInvalid, | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| DEFAULT_ACCOUNT_ID = 123456789012 | DEFAULT_ACCOUNT_ID = 123456789012 | ||||||
| DEFAULT_SENDER_ID = "AIDAIT2UOQQY3AUEKVGXU" | DEFAULT_SENDER_ID = "AIDAIT2UOQQY3AUEKVGXU" | ||||||
| @ -304,7 +309,10 @@ class SQSBackend(BaseBackend): | |||||||
|         return qs |         return qs | ||||||
| 
 | 
 | ||||||
|     def get_queue(self, queue_name): |     def get_queue(self, queue_name): | ||||||
|         return self.queues.get(queue_name, None) |         queue = self.queues.get(queue_name) | ||||||
|  |         if queue is None: | ||||||
|  |             raise QueueDoesNotExist() | ||||||
|  |         return queue | ||||||
| 
 | 
 | ||||||
|     def delete_queue(self, queue_name): |     def delete_queue(self, queue_name): | ||||||
|         if queue_name in self.queues: |         if queue_name in self.queues: | ||||||
|  | |||||||
| @ -8,7 +8,8 @@ from .models import sqs_backends | |||||||
| from .exceptions import ( | from .exceptions import ( | ||||||
|     MessageAttributesInvalid, |     MessageAttributesInvalid, | ||||||
|     MessageNotInflight, |     MessageNotInflight, | ||||||
|     ReceiptHandleIsInvalid |     QueueDoesNotExist, | ||||||
|  |     ReceiptHandleIsInvalid, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| MAXIMUM_VISIBILTY_TIMEOUT = 43200 | MAXIMUM_VISIBILTY_TIMEOUT = 43200 | ||||||
| @ -76,7 +77,12 @@ class SQSResponse(BaseResponse): | |||||||
|     def get_queue_url(self): |     def get_queue_url(self): | ||||||
|         request_url = urlparse(self.uri) |         request_url = urlparse(self.uri) | ||||||
|         queue_name = self._get_param("QueueName") |         queue_name = self._get_param("QueueName") | ||||||
|  | 
 | ||||||
|  |         try: | ||||||
|             queue = self.sqs_backend.get_queue(queue_name) |             queue = self.sqs_backend.get_queue(queue_name) | ||||||
|  |         except QueueDoesNotExist as e: | ||||||
|  |             return self._error('QueueDoesNotExist', e.description) | ||||||
|  | 
 | ||||||
|         if queue: |         if queue: | ||||||
|             template = self.response_template(GET_QUEUE_URL_RESPONSE) |             template = self.response_template(GET_QUEUE_URL_RESPONSE) | ||||||
|             return template.render(queue=queue, request_url=request_url) |             return template.render(queue=queue, request_url=request_url) | ||||||
| @ -113,7 +119,11 @@ class SQSResponse(BaseResponse): | |||||||
| 
 | 
 | ||||||
|     def get_queue_attributes(self): |     def get_queue_attributes(self): | ||||||
|         queue_name = self._get_queue_name() |         queue_name = self._get_queue_name() | ||||||
|  |         try: | ||||||
|             queue = self.sqs_backend.get_queue(queue_name) |             queue = self.sqs_backend.get_queue(queue_name) | ||||||
|  |         except QueueDoesNotExist as e: | ||||||
|  |             return self._error('QueueDoesNotExist', e.description) | ||||||
|  | 
 | ||||||
|         template = self.response_template(GET_QUEUE_ATTRIBUTES_RESPONSE) |         template = self.response_template(GET_QUEUE_ATTRIBUTES_RESPONSE) | ||||||
|         return template.render(queue=queue) |         return template.render(queue=queue) | ||||||
| 
 | 
 | ||||||
| @ -250,7 +260,11 @@ class SQSResponse(BaseResponse): | |||||||
| 
 | 
 | ||||||
|     def receive_message(self): |     def receive_message(self): | ||||||
|         queue_name = self._get_queue_name() |         queue_name = self._get_queue_name() | ||||||
|  | 
 | ||||||
|  |         try: | ||||||
|             queue = self.sqs_backend.get_queue(queue_name) |             queue = self.sqs_backend.get_queue(queue_name) | ||||||
|  |         except QueueDoesNotExist as e: | ||||||
|  |             return self._error('QueueDoesNotExist', e.description) | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             message_count = int(self.querystring.get("MaxNumberOfMessages")[0]) |             message_count = int(self.querystring.get("MaxNumberOfMessages")[0]) | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ from __future__ import unicode_literals | |||||||
| import boto | import boto | ||||||
| import boto3 | import boto3 | ||||||
| import botocore.exceptions | import botocore.exceptions | ||||||
|  | from botocore.exceptions import ClientError | ||||||
| from boto.exception import SQSError | from boto.exception import SQSError | ||||||
| from boto.sqs.message import RawMessage, Message | from boto.sqs.message import RawMessage, Message | ||||||
| 
 | 
 | ||||||
| @ -33,6 +34,7 @@ def test_create_fifo_queue_fail(): | |||||||
|     else: |     else: | ||||||
|         raise RuntimeError('Should of raised InvalidParameterValue Exception') |         raise RuntimeError('Should of raised InvalidParameterValue Exception') | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| @mock_sqs | @mock_sqs | ||||||
| def test_create_fifo_queue(): | def test_create_fifo_queue(): | ||||||
|     sqs = boto3.client('sqs', region_name='us-east-1') |     sqs = boto3.client('sqs', region_name='us-east-1') | ||||||
| @ -49,10 +51,10 @@ def test_create_fifo_queue(): | |||||||
|     response['Attributes']['FifoQueue'].should.equal('true') |     response['Attributes']['FifoQueue'].should.equal('true') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| @mock_sqs | @mock_sqs | ||||||
| def test_create_queue(): | def test_create_queue(): | ||||||
|     sqs = boto3.resource('sqs', region_name='us-east-1') |     sqs = boto3.resource('sqs', region_name='us-east-1') | ||||||
|  | 
 | ||||||
|     new_queue = sqs.create_queue(QueueName='test-queue') |     new_queue = sqs.create_queue(QueueName='test-queue') | ||||||
|     new_queue.should_not.be.none |     new_queue.should_not.be.none | ||||||
|     new_queue.should.have.property('url').should.contain('test-queue') |     new_queue.should.have.property('url').should.contain('test-queue') | ||||||
| @ -66,10 +68,19 @@ def test_create_queue(): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @mock_sqs | @mock_sqs | ||||||
| def test_get_inexistent_queue(): | def test_get_nonexistent_queue(): | ||||||
|     sqs = boto3.resource('sqs', region_name='us-east-1') |     sqs = boto3.resource('sqs', region_name='us-east-1') | ||||||
|     sqs.get_queue_by_name.when.called_with( |     with assert_raises(ClientError) as err: | ||||||
|         QueueName='nonexisting-queue').should.throw(botocore.exceptions.ClientError) |         sqs.get_queue_by_name(QueueName='nonexisting-queue') | ||||||
|  |     ex = err.exception | ||||||
|  |     ex.operation_name.should.equal('GetQueueUrl') | ||||||
|  |     ex.response['Error']['Code'].should.equal('QueueDoesNotExist') | ||||||
|  | 
 | ||||||
|  |     with assert_raises(ClientError) as err: | ||||||
|  |         sqs.Queue('http://whatever-incorrect-queue-address').load() | ||||||
|  |     ex = err.exception | ||||||
|  |     ex.operation_name.should.equal('GetQueueAttributes') | ||||||
|  |     ex.response['Error']['Code'].should.equal('QueueDoesNotExist') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @mock_sqs | @mock_sqs | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user