Sha256: d405eab4cf34cfc6f75dc89419332bf242222dc238fa05d37079721ce1926082

Contents?: true

Size: 1.84 KB

Versions: 29

Compression:

Stored size: 1.84 KB

Contents

require_relative "../spec_helper"
require "logstash/circuit_breaker"

class DummyErrorTest < StandardError; end

describe LogStash::CircuitBreaker do
  let(:error_threshold) { 1 }
  let(:options) do 
    {
      :exceptions => [DummyErrorTest],
      :error_threshold => error_threshold 
    }
  end

  subject { LogStash::CircuitBreaker.new("testing", options) }

  context "when the breaker is closed" do
    it "closed by default" do
      expect(subject.closed?).to eq(true)
    end

    it "always raise an exception if an errors occur" do
      expect {
        subject.execute do
          raise DummyErrorTest
        end
      }.to raise_error(LogStash::CircuitBreaker::HalfOpenBreaker)
    end

    it "open if we pass the errors threadshold" do
      expect {
        subject.execute do
          raise DummyErrorTest
        end
      }.to raise_error(LogStash::CircuitBreaker::HalfOpenBreaker)

      expect {
        subject.execute do
          raise DummyErrorTest
        end
      }.to raise_error(LogStash::CircuitBreaker::OpenBreaker)
    end
  end

  context "When the breaker is open" do
    let(:future_time) { Time.now + 3600 }

    before do
      # trip the breaker
      (error_threshold + 1).times do
        begin
          subject.execute do
            raise DummyErrorTest
          end
        rescue
        end
      end
    end

    it "#closed? should return false" do
      expect(subject.closed?).to eq(false)
    end

    it "resets the breaker after the time before retry" do
      expect(Time).to receive(:now).at_least(2).and_return(future_time)
      expect(subject.closed?).to eq(true)
    end

    it "doesnt run the command" do
      runned = false

      begin
        subject.execute do
          runned = true
        end
      rescue LogStash::CircuitBreaker::OpenBreaker 
      end

      expect(runned).to eq(false)
    end
  end
end

Version data entries

29 entries across 29 versions & 2 rubygems

Version Path
logstash-input-lumberjack-3.1.6 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.1.5 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.1.4 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.1.3 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.1.2 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.1.1 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.0.1 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-3.0.0 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-2.0.7 spec/logstash/circuit_breaker_spec.rb
logstash-input-lumberjack-2.0.5 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-2.0.3 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-2.0.2 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-2.0.1 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-2.0.0 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-0.9.6 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-0.9.5 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-0.9.4 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-0.9.3 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-0.9.2 spec/logstash/circuit_breaker_spec.rb
logstash-input-beats-0.9.1 spec/logstash/circuit_breaker_spec.rb