fastly_nsq 1.17.0 → 1.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.git-blame-ignore-revs +6 -0
- data/.ruby-version +1 -1
- data/.travis.yml +4 -2
- data/ChangeLog.md +8 -1
- data/Gemfile +8 -8
- data/README.md +1 -1
- data/Rakefile +10 -11
- data/fastly_nsq.gemspec +26 -26
- data/lib/fastly_nsq/cli.rb +43 -50
- data/lib/fastly_nsq/consumer.rb +6 -6
- data/lib/fastly_nsq/feeder.rb +5 -7
- data/lib/fastly_nsq/http/nsqd.rb +28 -28
- data/lib/fastly_nsq/http/nsqlookupd.rb +11 -11
- data/lib/fastly_nsq/http.rb +4 -4
- data/lib/fastly_nsq/launcher.rb +16 -16
- data/lib/fastly_nsq/listener.rb +16 -16
- data/lib/fastly_nsq/manager.rb +13 -12
- data/lib/fastly_nsq/message.rb +4 -4
- data/lib/fastly_nsq/messenger.rb +7 -7
- data/lib/fastly_nsq/new_relic.rb +8 -8
- data/lib/fastly_nsq/priority_queue.rb +2 -2
- data/lib/fastly_nsq/priority_thread_pool.rb +3 -3
- data/lib/fastly_nsq/producer.rb +7 -7
- data/lib/fastly_nsq/safe_thread.rb +1 -1
- data/lib/fastly_nsq/testing.rb +4 -3
- data/lib/fastly_nsq/tls_options.rb +6 -6
- data/lib/fastly_nsq/version.rb +1 -1
- data/lib/fastly_nsq.rb +27 -29
- data/spec/cli_spec.rb +2 -2
- data/spec/consumer_spec.rb +12 -12
- data/spec/fastly_nsq_spec.rb +31 -31
- data/spec/feeder_spec.rb +4 -4
- data/spec/http/nsqd_spec.rb +23 -23
- data/spec/http/nsqlookupd_spec.rb +19 -19
- data/spec/http_spec.rb +22 -22
- data/spec/integration_spec.rb +10 -10
- data/spec/launcher_spec.rb +21 -21
- data/spec/listener_spec.rb +50 -50
- data/spec/manager_spec.rb +27 -27
- data/spec/matchers/delegate.rb +4 -4
- data/spec/message_spec.rb +19 -19
- data/spec/messenger_spec.rb +63 -64
- data/spec/new_relic.rb +27 -27
- data/spec/priority_thread_pool_spec.rb +2 -2
- data/spec/producer_spec.rb +30 -30
- data/spec/spec_helper.rb +12 -12
- data/spec/support/http.rb +2 -2
- data/spec/support/webmock.rb +1 -1
- data/spec/testing_spec.rb +12 -12
- data/spec/tls_options_spec.rb +47 -47
- metadata +7 -8
- data/.rubocop.yml +0 -68
    
        data/spec/cli_spec.rb
    CHANGED
    
    
    
        data/spec/consumer_spec.rb
    CHANGED
    
    | @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 4 |  | 
| 5 5 | 
             
            RSpec.describe FastlyNsq::Consumer do
         | 
| 6 | 
            -
              let!(:topic) | 
