SQS - duplicate deprecated tests (#4326)

This commit is contained in:
Bert Blommers 2021-09-22 21:50:27 +00:00 committed by GitHub
parent 8fd904634f
commit 4c18b36170
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 304 additions and 0 deletions

View File

@ -1,15 +1,19 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import sure # noqa
import unittest import unittest
from boto.sqs.connection import SQSConnection from boto.sqs.connection import SQSConnection
from boto.sqs.message import Message from boto.sqs.message import Message
from boto.ec2 import EC2Connection from boto.ec2 import EC2Connection
import boto3
from moto import mock_sqs_deprecated, mock_ec2_deprecated from moto import mock_sqs_deprecated, mock_ec2_deprecated
from moto import mock_sqs, mock_ec2
from tests import EXAMPLE_AMI_ID from tests import EXAMPLE_AMI_ID
class TestNestedDecorators(unittest.TestCase): class TestNestedDecorators(unittest.TestCase):
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def setup_sqs_queue(self): def setup_sqs_queue(self):
conn = SQSConnection() conn = SQSConnection()
@ -21,9 +25,29 @@ class TestNestedDecorators(unittest.TestCase):
self.assertEqual(q.count(), 1) self.assertEqual(q.count(), 1)
# Has boto3 equivalent
@mock_ec2_deprecated @mock_ec2_deprecated
def test_nested(self): def test_nested(self):
self.setup_sqs_queue() self.setup_sqs_queue()
conn = EC2Connection() conn = EC2Connection()
conn.run_instances(EXAMPLE_AMI_ID) conn.run_instances(EXAMPLE_AMI_ID)
class TestNestedDecoratorsBoto3(unittest.TestCase):
@mock_sqs
def setup_sqs_queue(self):
conn = boto3.resource("sqs", region_name="us-east-1")
queue = conn.create_queue(QueueName="some-queue")
queue.send_message(MessageBody="test message 1")
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
@mock_ec2
def test_nested(self):
self.setup_sqs_queue()
conn = boto3.client("ec2", region_name="us-west-2")
conn.run_instances(ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1)

View File

@ -1314,6 +1314,7 @@ def test_receive_messages_with_wait_seconds_timeout_of_zero():
messages.should.equal([]) messages.should.equal([])
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_send_message_with_xml_characters(): def test_send_message_with_xml_characters():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1329,6 +1330,22 @@ def test_send_message_with_xml_characters():
messages[0].get_body().should.equal(body_one) messages[0].get_body().should.equal(body_one)
@mock_sqs
def test_send_message_with_xml_characters_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
client = boto3.client("sqs", region_name="us-east-1")
queue = sqs.create_queue(QueueName="test-queue")
body_one = "< & >"
queue.send_message(MessageBody=body_one)
messages = client.receive_message(QueueUrl=queue.url)["Messages"]
messages[0]["Body"].should.equal(body_one)
# Has boto3 equivalent
@requires_boto_gte("2.28") @requires_boto_gte("2.28")
@mock_sqs_deprecated @mock_sqs_deprecated
def test_send_message_with_attributes(): def test_send_message_with_attributes():
@ -1369,6 +1386,7 @@ def test_send_message_with_attributes():
dict(messages[0].message_attributes[name]).should.equal(value) dict(messages[0].message_attributes[name]).should.equal(value)
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_send_message_with_delay(): def test_send_message_with_delay():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1390,6 +1408,27 @@ def test_send_message_with_delay():
queue.count().should.equal(0) queue.count().should.equal(0)
@mock_sqs
def test_send_message_with_delay_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(QueueName="test-queue")
body_one = "this is a test message"
body_two = "this is another test message"
queue.send_message(MessageBody=body_one, DelaySeconds=3)
queue.send_message(MessageBody=body_two)
messages = queue.receive_messages()
messages.should.have.length_of(1)
messages[0].body.should.equal(body_two)
messages = queue.receive_messages()
messages.should.have.length_of(0)
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_send_large_message_fails(): def test_send_large_message_fails():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1402,6 +1441,22 @@ def test_send_large_message_fails():
queue.write.when.called_with(huge_message).should.throw(SQSError) queue.write.when.called_with(huge_message).should.throw(SQSError)
@mock_sqs
def test_send_large_message_fails_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(QueueName="test-queue")
body = "test message" * 200000
with pytest.raises(ClientError) as ex:
queue.send_message(MessageBody=body)
err = ex.value.response["Error"]
err["Code"].should.equal("InvalidParameterValue")
err["Message"].should.equal(
"One or more parameters are invalid. Reason: Message must be shorter than 262144 bytes."
)
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_message_becomes_inflight_when_received(): def test_message_becomes_inflight_when_received():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1423,6 +1478,35 @@ def test_message_becomes_inflight_when_received():
queue.count().should.equal(1) queue.count().should.equal(1)
@mock_sqs
def test_message_becomes_inflight_when_received_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "1"}
)
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
body = "this is a test message"
queue.send_message(MessageBody=body)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
messages = queue.receive_messages()
messages.should.have.length_of(1)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
# Wait
time.sleep(2)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_receive_message_with_explicit_visibility_timeout(): def test_receive_message_with_explicit_visibility_timeout():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1441,6 +1525,29 @@ def test_receive_message_with_explicit_visibility_timeout():
queue.count().should.equal(1) queue.count().should.equal(1)
@mock_sqs
def test_receive_message_with_explicit_visibility_timeout_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "1"}
)
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
body = "this is a test message"
queue.send_message(MessageBody=body)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
messages = queue.receive_messages(VisibilityTimeout=0)
messages.should.have.length_of(1)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_change_message_visibility(): def test_change_message_visibility():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1475,6 +1582,47 @@ def test_change_message_visibility():
queue.count().should.equal(0) queue.count().should.equal(0)
@mock_sqs
def test_change_message_visibility_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "2"}
)
body = "this is a test message"
queue.send_message(MessageBody=body)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
messages = queue.receive_messages()
messages.should.have.length_of(1)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
messages[0].change_visibility(VisibilityTimeout=2)
# Wait
time.sleep(1)
# Message is not visible
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
time.sleep(2)
# Message now becomes visible
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
messages = queue.receive_messages()
messages[0].delete()
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_message_attributes(): def test_message_attributes():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1499,6 +1647,7 @@ def test_message_attributes():
assert message_attributes.get("SenderId") assert message_attributes.get("SenderId")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_read_message_from_queue(): def test_read_message_from_queue():
conn = boto.connect_sqs() conn = boto.connect_sqs()
@ -1511,6 +1660,7 @@ def test_read_message_from_queue():
message.get_body().should.equal(body) message.get_body().should.equal(body)
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_queue_length(): def test_queue_length():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1522,6 +1672,21 @@ def test_queue_length():
queue.count().should.equal(2) queue.count().should.equal(2)
@mock_sqs
def test_queue_length_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "2"}
)
queue.send_message(MessageBody="this is a test message")
queue.send_message(MessageBody="this is another test message")
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("2")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_delete_message(): def test_delete_message():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1543,6 +1708,7 @@ def test_delete_message():
queue.count().should.equal(0) queue.count().should.equal(0)
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_send_batch_operation(): def test_send_batch_operation():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1566,6 +1732,7 @@ def test_send_batch_operation():
messages = queue.get_messages(2) messages = queue.get_messages(2)
# Has boto3 equivalent
@requires_boto_gte("2.28") @requires_boto_gte("2.28")
@mock_sqs_deprecated @mock_sqs_deprecated
def test_send_batch_operation_with_message_attributes(): def test_send_batch_operation_with_message_attributes():
@ -1588,6 +1755,7 @@ def test_send_batch_operation_with_message_attributes():
dict(messages[0].message_attributes[name]).should.equal(value) dict(messages[0].message_attributes[name]).should.equal(value)
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_delete_batch_operation(): def test_delete_batch_operation():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1608,6 +1776,29 @@ def test_delete_batch_operation():
queue.count().should.equal(1) queue.count().should.equal(1)
@mock_sqs
def test_delete_batch_operation_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "2"}
)
queue.send_message(MessageBody="test message 1")
queue.send_message(MessageBody="test message 2")
queue.send_message(MessageBody="test message 3")
messages = queue.receive_messages(MaxNumberOfMessages=2)
queue.delete_messages(
Entries=[
{"Id": m.message_id, "ReceiptHandle": m.receipt_handle} for m in messages
]
)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_queue_attributes(): def test_queue_attributes():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1641,6 +1832,7 @@ def test_queue_attributes():
attribute_names.should.contain("QueueArn") attribute_names.should.contain("QueueArn")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_change_message_visibility_on_invalid_receipt(): def test_change_message_visibility_on_invalid_receipt():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1668,6 +1860,41 @@ def test_change_message_visibility_on_invalid_receipt():
original_message.change_visibility.when.called_with(100).should.throw(SQSError) original_message.change_visibility.when.called_with(100).should.throw(SQSError)
@mock_sqs
def test_change_message_visibility_on_invalid_receipt_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "1"}
)
queue.send_message(MessageBody="test message 1")
messages = queue.receive_messages(MaxNumberOfMessages=1)
messages.should.have.length_of(1)
original_message = messages[0]
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
time.sleep(2)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
messages = queue.receive_messages(MaxNumberOfMessages=1)
messages.should.have.length_of(1)
with pytest.raises(ClientError) as ex:
original_message.change_visibility(VisibilityTimeout=100)
err = ex.value.response["Error"]
err["Code"].should.equal("ReceiptHandleIsInvalid")
err["Message"].should.equal("The input receipt handle is invalid.")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_change_message_visibility_on_visible_message(): def test_change_message_visibility_on_visible_message():
conn = boto.connect_sqs("the_key", "the_secret") conn = boto.connect_sqs("the_key", "the_secret")
@ -1691,6 +1918,34 @@ def test_change_message_visibility_on_visible_message():
original_message.change_visibility.when.called_with(100).should.throw(SQSError) original_message.change_visibility.when.called_with(100).should.throw(SQSError)
@mock_sqs
def test_change_message_visibility_on_visible_message_boto3():
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="test-queue", Attributes={"VisibilityTimeout ": "1"}
)
queue.send_message(MessageBody="test message")
messages = queue.receive_messages(MaxNumberOfMessages=1)
messages.should.have.length_of(1)
original_message = messages[0]
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
time.sleep(2)
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
# TODO: We should catch a ClientError here, but Moto throws an error in the wrong format
with pytest.raises(Exception) as ex:
original_message.change_visibility(VisibilityTimeout=100)
str(ex).should.match("Invalid request: The message referred to is not in flight.")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_purge_action(): def test_purge_action():
conn = boto.sqs.connect_to_region("us-east-1") conn = boto.sqs.connect_to_region("us-east-1")
@ -1736,6 +1991,7 @@ def test_purge_queue_before_delete_message():
receive_resp2["Messages"][0]["Body"].should.equal("second_message") receive_resp2["Messages"][0]["Body"].should.equal("second_message")
# Has boto3 equivalent
@mock_sqs_deprecated @mock_sqs_deprecated
def test_delete_message_after_visibility_timeout(): def test_delete_message_after_visibility_timeout():
VISIBILITY_TIMEOUT = 1 VISIBILITY_TIMEOUT = 1
@ -1757,6 +2013,30 @@ def test_delete_message_after_visibility_timeout():
assert new_queue.count() == 0 assert new_queue.count() == 0
@mock_sqs
def test_delete_message_after_visibility_timeout_boto3():
VISIBILITY_TIMEOUT = 1
sqs = boto3.resource("sqs", region_name="us-east-1")
queue = sqs.create_queue(
QueueName="new-queue",
Attributes={"VisibilityTimeout ": f"{VISIBILITY_TIMEOUT}"},
)
queue.send_message(MessageBody="Message 1!")
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("1")
m1_retrieved = queue.receive_messages()[0]
time.sleep(VISIBILITY_TIMEOUT + 1)
m1_retrieved.delete()
queue.reload()
queue.attributes["ApproximateNumberOfMessages"].should.equal("0")
@mock_sqs @mock_sqs
def test_delete_message_errors(): def test_delete_message_errors():
client = boto3.client("sqs", region_name="us-east-1") client = boto3.client("sqs", region_name="us-east-1")