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…
Reference in New Issue
Block a user