Git Product home page Git Product logo

fake_sqs's People

Contributors

adammck avatar evalphobia avatar iain avatar jeshuaborges avatar jpgarcia avatar kakuno avatar kybishop avatar lukfugl avatar mauricio avatar nritholtz avatar pabloq avatar sumo-mbryant avatar tiwilliam avatar umcodemonkey avatar wearebasti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

fake_sqs's Issues

Simple way to create a queue programmatically

Our applications are set up with a single SQS_QUEUE_URL, which we then feed to the various AWS SDK parts. This incorporates the queue name by default. What would be the simplest way to create the queue with a name programmatically, before I call

app = FakeSQS.to_rack(options)
app.set :server, 'webrick' # app is a Sinatra::Base application
app.queues.create(name) # <--- how to do this?
app.run!

I would like to do this bypassing the AWS SDK, for simplicity's sake. I could of course create a new thread in the same process and use the AWS SDK to create the queue via the "official" way but it seems a bit of an overkill. Ideally I would like to pass the value parsed from the URL before I even start the service.

Incorrect number of arguments

Hey There!

What version of the aws-sdk is this package designed around? I am calling send_message on a new
queue in a service where historically I have only needed to pass options = {}. An error is being thrown from the SendMessage call in the response:

2015-09-01 16:08:15 - ArgumentError - wrong number of arguments (1 for 2):
    xxx/fake_sqs-0.3.0/lib/fake_sqs/actions/send_message.rb:11:in `call'
    xxx/fake_sqs-0.3.0/lib/fake_sqs/api.rb:41:in `block in call'
    xxx/fake_sqs-0.3.0/lib/fake_sqs/queues.rb:51:in `block in transaction'
    xxx/fake_sqs-0.3.0/lib/fake_sqs/memory_database.rb:24:in `transaction'
    xxx/fake_sqs-0.3.0/lib/fake_sqs/queues.rb:50:in `transaction'
    xxx/fake_sqs-0.3.0/lib/fake_sqs/api.rb:38:in `call'
    xxx//fake_sqs-0.3.0/lib/fake_sqs/web_interface.rb:39:in `block in <class:WebInterface>'

MD5 returned by SQS does not match the calculation on the original request (ruby aws-sdk-core >= 2.3)

Hi srs,

I've worked in a project with the ruby gem Shoryuken, and I got a problem:

It always worked well until I update the gem by bundle update shoryuken, updating the aws-sdk-core too.
Since that, I got the error:

Aws::Errors::ChecksumError:
       MD5 returned by SQS does not match the calculation on the original request. (MD5 calculated by the message atributes: 'ff41d67aace8f6c385e8a5071b828b5c', MD5 checksum returned: '')

The error occurs just version >= 2.3 of aws-sdk. I had no problems with versions up to that.

Looking the backtrace, I found this validation:
https://github.com/aws/aws-sdk-ruby/blob/v2.3.2/aws-sdk-core/lib/aws-sdk-core/plugins/sqs_md5s.rb#L75

Support for M1 chipset

Hello,

I am trying to run the containerized version of fake_sqs on mackbook pro with M1 chipset, but I am running into issues about that:

runtime.systemstack_switch()
        /usr/local/go/src/runtime/asm_amd64.s:245 fp=0xc820020770 sp=0xc820020768
runtime.main()
        /usr/local/go/src/runtime/proc.go:126 +0x62 fp=0xc8200207c0 sp=0xc820020770
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1998 +0x1 fp=0xc8200207c8 sp=0xc8200207c0

Is there any possibility of building it for arm64 architecture?

often disconnect - NetworkingError: connect EMFILE

i get this too often

