71 Commits

Author SHA1 Message Date
Steve Pulec
1689a2808f Fix creating SQS queue with same attributes. Closes #1663. 2018-05-31 23:05:50 -04:00
Steve Pulec
919c0c9b04
Merge pull request #1656 from Birne94/sqs-message-group-id
Add MessageGroupId support to SQS queues (fixes #1655)
2018-05-30 20:36:53 -04:00
Daniel Birnstiel
9b8e62e1f1 Add MessageGroupId support to SQS queues (fixes #1655) 2018-05-30 15:29:57 +02:00
Steve Pulec
bc1bdd7ae1
Merge pull request #1586 from DHager/accept_non_json_redrive_policy
Fix Cloudformation not accepting non-JSON SQS redrive policy
2018-05-29 22:07:00 -04:00
Darien Hager
3c9d8bca46 Remove whitespace to satisfy flake8 formatting 2018-04-20 11:46:12 -07:00
Darien Hager
5cd4d5e02f Change SQS model to support non-JSON redrive policies. Does not affect other limitations in SQS APIs. 2018-04-19 23:25:10 -07:00
Darien Hager
6556ba89cd Basic plumbing to preserve MessageGroupId and MessageDeduplicationID, if they are provided. 2018-04-19 00:22:58 -07:00
Iain Bullard
6dce7dcb18 Improve SQS Compatibility with AWS (#1520)
* Return correct error code when fetching a queue that does not exist

* Improve SQS Queue get and set attributes

* Queue creation and set_attributes uses the same code path
    - ensure bool/int values are cast correctly
* RedrivePolicy is handled properly with set_attributes
    - _setup_dlq is called
    - is json decoded, so that returned RedrivePolicy is not json
      encoded twice
* As per AWS not all attributes are returned when they are not set, for
  example RedrivePolicy, FifoQueue, Policy, Kms*
* WaitTimeSeconds is not a queue attribute switch to
  ReceiveMessageWaitTimeSeconds
2018-03-21 08:48:08 -07:00
Dan W Anderson
8959643e56 return redrivepolicy attribute as string 2018-01-23 18:33:23 -08:00
Dan W Anderson
89bad39313 add redrivepolicy attribute to sqs 2018-01-23 18:33:23 -08:00
Terry Cain
75f0deb828 Completed SQS Implementation 2017-10-29 18:59:40 +00:00
Jack Danger
dc40fce146 implement SQS QueueDoesNotExist error 2017-10-10 13:05:48 -07:00
Terry Cain
81e615f5c1
Fixed conflicting arguments 2017-09-22 20:37:32 +01:00
Terry Cain
932cab7f76
Fixed typo 2017-09-22 20:24:14 +01:00
Terry Cain
a91c025398
Cleanup, and fix #1105 2017-09-22 20:08:20 +01:00
Hugo Lopes Tavares
973264d940 Convert struct argument to bytestring to avoid errors with Python 2.7.6 2017-08-10 19:59:46 -04:00
Ferran Puig
e4f42d5880 Don't use exponential notation for SQS message timestamps 2017-07-03 16:17:01 +02:00
brett55
7033d142a0 - Bug fix for infinite loop when WaitTimeSeconds was set to 0
- Added 2 unit tests
2017-06-01 09:51:33 -06:00
Jack Danger Canty
6679def702 Python 2/3 compat for MD5 of SQS attributes 2017-05-22 18:11:59 -07:00
Jack Danger Canty
5e88b5d1b4 MD5 calculation of SQS message attributes
This implements the same MD5 hashing pattern as implemented in the Ruby
and Java AWS SDKs

Doesn't yet handle list types but if you're reading this you might be
surprised how easy that is to add. Give it a shot and if you get stuck
reach out to me for help.
2017-05-22 18:11:59 -07:00
Waldemar Hummer
a5727bf64a fix SQS message polling to abort after wait_seconds_timeout 2017-04-06 21:40:03 +10:00
michael_lerch
83084bf2af Prevent 100% cpu usage while SQS long polling on an empty queue
While using moto server with a test SQS client, I noticed significant CPU usage while the client was long polling. I narrowed this down to the `receive_messages` call of the SQS service sitting in a `while True:` statement with no work to be done, thus looping forever.

To produce this issue, I do:
```
$ python3 -m venv venv
$ . ./venv/bin/activate
(venv) $ pip install moto moto[server] boto3
Collecting moto
  Downloading moto-0.4.31-py2.py3-none-any.whl (303kB)
  --snip--
(venv) $ moto_server sqs &
[1] 31727
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
(venv) $ python3
Python 3.6.0 (default, Dec 24 2016, 08:01:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>> client = boto3.client('sqs', region_name='us-east-1', endpoint_url='http://127.0.0.1:5000');
>>> client.create_queue(QueueName='testing')
127.0.0.1 - - [16/Mar/2017 13:34:20] "POST / HTTP/1.1" 200 -
{'QueueUrl': 'http://sqs.us-east-1.amazonaws.com/123456789012/testing', 'ResponseMetadata': {'RequestId': '7a62c49f-347e-4fc4-9331-6e8e7a96aa73', 'HTTPStatusCode': 200, 'HTTPHeaders': {'content-type': 'text/html; charset=utf-8', 'content-length': '343', 'server': 'Werkzeug/0.12.1 Python/3.6.0', 'date': 'Thu, 16 Mar 2017 20:34:20 GMT'}, 'RetryAttempts': 0}}
>>> client.receive_message(QueueUrl='http://sqs.us-east-1.amazonaws.com/123456789012/testing', MaxNumberOfMessages=10, WaitTimeSeconds=10)
```

At this point the moto server will run at 100% cpu for 10 seconds until the request times out waiting for a message. If multiple clients are continuously reconnected (as in mocking a normal sqs worker setup) the server will sit at 100% cpu indefinitely.

This pull request adds a simple sleep statement to the SQS `receive_messages` call when there are no messages to process. In doing so, the loop will be limited to executing once per 0.001 seconds when the queue is empty. The CPU usage is nearly 0% after this change.
2017-03-16 13:43:45 -07:00
Seamus Cawley
bd2ff89bf1 Ensure SQS property WaitTimeSeconds is an integer 2017-03-13 13:56:55 +00:00
Steve Pulec
6d422d1f37 Add BaseModel to all models. 2017-03-11 23:41:12 -05:00
Steve Pulec
1709208872 First version of dashboard. 2017-03-11 22:45:42 -05:00
Steve Pulec
3b4ef2cf15 Merge in master. 2017-03-05 09:58:39 -05:00
Chris LaRose
56f9409ca9 Use request URL to generate SQS queue URLs; fixes #626 (#827) 2017-03-04 22:53:14 -05:00
Steve Pulec
f37bad0e00 Lints. 2017-02-23 21:37:43 -05:00
Brian Kruger
f212d70104 Use a sane aws sender_id from SQS. (#791) 2017-01-11 20:38:55 -05:00
Raghavendra D Prabhu
d07c646032 sqs: Use unix_time in place of time.time() (#787)
unix_time() from moto.core.utils is used as the time source through moto,
and it is identical to time.time() in output. Hence, using unix_time()
since it makes mocking easier during testing (when time is mocked out).
2017-01-11 20:35:56 -05:00
Raghavendra Prabhu
34a28b0fd5 Use region from ctor to set queue_arn.
Without this, any region passed to boto3.resource is ignored and unit
tests depending on it break.
2016-08-17 22:12:00 +01:00
macheins
ef8b6c1f28 Fix broken format of SQS QueueArn attribute 2016-07-19 14:15:16 +02:00
Matt Long
9b7902018f Respect VisibilityTimeout when calling receive_message
Previously, receive_message would always use the queue's default
visibility timeout instead of the value passed as a query parameter when
calling the receive_message method on an SQS connection.
2016-05-31 15:13:49 -07:00
Steve Pulec
a600deb96a Fix merge conflicts and add EC2 Instance delete. Closes #576. 2016-04-28 09:22:31 -04:00
Steve Pulec
63296049f1 More explicit SQS message checking. Closes #519. 2016-02-14 17:10:17 -05:00
Steve Pulec
705ec314a3 Cleanup different places using unix_time() 2015-11-27 14:14:40 -05:00
Andy Raines
76bce7954a Fixes #430: MD5 hashing should be done to the real body, not an escaped one 2015-10-05 14:14:56 +01:00
Steve Pulec
f72613cc47 Fix queue urls for other regions. Closes #411. 2015-09-19 09:18:16 -04:00
Dustin J. Mitchell
00e40c487e Return messages once they are gathered
If one or more messages are available, stop waiting and return them.
2015-08-31 11:27:42 -04:00
Jot
178d1c3a93 Added support for WaitTimeSeconds in SQS #392 2015-08-13 02:58:14 +02:00
Steve Pulec
53fff2eb84 Add UpdateStack functionality for Cloudformation. 2015-07-13 13:56:46 -04:00
Steve Pulec
0195e04053 Allow deleting of SQS invisible messages. Closes #352. 2015-05-29 23:26:43 -04:00
Steve Pulec
6b44e41249 Add SQS purge_queue action. Closes #349. 2015-05-29 23:21:14 -04:00
Steve Pulec
1f8253a1a1 Cleanup the default region backends. 2014-11-15 14:21:58 -05:00
Steve Pulec
bd847bd941 Cleanup multi-region support for ELB, SQS, Cloudformation, EC2, Autoscaling. 2014-11-15 13:34:52 -05:00
Steve Pulec
8bc8f09b47 Some flake8 cleanup. 2014-11-15 09:35:52 -05:00
Joseph Lawson
ff27ef9e91 XML escape body of sqs message body prior to encoding to XML 2014-10-22 16:05:26 -04:00
Joseph Lawson
20a69255c3 tweak Fn::GetAtt to return resource_json if resource is not implemented. DRY
This is better than failing out with a misleading Boto 400 error which should only happen when get_cfn_attribute is called but fails.
2014-10-21 14:51:26 -04:00
Joseph Lawson
1d9ffafaa5 create CloudFormation outputs and enable 'Fn::GetAtt' to work. 2014-10-21 12:45:03 -04:00
Ralfas
76aa9a8b22 Added basic support for SQS MessageAttributes. 2014-10-05 19:10:49 +01:00