222 Commits

Author SHA1 Message Date
Steve Pulec
d88e1fbdda
Merge pull request #2402 from gruebel/fix-sqs-maxReceiveCount
Store SQS RedrivePolicy maxReceiveCount value as int
2019-09-11 21:52:16 -05:00
gruebel
9ac20ad5f1 store SQS RedrivePolicy maxReceiveCount value as int 2019-08-31 19:28:09 +02:00
Vladimir
8b90a75aa0 issues-2386 make comparing exists and new queues only by static attrs 2019-08-23 17:17:10 +03:00
Randy Westergren
ccceb70397
And event source mapping endpoints and SQS trigger support 2019-08-20 21:54:57 -04:00
Steve Pulec
b19c201975 Cleanup model ref resetting. 2019-07-10 21:16:11 -05:00
Robert Lewis
6e89a22008 Remove request_id from templates. 2019-01-20 19:17:25 -08:00
jamesandres
e38eea751f
Go easier on the CPU when moto sqs is idle
For our local development setup we have found that moto is using around 25% CPU constantly. Digging in with gdb it turned out that it was burning that CPU in the sleeping loop. Here i'm increasing the sleep by 10x which brings the idle CPU usage down by 10x (to ~2%).

I'm not familiar enough with the moto/sqs codebase to know if lengthening this sleep will have an adverse effect; however, in other Python dev I've noticed that (in Python 2.7 anyway..) Python threading won't context switch a thread until a sleep of at least 0.01 seconds is performed (shockingly long!). So based on this guesswork I suspect sleeping for 0.01 seconds won't cause any grief.
2018-10-31 11:39:49 +00:00
Steve Pulec
0ab07bc482
Merge pull request #1763 from nate/fix/receive_message_wait_time_seconds
Force receive_message_wait_time_seconds to be int
2018-09-22 16:49:24 -04:00
Nathan Sutton
8393c7f20b Don't error on double create queue with same attrs
Creating a queue a second time with the same attributes should not raise
an error. This change makes it work correctly.
2018-08-08 21:10:13 -05:00
Nathan Sutton
9d1c665310 Force receive_message_wait_time_seconds to be int
When a queue is created with the ReceiveMessageWaitTimeSeconds
attribute the value is never converted to an integer. When the
ReceiveMessage action is called it tries to compare the string
ReceiveMessageWaitTimeSeconds with the min and max wait times which
raises a TypeError.

The solution is to convert this value to an integer before comparing.
2018-08-08 19:14:56 -05:00
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
Iain Bullard
fad4394474 SQS add missing validation to ReceiveMessage (#1595)
* SQS receive_message - enforce bounds on MaxNumberOfMessages as AWS does

* SQS receive_message - enforce bounds on WaitTimeSeconds as AWS does
2018-04-24 09:51:49 -07: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
d3d9557d49 Implement basic SNS message filtering (#1521)
* Add support for FilterPolicy to sns subscription set_filter_attributes

* Add basic support for sns message filtering

This adds support for exact string value matching along with AND/OR
logic as described here:

https://docs.aws.amazon.com/sns/latest/dg/message-filtering.html

It does not provide support for:
- Anything-but string matching
- Prefix string matching
- Numeric Value Matching

The above filter policies (if configured) will not match messages.
2018-03-21 08:49:11 -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
Alexander Mohr
97687d153a Implement CloudWatch get_metric_statistics (#1369)
* implement get_metric_statistics
2017-12-01 20:37:27 +00:00
Terry Cain
75f0deb828 Completed SQS Implementation 2017-10-29 18:59:40 +00:00
Terry Cain
49ddb500a8 AWS X-Ray client mock. (#1255)
* X-Ray Client SDK patched

Fixes #1250

* Fixed flake8

* Fixed some issues

* Fixed flake8

* Fixed more typos

* Fixed python2 string

* Fixed aws-sdk patch order

* Added more test cases to test the patching
2017-10-16 17:06:22 -07: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
219ed45f94
Flake8 2017-09-22 20:29:40 +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
Waldemar Hummer
ce2f3e6e2b fix receiving of messages from queues with a dot character in their name 2017-08-05 15:47:40 +10:00
Ferran Puig
e4f42d5880 Don't use exponential notation for SQS message timestamps 2017-07-03 16:17:01 +02:00
Luis Jimenez
898031b40c SQSResponse: include MD5OfMessageAttributes parameter only when there are message attributes 2017-06-29 09:27:31 -04: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
Steve Pulec
fde721bed7 Testing new version of decorator. 2017-02-15 22:35:45 -05:00
Steve Pulec
d3df810065 Generalize decorator code. 2017-02-12 00:22:29 -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
Steve Pulec
38021c6ef5 Test Boto 2.43.0 . 2016-11-06 10:29:50 -05:00