[AWS sqs undefined 24.861s 3 retries] receiveMessage({ QueueUrl: 'http://0.0.0.0:9324/DevdevCR',
MaxNumberOfMessages: 10,
WaitTimeSeconds: 20 })
{ [NetworkingError: connect EMFILE]
message: 'connect EMFILE',
code: 'NetworkingError',
errno: 'EMFILE',
syscall: 'connect',
region: 'us-east-1',
hostname: '0.0.0.0',
retryable: true,
time: Wed May 14 2014 09:06:57 GMT+0000 (UTC),
statusCode: undefined }

Support endpoint aliases

If fake_sqs is running behind a proxy, the "host" portion of the queues returned always reference the host to which the server is bound, rather than the host on the request. It would be helpful for proxies if fake_sqs would use the hostname in the HTTP request when describing queues. This is especially useful in docker-compose based dev workflows where fake_sqs is being accessed through a docker network name.

MD5 returned by SQS does not match the calculation on the original request

I'm trying to use a java application with fake_sqs but am getting this:

Caused by: com.amazonaws.AmazonClientException: MD5 returned by SQS does not match the calculation on the original request. (MD5 calculated by the message attributes: "c3d29a3de5c6497a057496fd58a56e89", MD5 checksum returned: "null")
    at com.amazonaws.services.sqs.MessageMD5ChecksumHandler.sendMessageOperationMd5Check(MessageMD5ChecksumHandler.java:120)
    at com.amazonaws.services.sqs.MessageMD5ChecksumHandler.afterResponse(MessageMD5ChecksumHandler.java:80)
    at com.amazonaws.handlers.RequestHandler2Adaptor.afterResponse(RequestHandler2Adaptor.java:49)
    at com.amazonaws.http.AmazonHttpClient.afterResponse(AmazonHttpClient.java:416)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:322)
    at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2419)
    at com.amazonaws.services.sqs.AmazonSQSClient.sendMessage(AmazonSQSClient.java:1015)
    at org.apache.camel.component.aws.sqs.SqsProducer.process(SqsProducer.java:58)

I see that one of the ruby examples uses "apiVersion: '2012-11-05'" - perhaps this is required for all clients?

v0.3.0 - Still throwing QueueNameExists error if queue exists

Error create queue name devtest_DynamoDBFailed: devtest_DynamoDBFailed (Service: AmazonSQS; Status Code: 400; Error Code: QueueNameExists; Request ID: cfc454d8-47d4-4c08-a6fa-c3a5b0f096d6)

Trace from fake_sqs console:
2015-10-05 14:38:07 - FakeSQS::QueueNameExists - devtest_DynamoDBFailed:
/Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/queues.rb:18:in create' /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/actions/create_queue.rb:13:incall'
/Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/api.rb:39:in block in call' /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/queues.rb:51:inblock in transaction'
/Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/memory_database.rb:24:in transaction' /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/queues.rb:50:intransaction'
/Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/api.rb:38:in call' /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/web_interface.rb:39:inblock in class:WebInterface'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1610:in call' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1610:inblock in compile!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:in []' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:inblock (3 levels) in route!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:993:in route_eval' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:inblock (2 levels) in route!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1014:in block in process_route' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1012:incatch'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1012:in process_route' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:972:inblock in route!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:971:in each' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:971:inroute!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1084:in block in dispatch!' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:inblock in invoke'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in catch' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:ininvoke'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1081:in dispatch!' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:906:inblock in call!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in block in invoke' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:incatch'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in invoke' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:906:incall!'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:894:in call' /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.0/lib/fake_sqs/catch_errors.rb:12:incall'
/Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in call' /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:incall'
/Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in call' /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:incall'
/Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in call' /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:incall'
/Library/Ruby/Gems/2.0.0/gems/rack-1.6.1/lib/rack/nulllogger.rb:9:in call' /Library/Ruby/Gems/2.0.0/gems/rack-1.6.1/lib/rack/head.rb:13:incall'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:21:in call' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:181:incall'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:2021:in call' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:inblock in call'
/Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1795:in synchronize' /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:incall'
/Library/Ruby/Gems/2.0.0/gems/rack-1.6.1/lib/rack/handler/webrick.rb:89:in service' /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:138:inservice'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:94:in run' /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/server.rb:295:inblock in start_thread'
localhost - - [05/Oct/2015:14:38:07 AEDT] "POST / HTTP/1.1" 400 211

