diff --git a/lib/sidekiq/cli.rb b/lib/sidekiq/cli.rb index 433cef39..e5afbe3c 100644 --- a/lib/sidekiq/cli.rb +++ b/lib/sidekiq/cli.rb @@ -2,15 +2,20 @@ require 'optparse' require 'sidekiq/version' require 'sidekiq/util' require 'sidekiq/redis_connection' -require 'sidekiq/client' require 'sidekiq/manager' module Sidekiq class CLI include Util + attr_accessor :options, :code + def initialize - parse_options + @code = nil + end + + def parse(args=ARGV) + parse_options(args) validate! boot_system end @@ -36,6 +41,10 @@ module Sidekiq private + def die(code) + exit(code) + end + def detected_environment @options[:environment] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development' end @@ -66,11 +75,11 @@ module Sidekiq log " to load your worker classes with -r [DIR|FILE]." log "==================================================================" log @parser - exit(1) + die(1) end end - def parse_options(argv=ARGV) + def parse_options(argv) @options = { :verbose => false, :queues => [], @@ -115,7 +124,7 @@ module Sidekiq @parser.banner = "sidekiq [options]" @parser.on_tail "-h", "--help", "Show help" do log @parser - exit 1 + die 1 end @parser.parse!(argv) end diff --git a/test/fake_env.rb b/test/fake_env.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/test_cli.rb b/test/test_cli.rb new file mode 100644 index 00000000..2b91d905 --- /dev/null +++ b/test/test_cli.rb @@ -0,0 +1,49 @@ +require 'helper' +require 'sidekiq/cli' + +class TestCli < MiniTest::Unit::TestCase + describe 'with cli' do + before do + @cli = new_cli + end + + it 'blows up with an invalid require' do + assert_raises ArgumentError do + @cli.parse(['sidekiq', '-r', 'foobar']) + end + end + + it 'blows up with invalid Ruby' do + @cli.parse(['sidekiq', '-r', './test/fake_env.rb']) + assert($LOADED_FEATURES.any? { |x| x =~ /fake_env/ }) + assert @cli.valid? + end + + it 'changes concurrency' do + @cli.parse(['sidekiq', '-c', '60', '-r', './test/fake_env.rb']) + assert_equal 60, @cli.options[:processor_count] + end + + it 'changes queues' do + @cli.parse(['sidekiq', '-q', 'foo', '-r', './test/fake_env.rb']) + assert_equal ['foo'], @cli.options[:queues] + end + + it 'handles weights' do + @cli.parse(['sidekiq', '-q', 'foo,3', '-q', 'bar', '-r', './test/fake_env.rb']) + assert_equal %w(bar foo foo foo), @cli.options[:queues].sort + end + + def new_cli + cli = Sidekiq::CLI.new + def cli.die(code) + @code = code + end + + def cli.valid? + !@code + end + cli + end + end +end