test changing visibility improperly
This commit is contained in:
parent
cb52ad6da3
commit
049b73485f
@ -6,21 +6,14 @@ import re
|
|||||||
from moto.core import BaseBackend
|
from moto.core import BaseBackend
|
||||||
from moto.core.utils import camelcase_to_underscores, get_random_message_id
|
from moto.core.utils import camelcase_to_underscores, get_random_message_id
|
||||||
from .utils import generate_receipt_handle, unix_time_millis
|
from .utils import generate_receipt_handle, unix_time_millis
|
||||||
|
from .exceptions import (
|
||||||
|
ReceiptHandleIsInvalid,
|
||||||
|
MessageNotInflight
|
||||||
|
)
|
||||||
|
|
||||||
DEFAULT_ACCOUNT_ID = 123456789012
|
DEFAULT_ACCOUNT_ID = 123456789012
|
||||||
|
|
||||||
|
|
||||||
class MessageNotInflight(Exception):
|
|
||||||
description = "The message referred to is not in flight."
|
|
||||||
status_code = 400
|
|
||||||
|
|
||||||
|
|
||||||
class ReceiptHandleIsInvalid(Exception):
|
|
||||||
description = "The receipt handle provided is not valid."
|
|
||||||
status_code = 400
|
|
||||||
|
|
||||||
|
|
||||||
class Message(object):
|
class Message(object):
|
||||||
def __init__(self, message_id, body):
|
def __init__(self, message_id, body):
|
||||||
self.id = message_id
|
self.id = message_id
|
||||||
|
@ -3,6 +3,10 @@ from jinja2 import Template
|
|||||||
from moto.core.responses import BaseResponse
|
from moto.core.responses import BaseResponse
|
||||||
from moto.core.utils import camelcase_to_underscores
|
from moto.core.utils import camelcase_to_underscores
|
||||||
from .models import sqs_backend
|
from .models import sqs_backend
|
||||||
|
from .exceptions import (
|
||||||
|
MessageNotInflight,
|
||||||
|
ReceiptHandleIsInvalid
|
||||||
|
)
|
||||||
|
|
||||||
MAXIMUM_VISIBILTY_TIMEOUT = 43200
|
MAXIMUM_VISIBILTY_TIMEOUT = 43200
|
||||||
|
|
||||||
@ -46,11 +50,14 @@ class QueueResponse(BaseResponse):
|
|||||||
MAXIMUM_VISIBILTY_TIMEOUT
|
MAXIMUM_VISIBILTY_TIMEOUT
|
||||||
), dict(status=400)
|
), dict(status=400)
|
||||||
|
|
||||||
sqs_backend.change_message_visibility(
|
try:
|
||||||
queue_name=queue_name,
|
sqs_backend.change_message_visibility(
|
||||||
receipt_handle=receipt_handle,
|
queue_name=queue_name,
|
||||||
visibility_timeout=visibility_timeout
|
receipt_handle=receipt_handle,
|
||||||
)
|
visibility_timeout=visibility_timeout
|
||||||
|
)
|
||||||
|
except (ReceiptHandleIsInvalid, MessageNotInflight) as e:
|
||||||
|
return "Invalid request: {}".format(e.description), dict(status=e.status_code)
|
||||||
|
|
||||||
template = Template(CHANGE_MESSAGE_VISIBILITY_RESPONSE)
|
template = Template(CHANGE_MESSAGE_VISIBILITY_RESPONSE)
|
||||||
return template.render()
|
return template.render()
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import boto
|
import boto
|
||||||
from boto.exception import SQSError
|
from boto.exception import SQSError
|
||||||
from boto.sqs.message import RawMessage
|
from boto.sqs.message import RawMessage
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import sure # noqa
|
import sure # noqa
|
||||||
import time
|
import time
|
||||||
@ -283,3 +284,51 @@ def test_queue_attributes():
|
|||||||
attribute_names.should.contain('VisibilityTimeout')
|
attribute_names.should.contain('VisibilityTimeout')
|
||||||
attribute_names.should.contain('LastModifiedTimestamp')
|
attribute_names.should.contain('LastModifiedTimestamp')
|
||||||
attribute_names.should.contain('QueueArn')
|
attribute_names.should.contain('QueueArn')
|
||||||
|
|
||||||
|
|
||||||
|
@mock_sqs
|
||||||
|
def test_change_message_visibility_on_invalid_receipt():
|
||||||
|
conn = boto.connect_sqs('the_key', 'the_secret')
|
||||||
|
queue = conn.create_queue("test-queue", visibility_timeout=1)
|
||||||
|
|
||||||
|
conn.send_message(queue, 'this is another test message')
|
||||||
|
queue.count().should.equal(1)
|
||||||
|
messages = conn.receive_message(queue, number_messages=1)
|
||||||
|
|
||||||
|
assert len(messages) == 1
|
||||||
|
|
||||||
|
original_message = messages[0]
|
||||||
|
|
||||||
|
queue.count().should.equal(0)
|
||||||
|
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
queue.count().should.equal(1)
|
||||||
|
|
||||||
|
messages = conn.receive_message(queue, number_messages=1)
|
||||||
|
|
||||||
|
assert len(messages) == 1
|
||||||
|
|
||||||
|
original_message.change_visibility.when.called_with(100).should.throw(SQSError)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_sqs
|
||||||
|
def test_change_message_visibility_on_visible_message():
|
||||||
|
conn = boto.connect_sqs('the_key', 'the_secret')
|
||||||
|
queue = conn.create_queue("test-queue", visibility_timeout=1)
|
||||||
|
|
||||||
|
conn.send_message(queue, 'this is another test message')
|
||||||
|
queue.count().should.equal(1)
|
||||||
|
messages = conn.receive_message(queue, number_messages=1)
|
||||||
|
|
||||||
|
assert len(messages) == 1
|
||||||
|
|
||||||
|
original_message = messages[0]
|
||||||
|
|
||||||
|
queue.count().should.equal(0)
|
||||||
|
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
queue.count().should.equal(1)
|
||||||
|
|
||||||
|
original_message.change_visibility.when.called_with(100).should.throw(SQSError)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user