I get a 500 with this stack trace when I try to GetQueueAttributes

I get a 500 with this stack trace when I try to GetQueueAttributes

2016-03-10 10:20:23 - ArgumentError - wrong number of arguments (1 for 2):
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/actions/get_queue_attributes.rb:11:in `call'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/api.rb:39:in `block in call'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/queues.rb:48:in `block in transaction'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/memory_database.rb:21:in `block in transaction'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/memory_database.rb:20:in `synchronize'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/memory_database.rb:20:in `transaction'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/queues.rb:47:in `transaction'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/api.rb:38:in `call'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/web_interface.rb:39:in `block in <class:WebInterface>'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:in `block in compile!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in `[]'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in `block (3 levels) in route!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:994:in `route_eval'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in `block (2 levels) in route!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1015:in `block in process_route'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:in `catch'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:in `process_route'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:973:in `block in route!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:in `each'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:in `route!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1085:in `block in dispatch!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `block in invoke'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `catch'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `invoke'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1082:in `dispatch!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:in `block in call!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `block in invoke'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `catch'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `invoke'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:in `call!'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:895:in `call'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/show_output.rb:13:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:in `call'
    /Library/Ruby/Gems/2.0.0/gems/fake_sqs-0.3.1/lib/fake_sqs/catch_errors.rb:12:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-1.6.4/lib/rack/logger.rb:15:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:212:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-1.6.4/lib/rack/head.rb:13:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/show_exceptions.rb:25:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:182:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:2013:in `call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in `block in call'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1787:in `synchronize'
    /Library/Ruby/Gems/2.0.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in `call'
    /Library/Ruby/Gems/2.0.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service'
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
127.0.0.1 - - [10/Mar/2016:10:20:23 -0600] "POST / HTTP/1.1" 500 - 0.0215

DeleteMessageBatch response differs from AWS implementation

A call to the queue server to delete a batch of messages returns something like the following response:

import boto3 as _boto3
client = _boto3.client('sqs', 'foo', endpoint_url='http://127.0.0.1:4568')
client.delete_message_batch(
    QueueUrl='http://127.0.0.1:4568/Q', 
    Entries=[{'Id': 'msg-id-1', 'ReceiptHandle': 'b3dc3dba18fd5fbbb312b733a69a5a4860e98007'},
                   {'Id': 'msg-id-2', 'ReceiptHandle': 'foo'}]
)
{
    "Successful": [{"Id": "[\"DeleteMessageBatchRequestEntry.1.ReceiptHandle\",\"b3dc3dba18fd5fbbb312b733a69a5a4860e98007\"]"}, {"Id": "[\"DeleteMessageBatchRequestEntry.2.ReceiptHandle\", \"foo\"]"}], "ResponseMetadata": {"...shortened..."}
}

following the AWS/Boto documentation only the message ID defined by the client should be returned (http://boto3.readthedocs.io/en/latest/reference/services/sqs.html#SQS.Client.delete_message_batch)

The result should look something like this:

{
    "Successful": [{"Id": "msg-id-1"}, {"Id": "msg-id-2"}], 
    "ResponseMetadata": {"...shortened..."}
}

Support for long polling

We use fake SQS on our dev environments. As part of that we have a script that acts like the elastic beanstalk worker tier that uses a 20 second long poll so we don't have to use sleep()'s or hit SQS constantly.

DeleteQueue/CreateQueue resuscitates the deleted queue

I have Fake SQS running as a service in a docker container (see spurious io). My tests use a single queue name which thus gets to be deleted and recreated multiple times during the test run. The problem is that while on DeleteQueue, the queue disappears from the list of queues, on CreateQueue the old queue is created (which can be seen in the number of available/visible messages which remains the same before the delete and after the create).

Is this by design? Is there anything I can do about it short of creating a PR?

SendMessage /:acct/:queue

So the according to the AWS spec for SQS (2012-11-05) a SendMessage request has this form.

http://sqs.us-east-1.amazonaws.com/123456789012/testQueue/
?Action=SendMessage
&MessageBody=This+is+a+test+message
&MessageAttribute.1.Name=test_attribute_name_1
&MessageAttribute.1.Value.StringValue=test_attribute_value_1
&MessageAttribute.1.Value.DataType=String
&MessageAttribute.2.Name=test_attribute_name_2
&MessageAttribute.2.Value.StringValue=test_attribute_value_2
&MessageAttribute.2.Value.DataType=String
&Version=2012-11-05
&Expires=2014-05-05T22%3A52%3A43PST
&AUTHPARAMS

You'll notice here the URL looks like this:

http://sqs.us-east-1.amazonaws.com/123456789012/testQueue/
# http://sqs.us-east-1.amazonaws.com/:acctid/:queue

But the sinatra handler we have only accounts for queue name.

post "/:queue" do |queue|
   settings.api.call(action, queue, params)
end

So this causes sinatra to break when I submit requests of that form (i.e. /:acctid/:queue) for SendMessage other things work fine.

The library I'm using, https://github.com/aristidb/aws doesn't allow me to modify the path parameters because the spec should always abide by /:acctid/:qeueue for SendMessage, is there a way I can modify this handler to account for this scenario (and just ignore acctid altogether?).

post "/:acctid/:queue" do |acctid, queue|
   settings.api.call(action, queue, params)
end

Sorry I'm newish to ruby. But is there a way I can generate a new binary based off this additional handler?

License missing from gemspec

RubyGems.org doesn't report a license for your gem. This is because it is not specified in the gemspec of your last release.

via e.g.

spec.license = 'MIT'
# or
spec.licenses = ['MIT', 'GPL-2']

Including a license in your gemspec is an easy way for rubygems.org and other tools to check how your gem is licensed. As you can imagine, scanning your repository for a LICENSE file or parsing the README, and then attempting to identify the license or licenses is much more difficult and more error prone. So, even for projects that already specify a license, including a license in your gemspec is a good practice. See, for example, how rubygems.org uses the gemspec to display the rails gem license.

There is even a License Finder gem to help companies/individuals ensure all gems they use meet their licensing needs. This tool depends on license information being available in the gemspec. This is an important enough issue that even Bundler now generates gems with a default 'MIT' license.

I hope you'll consider specifying a license in your gemspec. If not, please just close the issue with a nice message. In either case, I'll follow up. Thanks for your time!

Appendix:

If you need help choosing a license (sorry, I haven't checked your readme or looked for a license file), GitHub has created a license picker tool. Code without a license specified defaults to 'All rights reserved'-- denying others all rights to use of the code.
Here's a list of the license names I've found and their frequencies

p.s. In case you're wondering how I found you and why I made this issue, it's because I'm collecting stats on gems (I was originally looking for download data) and decided to collect license metadata,too, and make issues for gemspecs not specifying a license as a public service :). See the previous link or my blog post about this project for more information.

Allow configurable startup timeout

Currently, the timeout is configurable wait_until_up:

    def wait_until_up(deadline = Time.now + 2)

... but that parameter is used nowhere else in the code. Perhaps this should be taken from @options passed into the constructor?

sporadic failure in file database specs

The "set message timeout and wait for message to come" message action acceptance spec fails under the file database on a significant percentage of runs, but not all.

Reproduction steps:

  • Using ruby 2.4.1 (I expect it affects other rubies, but have only confirmed with this version so far)
  • checkout master branch, bundle install, etc.
  • run rake spec:file a handful of times
  • spec/acceptance/message_actions_spec.rb:235 will fail about half the time

Fifo Queues

Hey

Is there any intention to implement FIFO queues?

Cheers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.