iain / fake_sqs Goto Github PK
View Code? Open in Web Editor NEWProvides a fake SQS server that you can run locally to test against
License: MIT License
Provides a fake SQS server that you can run locally to test against
License: MIT License
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.
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>'
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
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?
It seems like 4568 is hardcoded as the port.
Is there a way to set this? A runtime flag perhaps?
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 }
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.
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?
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:in
call'
/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:in
block 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:in
transaction'
/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:in
block 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:in
block 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:in
block (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:in
block (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:in
catch'
/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:in
block 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:in
route!'
/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:in
block 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:in
invoke'
/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:in
block 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:in
catch'
/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:in
call!'
/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: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.1/lib/rack/nulllogger.rb:9:in call' /Library/Ruby/Gems/2.0.0/gems/rack-1.6.1/lib/rack/head.rb:13:in
call'
/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:in
call'
/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:in
block 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:in
call'
/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: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'
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
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
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..."}
}
SQS now supports FIFO queues: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html which have some major differences.
Existing (what they now called "standard") queues cannot be converted to FIFO, the same should be true in fake_sqs as well.
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.
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?
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?
MD5 validation was added to the aws-sdk in version 1.16: http://aws.amazon.com/releasenotes/Ruby/4258434146607844
It works fine for sent messages but it expects a different tag for the md5 checksum receiving messages; namely, md5_of_body instead of md5_of_message_body.
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.
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?
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:
rake spec:file
a handful of timesHey
Is there any intention to implement FIFO queues?
Cheers
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.