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): | ||||
|         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.utils import camelcase_to_underscores, get_random_message_id, unix_time, unix_time_millis | ||||
| from .utils import generate_receipt_handle | ||||
| from .exceptions import ReceiptHandleIsInvalid, MessageNotInflight, MessageAttributesInvalid | ||||
| from .exceptions import ( | ||||
|     MessageAttributesInvalid, | ||||
|     MessageNotInflight, | ||||
|     QueueDoesNotExist, | ||||
|     ReceiptHandleIsInvalid, | ||||
| ) | ||||
| 
 | ||||
| DEFAULT_ACCOUNT_ID = 123456789012 | ||||
| DEFAULT_SENDER_ID = "AIDAIT2UOQQY3AUEKVGXU" | ||||
| @ -304,7 +309,10 @@ class SQSBackend(BaseBackend): | ||||
|         return qs | ||||
| 
 | ||||
|     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): | ||||
|         if queue_name in self.queues: | ||||
|  | ||||
| @ -8,7 +8,8 @@ from .models import sqs_backends | ||||
| from .exceptions import ( | ||||
|     MessageAttributesInvalid, | ||||
|     MessageNotInflight, | ||||
|     ReceiptHandleIsInvalid | ||||
|     QueueDoesNotExist, | ||||
|     ReceiptHandleIsInvalid, | ||||
| ) | ||||
| 
 | ||||
| MAXIMUM_VISIBILTY_TIMEOUT = 43200 | ||||
| @ -76,7 +77,12 @@ class SQSResponse(BaseResponse): | ||||
|     def get_queue_url(self): | ||||
|         request_url = urlparse(self.uri) | ||||
|         queue_name = self._get_param("QueueName") | ||||
|         queue = self.sqs_backend.get_queue(queue_name) | ||||
| 
 | ||||
|         try: | ||||
|             queue = self.sqs_backend.get_queue(queue_name) | ||||
|         except QueueDoesNotExist as e: | ||||
|             return self._error('QueueDoesNotExist', e.description) | ||||
| 
 | ||||
|         if queue: | ||||
|             template = self.response_template(GET_QUEUE_URL_RESPONSE) | ||||
|             return template.render(queue=queue, request_url=request_url) | ||||
| @ -113,7 +119,11 @@ class SQSResponse(BaseResponse): | ||||
| 
 | ||||
|     def get_queue_attributes(self): | ||||
|         queue_name = self._get_queue_name() | ||||
|         queue = self.sqs_backend.get_queue(queue_name) | ||||
|         try: | ||||
|             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) | ||||
|         return template.render(queue=queue) | ||||
| 
 | ||||
| @ -250,7 +260,11 @@ class SQSResponse(BaseResponse): | ||||
| 
 | ||||
|     def receive_message(self): | ||||
|         queue_name = self._get_queue_name() | ||||
|         queue = self.sqs_backend.get_queue(queue_name) | ||||
| 
 | ||||
|         try: | ||||
|             queue = self.sqs_backend.get_queue(queue_name) | ||||
|         except QueueDoesNotExist as e: | ||||
|             return self._error('QueueDoesNotExist', e.description) | ||||
| 
 | ||||
|         try: | ||||
|             message_count = int(self.querystring.get("MaxNumberOfMessages")[0]) | ||||
|  | ||||
| @ -4,6 +4,7 @@ from __future__ import unicode_literals | ||||
| import boto | ||||
| import boto3 | ||||
| import botocore.exceptions | ||||
| from botocore.exceptions import ClientError | ||||
| from boto.exception import SQSError | ||||
| from boto.sqs.message import RawMessage, Message | ||||
| 
 | ||||
| @ -33,6 +34,7 @@ def test_create_fifo_queue_fail(): | ||||
|     else: | ||||
|         raise RuntimeError('Should of raised InvalidParameterValue Exception') | ||||
| 
 | ||||
| 
 | ||||
| @mock_sqs | ||||
| def test_create_fifo_queue(): | ||||
|     sqs = boto3.client('sqs', region_name='us-east-1') | ||||
| @ -49,10 +51,10 @@ def test_create_fifo_queue(): | ||||
|     response['Attributes']['FifoQueue'].should.equal('true') | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @mock_sqs | ||||
| def test_create_queue(): | ||||
|     sqs = boto3.resource('sqs', region_name='us-east-1') | ||||
| 
 | ||||
|     new_queue = sqs.create_queue(QueueName='test-queue') | ||||
|     new_queue.should_not.be.none | ||||
|     new_queue.should.have.property('url').should.contain('test-queue') | ||||
| @ -66,10 +68,19 @@ def test_create_queue(): | ||||
| 
 | ||||
| 
 | ||||
| @mock_sqs | ||||
| def test_get_inexistent_queue(): | ||||
| def test_get_nonexistent_queue(): | ||||
|     sqs = boto3.resource('sqs', region_name='us-east-1') | ||||
|     sqs.get_queue_by_name.when.called_with( | ||||
|         QueueName='nonexisting-queue').should.throw(botocore.exceptions.ClientError) | ||||
|     with assert_raises(ClientError) as err: | ||||
|         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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user