| 7 | 
            -
              let!(:channel) {  | 
| 8 | 
            -
              let!(:queue) | 
| 6 | 
            +
              let!(:topic) { "fnsq" }
         | 
| 7 | 
            +
              let!(:channel) { "fnsq" }
         | 
| 8 | 
            +
              let!(:queue) { nil }
         | 
| 9 9 |  | 
| 10 10 | 
             
              subject { described_class.new(topic: topic, channel: channel, queue: queue) }
         | 
| 11 11 |  | 
| @@ -16,15 +16,15 @@ RSpec.describe FastlyNsq::Consumer do | |
| 16 16 |  | 
| 17 17 | 
             
              it { should be_connected }
         | 
| 18 18 |  | 
| 19 | 
            -
              it  | 
| 19 | 
            +
              it "should terminate" do
         | 
| 20 20 | 
             
                expect { subject.terminate }.to change(subject, :connected?).to(false)
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 | 
            -
              describe  | 
| 23 | 
            +
              describe "with a specified queue" do
         | 
| 24 24 | 
             
                let!(:queue) { Queue.new }
         | 
| 25 25 |  | 
| 26 | 
            -
                it  | 
| 27 | 
            -
                  message =  | 
| 26 | 
            +
                it "passes #queue to Nsq::Consumer" do
         | 
| 27 | 
            +
                  message = "foo"
         | 
| 28 28 |  | 
| 29 29 | 
             
                  FastlyNsq::Messenger.deliver(message: message, topic: topic)
         | 
| 30 30 |  | 
| @@ -41,16 +41,16 @@ RSpec.describe FastlyNsq::Consumer do | |
| 41 41 | 
             
              it { should delegate(:pop).to(:connection) }
         | 
| 42 42 | 
             
              it { should delegate(:pop_without_blocking).to(:connection) }
         | 
| 43 43 |  | 
| 44 | 
            -
              describe  | 
| 45 | 
            -
                let(:message) {  | 
| 44 | 
            +
              describe "with a message" do
         | 
| 45 | 
            +
                let(:message) { "foo" }
         | 
| 46 46 |  | 
| 47 47 | 
             
                before { FastlyNsq::Messenger.deliver(message: message, topic: topic) }
         | 
| 48 48 |  | 
| 49 | 
            -
                it  | 
| 49 | 
            +
                it "should not be empty" do
         | 
| 50 50 | 
             
                  expect { subject }.to eventually(be_empty).within(15)
         | 
| 51 51 | 
             
                end
         | 
| 52 52 |  | 
| 53 | 
            -
                describe  | 
| 53 | 
            +
                describe "that has finished" do
         | 
| 54 54 | 
             
                  before { subject.pop.finish }
         | 
| 55 55 |  | 
| 56 56 | 
             
                  it { should be_empty }
         | 
    
        data/spec/fastly_nsq_spec.rb
    CHANGED
    
    | @@ -1,89 +1,89 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 4 |  | 
| 5 5 | 
             
            RSpec.describe FastlyNsq do
         | 
| 6 | 
            -
              describe  | 
| 6 | 
            +
              describe "#configure" do
         | 
| 7 7 | 
             
                specify { expect { |b| described_class.configure(&b) }.to yield_with_args(described_class) }
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 | 
            -
              describe  | 
| 10 | 
            +
              describe "#listen" do
         | 
| 11 11 | 
             
                let!(:default_channel) { subject.channel }
         | 
| 12 | 
            -
                let!(:topic) {  | 
| 12 | 
            +
                let!(:topic) { "fnsq" }
         | 
| 13 13 |  | 
| 14 | 
            -
                before { subject.channel =  | 
| 14 | 
            +
                before { subject.channel = "fnsq" }
         | 
| 15 15 | 
             
                after { subject.channel = default_channel }
         | 
| 16 16 |  | 
| 17 | 
            -
                it  | 
| 17 | 
            +
                it "creates a listener" do
         | 
| 18 18 | 
             
                  expect { subject.listen topic, ->(*) {} }.to change { subject.manager.topics }.to([topic])
         | 
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| 21 | 
            -
                it  | 
| 21 | 
            +
                it "creates a listener with a specific priority" do
         | 
| 22 22 | 
             
                  listener = subject.listen topic, ->(*) {}, priority: 10
         | 
| 23 23 | 
             
                  expect(listener.priority).to eq(10)
         | 
| 24 24 | 
             
                end
         | 
| 25 25 | 
             
              end
         | 
| 26 26 |  | 
| 27 | 
            -
              describe  | 
| 27 | 
            +
              describe "#channel=" do
         | 
| 28 28 | 
             
                let!(:default_channel) { subject.channel }
         | 
| 29 29 | 
             
                after { subject.channel = default_channel }
         | 
| 30 30 |  | 
| 31 | 
            -
                it  | 
| 31 | 
            +
                it "allows the channel to be set and retrieved" do
         | 
| 32 32 | 
             
                  expect(subject.channel).to be_nil
         | 
| 33 | 
            -
                  subject.channel =  | 
| 34 | 
            -
                  expect(subject.channel).to eq( | 
| 33 | 
            +
                  subject.channel = "foo"
         | 
| 34 | 
            +
                  expect(subject.channel).to eq("foo")
         | 
| 35 35 | 
             
                end
         | 
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| 38 | 
            -
              describe  | 
| 38 | 
            +
              describe "#logger" do
         | 
| 39 39 | 
             
                let!(:default_logger) { subject.logger }
         | 
| 40 40 | 
             
                after { subject.logger = default_logger }
         | 
| 41 41 |  | 
| 42 | 
            -
                it  | 
| 42 | 
            +
                it "returns the set logger" do
         | 
| 43 43 | 
             
                  logger = Logger.new(nil)
         | 
| 44 44 | 
             
                  subject.logger = logger
         | 
| 45 45 |  | 
| 46 46 | 
             
                  expect(subject.logger).to eq logger
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 | 
            -
                it  | 
| 49 | 
            +
                it "sets the default logger if none is set" do
         | 
| 50 50 | 
             
                  subject.instance_variable_set(:@logger, nil)
         | 
| 51 51 | 
             
                  expect(subject.instance_variable_get(:@logger)).to be nil
         | 
| 52 52 | 
             
                  logger = subject.logger
         | 
| 53 53 |  | 
| 54 54 | 
             
                  expect(logger).to be_instance_of(Logger)
         | 
| 55 | 
            -
                  expect(logger.instance_variable_get(:@logdev).dev).to eq( | 
| 55 | 
            +
                  expect(logger.instance_variable_get(:@logdev).dev).to eq($stderr)
         | 
| 56 56 | 
             
                  expect(logger).to eq(Nsq.logger)
         | 
| 57 57 | 
             
                end
         | 
| 58 58 | 
             
              end
         | 
| 59 59 |  | 
| 60 | 
            -
              describe  | 
| 60 | 
            +
              describe "#logger=" do
         | 
| 61 61 | 
             
                let!(:default_logger) { subject.logger }
         | 
| 62 62 | 
             
                after { subject.logger = default_logger }
         | 
| 63 63 |  | 
| 64 | 
            -
                it  | 
| 65 | 
            -
                  logger = Logger.new( | 
| 64 | 
            +
                it "allows the logger to be set and retrieved" do
         | 
| 65 | 
            +
                  logger = Logger.new($stdout)
         | 
| 66 66 | 
             
                  subject.logger = logger
         | 
| 67 67 |  | 
| 68 68 | 
             
                  expect(subject.logger).to eq logger
         | 
| 69 69 | 
             
                end
         | 
| 70 70 |  | 
| 71 | 
            -
                it  | 
| 72 | 
            -
                  logger = Logger.new( | 
| 71 | 
            +
                it "sets Nsq.logger" do
         | 
| 72 | 
            +
                  logger = Logger.new($stdout)
         | 
| 73 73 | 
             
                  subject.logger = logger
         | 
| 74 74 |  | 
| 75 75 | 
             
                  expect(Nsq.logger).to eq logger
         | 
| 76 76 | 
             
                end
         | 
| 77 77 | 
             
              end
         | 
| 78 78 |  | 
| 79 | 
            -
              describe  | 
| 80 | 
            -
                it  | 
| 79 | 
            +
              describe "#manager" do
         | 
| 80 | 
            +
                it "represents the active default manager" do
         | 
| 81 81 | 
             
                  expect(subject.manager).not_to be_stopped
         | 
| 82 82 | 
             
                end
         | 
| 83 83 | 
             
              end
         | 
| 84 84 |  | 
| 85 | 
            -
              describe  | 
| 86 | 
            -
                it  | 
| 85 | 
            +
              describe "#manager=" do
         | 
| 86 | 
            +
                it "transfers to specified manager" do
         | 
| 87 87 | 
             
                  old_manager = subject.manager
         | 
| 88 88 | 
             
                  new_manager = FastlyNsq::Manager.new
         | 
| 89 89 |  | 
| @@ -93,17 +93,17 @@ RSpec.describe FastlyNsq do | |
| 93 93 | 
             
                end
         | 
| 94 94 | 
             
              end
         | 
| 95 95 |  | 
| 96 | 
            -
              describe  | 
| 97 | 
            -
                it  | 
| 98 | 
            -
                  expect(subject.lookupd_http_addresses).to eq(ENV[ | 
| 96 | 
            +
              describe "#lookupd_http_addresses" do
         | 
| 97 | 
            +
                it "retreives NSQLOOKUPD_HTTP_ADDRESS" do
         | 
| 98 | 
            +
                  expect(subject.lookupd_http_addresses).to eq(ENV["NSQLOOKUPD_HTTP_ADDRESS"].split(","))
         | 
| 99 99 | 
             
                end
         | 
| 100 100 | 
             
              end
         | 
| 101 101 |  | 
| 102 | 
            -
              describe  | 
| 102 | 
            +
              describe "#on" do
         | 
| 103 103 | 
             
                before { FastlyNsq.events.each { |(_, v)| v.clear } }
         | 
| 104 | 
            -
                after | 
| 104 | 
            +
                after { FastlyNsq.events.each { |(_, v)| v.clear } }
         | 
| 105 105 |  | 
| 106 | 
            -
                it  | 
| 106 | 
            +
                it "registers callbacks for events" do
         | 
| 107 107 | 
             
                  %i[startup shutdown heartbeat].each do |event|
         | 
| 108 108 | 
             
                    block = -> {}
         | 
| 109 109 | 
             
                    FastlyNsq.on(event, &block)
         | 
| @@ -111,7 +111,7 @@ RSpec.describe FastlyNsq do | |
| 111 111 | 
             
                  end
         | 
| 112 112 | 
             
                end
         | 
| 113 113 |  | 
| 114 | 
            -
                it  | 
| 114 | 
            +
                it "limits callback registration to valid events" do
         | 
| 115 115 | 
             
                  expect { FastlyNsq.on(:foo, &-> {}) }.to raise_error(ArgumentError, /Invalid event name/)
         | 
| 116 116 | 
             
                end
         | 
| 117 117 | 
             
              end
         | 
    
        data/spec/feeder_spec.rb
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 4 |  | 
| 5 5 | 
             
            RSpec.describe FastlyNsq::Feeder do
         | 
| 6 | 
            -
              describe  | 
| 7 | 
            -
                it  | 
| 6 | 
            +
              describe "#push" do
         | 
| 7 | 
            +
                it "sends message to processor with the specified priority" do
         | 
| 8 8 | 
             
                  messages = []
         | 
| 9 9 | 
             
                  processor = ->(m) { messages << m }
         | 
| 10 10 | 
             
                  priority = 5
         | 
| 11 | 
            -
                  message =  | 
| 11 | 
            +
                  message = "foo"
         | 
| 12 12 |  | 
| 13 13 | 
             
                  feeder = described_class.new(processor, priority)
         | 
| 14 14 |  | 
    
        data/spec/http/nsqd_spec.rb
    CHANGED
    
    | @@ -1,77 +1,77 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 | 
            +
            require "fastly_nsq/http/nsqd"
         | 
| 5 5 |  | 
| 6 6 | 
             
            RSpec.describe FastlyNsq::Http::Nsqd, :webmock do
         | 
| 7 | 
            -
              let(:base_uri) {  | 
| 7 | 
            +
              let(:base_uri) { "http://example.com" }
         | 
| 8 8 |  | 
| 9 | 
            -
              it  | 
| 9 | 
            +
              it "makes simple get requests" do
         | 
| 10 10 | 
             
                %w[ping info config/nsqlookupd_tcp_addresses].each do |api|
         | 
| 11 11 | 
             
                  url = "#{base_uri}/#{api}"
         | 
| 12 12 | 
             
                  stub_request(:get, url)
         | 
| 13 | 
            -
                  FastlyNsq::Http::Nsqd.send(api.tr( | 
| 13 | 
            +
                  FastlyNsq::Http::Nsqd.send(api.tr("/", "_").to_sym, base_uri: base_uri)
         | 
| 14 14 |  | 
| 15 15 | 
             
                  expect(a_request(:get, url)).to have_been_requested
         | 
| 16 16 | 
             
                end
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
              describe  | 
| 20 | 
            -
                it  | 
| 19 | 
            +
              describe "stats" do
         | 
| 20 | 
            +
                it "can fetch stats" do
         | 
| 21 21 | 
             
                  url = "#{base_uri}/stats?topic=lol&channel=foo&format=json"
         | 
| 22 22 | 
             
                  stub_request(:get, url)
         | 
| 23 | 
            -
                  data = { | 
| 23 | 
            +
                  data = {topic: "lol", channel: "foo", format: "json"}
         | 
| 24 24 |  | 
| 25 | 
            -
                  FastlyNsq::Http::Nsqd.stats(topic:  | 
| 25 | 
            +
                  FastlyNsq::Http::Nsqd.stats(topic: "lol", channel: "foo", base_uri: base_uri)
         | 
| 26 26 |  | 
| 27 27 | 
             
                  expect(a_request(:get, url).with(query: data)).to have_been_requested
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 | 
            -
                it  | 
| 30 | 
            +
                it "raises InvaildFormatError if provided format is not in list" do
         | 
| 31 31 | 
             
                  expect do
         | 
| 32 | 
            -
                    FastlyNsq::Http::Nsqd.stats(format:  | 
| 32 | 
            +
                    FastlyNsq::Http::Nsqd.stats(format: "foo")
         | 
| 33 33 | 
             
                  end.to raise_error(FastlyNsq::Http::Nsqd::InvalidFormatError)
         | 
| 34 34 | 
             
                end
         | 
| 35 35 | 
             
              end
         | 
| 36 36 |  | 
| 37 | 
            -
              it  | 
| 37 | 
            +
              it "can publish messages" do
         | 
| 38 38 | 
             
                url = "#{base_uri}/pub?topic=lol&defer=999"
         | 
| 39 39 | 
             
                stub_request(:post, url)
         | 
| 40 | 
            -
                data = { | 
| 40 | 
            +
                data = {topic: "lol", defer: 999}
         | 
| 41 41 |  | 
| 42 | 
            -
                FastlyNsq::Http::Nsqd.pub(topic:  | 
| 42 | 
            +
                FastlyNsq::Http::Nsqd.pub(topic: "lol", defer: 999, message: "SOMETHING", base_uri: base_uri)
         | 
| 43 43 |  | 
| 44 | 
            -
                expect(a_request(:post, url).with(query: data, body:  | 
| 44 | 
            +
                expect(a_request(:post, url).with(query: data, body: "SOMETHING")).to have_been_requested
         | 
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 | 
            -
              it  | 
| 47 | 
            +
              it "can publish multiple messages" do
         | 
| 48 48 | 
             
                url = "#{base_uri}/mpub?topic=lol&binary=false"
         | 
| 49 49 | 
             
                stub_request(:post, url)
         | 
| 50 | 
            -
                data = { | 
| 50 | 
            +
                data = {topic: "lol"}
         | 
| 51 51 | 
             
                body = "ONE MESSAGE\nTWO MESSAGE\nRED MESSAGE\nBLUE MESSAGE"
         | 
| 52 52 |  | 
| 53 | 
            -
                FastlyNsq::Http::Nsqd.mpub(topic:  | 
| 53 | 
            +
                FastlyNsq::Http::Nsqd.mpub(topic: "lol", message: body, base_uri: base_uri)
         | 
| 54 54 |  | 
| 55 55 | 
             
                expect(a_request(:post, url).with(query: data, body: body)).to have_been_requested
         | 
| 56 56 | 
             
              end
         | 
| 57 57 |  | 
| 58 | 
            -
              it  | 
| 58 | 
            +
              it "can create, delete, empty, pause and unpause topics and channels" do
         | 
| 59 59 | 
             
                verbs = %w[create delete empty pause unpause]
         | 
| 60 60 |  | 
| 61 61 | 
             
                verbs.each do |verb|
         | 
| 62 62 | 
             
                  url = "#{base_uri}/topic/#{verb}?topic=lol"
         | 
| 63 63 | 
             
                  stub_request(:post, url)
         | 
| 64 | 
            -
                  data = { | 
| 64 | 
            +
                  data = {topic: "lol"}
         | 
| 65 65 |  | 
| 66 | 
            -
                  FastlyNsq::Http::Nsqd.send("topic_#{verb}".to_sym, topic:  | 
| 66 | 
            +
                  FastlyNsq::Http::Nsqd.send("topic_#{verb}".to_sym, topic: "lol", base_uri: base_uri)
         | 
| 67 67 |  | 
| 68 68 | 
             
                  expect(a_request(:post, url).with(query: data)).to have_been_requested
         | 
| 69 69 |  | 
| 70 70 | 
             
                  url = "#{base_uri}/channel/#{verb}?topic=lol&channel=foo"
         | 
| 71 71 | 
             
                  stub_request(:post, url)
         | 
| 72 | 
            -
                  data = { | 
| 72 | 
            +
                  data = {topic: "lol", channel: "foo"}
         | 
| 73 73 |  | 
| 74 | 
            -
                  FastlyNsq::Http::Nsqd.send("channel_#{verb}".to_sym, topic:  | 
| 74 | 
            +
                  FastlyNsq::Http::Nsqd.send("channel_#{verb}".to_sym, topic: "lol", channel: "foo", base_uri: base_uri)
         | 
| 75 75 |  | 
| 76 76 | 
             
                  expect(a_request(:post, url).with(query: data)).to have_been_requested
         | 
| 77 77 | 
             
                end
         | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 | 
            +
            require "fastly_nsq/http/nsqlookupd"
         | 
| 5 5 |  | 
| 6 6 | 
             
            RSpec.describe FastlyNsq::Http::Nsqlookupd, :webmock do
         | 
| 7 | 
            -
              let(:base_uri) {  | 
| 7 | 
            +
              let(:base_uri) { "http://example.com" }
         | 
| 8 8 |  | 
| 9 | 
            -
              it  | 
| 9 | 
            +
              it "makes simple get requests" do
         | 
| 10 10 | 
             
                %w[topics nodes ping info].each do |api|
         | 
| 11 11 | 
             
                  url = "#{base_uri}/#{api}"
         | 
| 12 12 | 
             
                  stub_request(:get, url)
         | 
| @@ -16,52 +16,52 @@ RSpec.describe FastlyNsq::Http::Nsqlookupd, :webmock do | |
| 16 16 | 
             
                end
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
              it  | 
| 19 | 
            +
              it "can lookup producers for a topic" do
         | 
| 20 20 | 
             
                url = "#{base_uri}/lookup?topic=lol"
         | 
| 21 21 | 
             
                stub_request(:get, url)
         | 
| 22 | 
            -
                data = { | 
| 22 | 
            +
                data = {topic: "lol"}
         | 
| 23 23 |  | 
| 24 | 
            -
                FastlyNsq::Http::Nsqlookupd.lookup(topic:  | 
| 24 | 
            +
                FastlyNsq::Http::Nsqlookupd.lookup(topic: "lol", base_uri: base_uri)
         | 
| 25 25 |  | 
| 26 26 | 
             
                expect(a_request(:get, url).with(query: data)).to have_been_requested
         | 
| 27 27 | 
             
              end
         | 
| 28 28 |  | 
| 29 | 
            -
              it  | 
| 29 | 
            +
              it "can lookup channels for a topic" do
         | 
| 30 30 | 
             
                url = "#{base_uri}/channels?topic=lol"
         | 
| 31 31 | 
             
                stub_request(:get, url)
         | 
| 32 | 
            -
                data = { | 
| 32 | 
            +
                data = {topic: "lol"}
         | 
| 33 33 |  | 
| 34 | 
            -
                FastlyNsq::Http::Nsqlookupd.channels(topic:  | 
| 34 | 
            +
                FastlyNsq::Http::Nsqlookupd.channels(topic: "lol", base_uri: base_uri)
         | 
| 35 35 |  | 
| 36 36 | 
             
                expect(a_request(:get, url).with(query: data)).to have_been_requested
         | 
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 | 
            -
              it  | 
| 39 | 
            +
              it "can delete a topic" do
         | 
| 40 40 | 
             
                url = "#{base_uri}/delete_topic?topic=lol"
         | 
| 41 41 | 
             
                stub_request(:get, url)
         | 
| 42 | 
            -
                data = { | 
| 42 | 
            +
                data = {topic: "lol"}
         | 
| 43 43 |  | 
| 44 | 
            -
                FastlyNsq::Http::Nsqlookupd.delete_topic(topic:  | 
| 44 | 
            +
                FastlyNsq::Http::Nsqlookupd.delete_topic(topic: "lol", base_uri: base_uri)
         | 
| 45 45 |  | 
| 46 46 | 
             
                expect(a_request(:get, url).with(query: data)).to have_been_requested
         | 
| 47 47 | 
             
              end
         | 
| 48 48 |  | 
| 49 | 
            -
              it  | 
| 49 | 
            +
              it "can delete a channel" do
         | 
| 50 50 | 
             
                url = "#{base_uri}/delete_channel?topic=lol&channel=foo"
         | 
| 51 51 | 
             
                stub_request(:get, url)
         | 
| 52 | 
            -
                data = { | 
| 52 | 
            +
                data = {topic: "lol", channel: "foo"}
         | 
| 53 53 |  | 
| 54 | 
            -
                FastlyNsq::Http::Nsqlookupd.delete_channel(topic:  | 
| 54 | 
            +
                FastlyNsq::Http::Nsqlookupd.delete_channel(topic: "lol", channel: "foo", base_uri: base_uri)
         | 
| 55 55 |  | 
| 56 56 | 
             
                expect(a_request(:get, url).with(query: data)).to have_been_requested
         | 
| 57 57 | 
             
              end
         | 
| 58 58 |  | 
| 59 | 
            -
              it  | 
| 59 | 
            +
              it "can tombstone a producer" do
         | 
| 60 60 | 
             
                url = "#{base_uri}/tombstone_topic_producer?topic=lol&node=localhost:8989"
         | 
| 61 61 | 
             
                stub_request(:get, url)
         | 
| 62 | 
            -
                data = { | 
| 62 | 
            +
                data = {topic: "lol", node: "localhost:8989"}
         | 
| 63 63 |  | 
| 64 | 
            -
                FastlyNsq::Http::Nsqlookupd.tombstone_topic_producer(topic:  | 
| 64 | 
            +
                FastlyNsq::Http::Nsqlookupd.tombstone_topic_producer(topic: "lol", node: "localhost:8989", base_uri: base_uri)
         | 
| 65 65 |  | 
| 66 66 | 
             
                expect(a_request(:get, url).with(query: data)).to have_been_requested
         | 
| 67 67 | 
             
              end
         | 
    
        data/spec/http_spec.rb
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 | 
            +
            require "fastly_nsq/http"
         | 
| 5 5 |  | 
| 6 6 | 
             
            RSpec.describe FastlyNsq::Http, :webmock do
         | 
| 7 | 
            -
              let(:base_url) {  | 
| 8 | 
            -
              describe  | 
| 9 | 
            -
                it  | 
| 7 | 
            +
              let(:base_url) { "http://example.com" }
         | 
| 8 | 
            +
              describe "get" do
         | 
| 9 | 
            +
                it "can make simple requests" do
         | 
| 10 10 | 
             
                  url = "#{base_url}/boop"
         | 
| 11 11 | 
             
                  stub_request(:get, url)
         | 
| 12 12 |  | 
| @@ -16,9 +16,9 @@ RSpec.describe FastlyNsq::Http, :webmock do | |
| 16 16 | 
             
                  expect(a_request(:get, url)).to have_been_requested.twice
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 | 
            -
                it  | 
| 19 | 
            +
                it "can make requests with params" do
         | 
| 20 20 | 
             
                  url = "#{base_url}/boop?sloop=noop"
         | 
| 21 | 
            -
                  data = { | 
| 21 | 
            +
                  data = {sloop: "noop"}
         | 
| 22 22 | 
             
                  stub_request(:get, url)
         | 
| 23 23 |  | 
| 24 24 | 
             
                  FastlyNsq::Http.new(uri: url).get(data)
         | 
| @@ -27,11 +27,11 @@ RSpec.describe FastlyNsq::Http, :webmock do | |
| 27 27 | 
             
                end
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 | 
            -
              describe  | 
| 31 | 
            -
                it  | 
| 30 | 
            +
              describe "post" do
         | 
| 31 | 
            +
                it "can make simple post requests" do
         | 
| 32 32 | 
             
                  url = "#{base_url}/boop?sloop=noop"
         | 
| 33 33 | 
             
                  stub_request(:post, url)
         | 
| 34 | 
            -
                  data = { | 
| 34 | 
            +
                  data = {sloop: "noop"}
         | 
| 35 35 |  | 
| 36 36 | 
             
                  FastlyNsq::Http.new(uri: URI.parse(url)).post(data)
         | 
| 37 37 | 
             
                  FastlyNsq::Http.new(uri: url).post(data)
         | 
| @@ -39,11 +39,11 @@ RSpec.describe FastlyNsq::Http, :webmock do | |
| 39 39 | 
             
                  expect(a_request(:post, url)).to have_been_requested.twice
         | 
| 40 40 | 
             
                end
         | 
| 41 41 |  | 
| 42 | 
            -
                it  | 
| 42 | 
            +
                it "can make post requests with bodies" do
         | 
| 43 43 | 
             
                  url = "#{base_url}/boop?sloop=noop"
         | 
| 44 44 | 
             
                  stub_request(:post, url)
         | 
| 45 | 
            -
                  data = { | 
| 46 | 
            -
                  body =  | 
| 45 | 
            +
                  data = {sloop: "noop"}
         | 
| 46 | 
            +
                  body = "SOME MESSAGE"
         | 
| 47 47 |  | 
| 48 48 | 
             
                  FastlyNsq::Http.new(uri: url).post(data, body)
         | 
| 49 49 |  | 
| @@ -51,18 +51,18 @@ RSpec.describe FastlyNsq::Http, :webmock do | |
| 51 51 | 
             
                end
         | 
| 52 52 | 
             
              end
         | 
| 53 53 |  | 
| 54 | 
            -
              describe  | 
| 55 | 
            -
                it  | 
| 56 | 
            -
                  ssl_url =  | 
| 54 | 
            +
              describe "SSL" do
         | 
| 55 | 
            +
                it "can be asked to use SSL" do
         | 
| 56 | 
            +
                  ssl_url = "https://example.com:80/boop"
         | 
| 57 57 | 
             
                  stub_request(:get, ssl_url)
         | 
| 58 58 |  | 
| 59 | 
            -
                  cert_file =  | 
| 60 | 
            -
                  key_file =  | 
| 59 | 
            +
                  cert_file = "/tmp/thing.cert"
         | 
| 60 | 
            +
                  key_file = "/tmp/thing.key"
         | 
| 61 61 |  | 
| 62 | 
            -
                  allow(File).to receive(:read).with(cert_file).and_return( | 
| 63 | 
            -
                  allow(File).to receive(:read).with(key_file).and_return( | 
| 64 | 
            -
                  allow(OpenSSL::X509::Certificate).to receive(:new).with( | 
| 65 | 
            -
                  allow(OpenSSL::PKey::RSA).to receive(:new).with( | 
| 62 | 
            +
                  allow(File).to receive(:read).with(cert_file).and_return("something")
         | 
| 63 | 
            +
                  allow(File).to receive(:read).with(key_file).and_return("something")
         | 
| 64 | 
            +
                  allow(OpenSSL::X509::Certificate).to receive(:new).with("something").and_return(true)
         | 
| 65 | 
            +
                  allow(OpenSSL::PKey::RSA).to receive(:new).with("something").and_return(true)
         | 
| 66 66 |  | 
| 67 67 | 
             
                  url = "#{base_url}/boop"
         | 
| 68 68 | 
             
                  http = FastlyNsq::Http.new(uri: url, cert_filename: cert_file, key_filename: key_file)
         | 
    
        data/spec/integration_spec.rb
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 4 |  | 
| 5 | 
            -
            RSpec.describe  | 
| 6 | 
            -
              let!(:topic) {  | 
| 7 | 
            -
              let!(:channel) {  | 
| 8 | 
            -
              let!(:message) { { | 
| 5 | 
            +
            RSpec.describe "integration" do
         | 
| 6 | 
            +
              let!(:topic) { "fnsq-topic" }
         | 
| 7 | 
            +
              let!(:channel) { "fnsq-channel" }
         | 
| 8 | 
            +
              let!(:message) { {"foo" => "bar"} }
         | 
| 9 9 |  | 
| 10 10 | 
             
              before { reset_topic(topic, channel: channel) }
         | 
| 11 11 |  | 
| 12 | 
            -
              it  | 
| 12 | 
            +
              it "processes jobs" do
         | 
| 13 13 | 
             
                received = nil
         | 
| 14 14 | 
             
                producer = FastlyNsq::Producer.new(topic: topic)
         | 
| 15 15 | 
             
                FastlyNsq::Listener.new(topic: topic, channel: channel, processor: ->(m) { received = m })
         | 
| @@ -18,8 +18,8 @@ RSpec.describe 'integration' do | |
| 18 18 | 
             
                expect { received&.body }.to eventually(eq(message)).within(2)
         | 
| 19 19 | 
             
              end
         | 
| 20 20 |  | 
| 21 | 
            -
              describe  | 
| 22 | 
            -
                it  | 
| 21 | 
            +
              describe "inline", :inline do
         | 
| 22 | 
            +
                it "processes job" do
         | 
| 23 23 | 
             
                  received = nil
         | 
| 24 24 | 
             
                  producer = FastlyNsq::Producer.new(topic: topic)
         | 
| 25 25 | 
             
                  FastlyNsq::Listener.new(topic: topic, channel: channel, processor: ->(m) { received = m })
         | 
| @@ -29,8 +29,8 @@ RSpec.describe 'integration' do | |
| 29 29 | 
             
                end
         | 
| 30 30 | 
             
              end
         | 
| 31 31 |  | 
| 32 | 
            -
              describe  | 
| 33 | 
            -
                it  | 
| 32 | 
            +
              describe "fake", :fake do
         | 
| 33 | 
            +
                it "stores jobs" do
         | 
| 34 34 | 
             
                  received = nil
         | 
| 35 35 | 
             
                  encoded_message = JSON.dump(message)
         | 
| 36 36 | 
             
                  producer = FastlyNsq::Producer.new(topic: topic)
         | 
    
        data/spec/launcher_spec.rb
    CHANGED
    
    | @@ -1,40 +1,40 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require "spec_helper"
         | 
| 4 4 |  | 
| 5 5 | 
             
            RSpec.describe FastlyNsq::Launcher do
         | 
| 6 | 
            -
              let!(:channel) | 
| 7 | 
            -
              let!(:options) | 
| 8 | 
            -
              let!(:topic) | 
| 6 | 
            +
              let!(:channel) { "fnsq" }
         | 
| 7 | 
            +
              let!(:options) { {max_threads: 3, timeout: 9} }
         | 
| 8 | 
            +
              let!(:topic) { "fnsq" }
         | 
| 9 9 |  | 
| 10 | 
            -
              let(:launcher) { FastlyNsq::Launcher.new | 
| 11 | 
            -
              let(:listener) | 
| 10 | 
            +
              let(:launcher) { FastlyNsq::Launcher.new(**options) }
         | 
| 11 | 
            +
              let(:listener) { FastlyNsq::Listener.new(topic: topic, channel: channel, processor: ->(*) {}) }
         | 
| 12 12 | 
             
              let(:manager) { launcher.manager }
         | 
| 13 13 |  | 
| 14 14 | 
             
              before { reset_topic(topic, channel: channel) }
         | 
| 15 15 | 
             
              before { expect { listener }.to eventually(be_connected).within(5) }
         | 
| 16 | 
            -
              after | 
| 16 | 
            +
              after { listener.terminate if listener.connected? }
         | 
| 17 17 |  | 
| 18 | 
            -
              it  | 
| 18 | 
            +
              it "creates a manager with correct options" do
         | 
| 19 19 | 
             
                launcher
         | 
| 20 20 |  | 
| 21 21 | 
             
                expect(FastlyNsq.manager.pool.max_threads).to eq(3)
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 | 
            -
              describe  | 
| 25 | 
            -
                let!(:logger) | 
| 24 | 
            +
              describe "#beat" do
         | 
| 25 | 
            +
                let!(:logger) { Logger.new(nil).tap { |l| l.level = Logger::DEBUG } }
         | 
| 26 26 | 
             
                let!(:launcher) { FastlyNsq::Launcher.new pulse: 0.01, logger: logger }
         | 
| 27 27 |  | 
| 28 | 
            -
                it  | 
| 28 | 
            +
                it "creates a heartbeat thread" do
         | 
| 29 29 | 
             
                  expect(logger).not_to receive(:error)
         | 
| 30 | 
            -
                  expect { launcher.beat }.to eventually_not(eq( | 
| 30 | 
            +
                  expect { launcher.beat }.to eventually_not(eq("dead")).pause_for(1)
         | 
| 31 31 | 
             
                end
         | 
| 32 32 | 
             
              end
         | 
| 33 33 |  | 
| 34 | 
            -
              describe  | 
| 34 | 
            +
              describe "#stop_listeners" do
         | 
| 35 35 | 
             
                before { launcher }
         | 
| 36 36 |  | 
| 37 | 
            -
                it  | 
| 37 | 
            +
                it "stops listeners and sets done" do
         | 
| 38 38 | 
             
                  expect(launcher).not_to be_stopping
         | 
| 39 39 | 
             
                  expect(manager).to receive(:stop_listeners)
         | 
| 40 40 | 
             
                  expect(manager).not_to receive(:terminate)
         | 
| @@ -45,20 +45,20 @@ RSpec.describe FastlyNsq::Launcher do | |
| 45 45 | 
             
                end
         | 
| 46 46 | 
             
              end
         | 
| 47 47 |  | 
| 48 | 
            -
              describe  | 
| 48 | 
            +
              describe "#stop" do
         | 
| 49 49 | 
             
                before { launcher }
         | 
| 50 50 |  | 
| 51 | 
            -
                it  | 
| 51 | 
            +
                it "stops the manager within a deadline" do
         | 
| 52 52 | 
             
                  expect(manager).to receive(:terminate).with(options[:timeout])
         | 
| 53 53 | 
             
                  launcher.stop
         | 
| 54 54 | 
             
                end
         | 
| 55 55 | 
             
              end
         | 
| 56 56 |  | 
| 57 | 
            -
              describe  | 
| 57 | 
            +
              describe "callbacks" do
         | 
| 58 58 | 
             
                before { FastlyNsq.events.each { |(_, v)| v.clear } }
         | 
| 59 | 
            -
                after | 
| 59 | 
            +
                after { FastlyNsq.events.each { |(_, v)| v.clear } }
         | 
| 60 60 |  | 
| 61 | 
            -
                it  | 
| 61 | 
            +
                it "fires :startup event on initialization" do
         | 
| 62 62 | 
             
                  obj = spy
         | 
| 63 63 | 
             
                  block = -> { obj.start }
         | 
| 64 64 | 
             
                  FastlyNsq.on(:startup, &block)
         | 
| @@ -67,7 +67,7 @@ RSpec.describe FastlyNsq::Launcher do | |
| 67 67 | 
             
                  expect(obj).to have_received(:start)
         | 
| 68 68 | 
             
                end
         | 
| 69 69 |  | 
| 70 | 
            -
                it  | 
| 70 | 
            +
                it "fires :shutdown event on #stop" do
         | 
| 71 71 | 
             
                  launcher
         | 
| 72 72 |  | 
| 73 73 | 
             
                  obj = spy
         | 
| @@ -78,7 +78,7 @@ RSpec.describe FastlyNsq::Launcher do | |
| 78 78 | 
             
                  expect(obj).to have_received(:stop)
         | 
| 79 79 | 
             
                end
         | 
| 80 80 |  | 
| 81 | 
            -
                it  | 
| 81 | 
            +
                it "fires :heartbeat event on #heartbeat" do
         | 
| 82 82 | 
             
                  obj = spy
         | 
| 83 83 | 
             
                  block = -> { obj.beat }
         | 
| 84 84 | 
             
                  FastlyNsq.on(:heartbeat, &block)
         |