implement SQS QueueDoesNotExist error

This commit is contained in:
Jack Danger 2017-10-10 12:51:48 -07:00
parent 371bb2b824
commit dc40fce146
4 changed files with 48 additions and 10 deletions

View File

@ -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."

View File

@ -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:

View File

@ -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")
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: 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()
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) 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()
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: try:
message_count = int(self.querystring.get("MaxNumberOfMessages")[0]) message_count = int(self.querystring.get("MaxNumberOfMessages")[0])

View File

@ -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