Sha256: c029dd6cff962e2998d692963c7d00042bb14b6c7eae9cb76a8367ed34087d7c

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require "ld-eventsource"

module SSE
  module Impl
    describe Backoff do
      it "increases exponentially with jitter" do
        initial = 1.5
        max = 60
        b = Backoff.new(initial, max)
        previous = 0

        for i in 1..6 do
          interval = b.next_interval
          expect(interval).to be > previous
          target = initial * (2 ** (i - 1))
          expect(interval).to be <= target
          expect(interval).to be >= target / 2
          previous = i
        end

        interval = b.next_interval
        expect(interval).to be >= previous
        expect(interval).to be <= max
      end

      it "resets to initial delay if reset threshold has elapsed" do
        initial = 1.5
        max = 60
        threshold = 2
        b = Backoff.new(initial, max, reconnect_reset_interval: threshold)

        for i in 1..6 do
          # just cause the backoff to increase quickly, don't actually do these delays
          b.next_interval
        end

        b.mark_success
        sleep(threshold + 0.001)

        interval = b.next_interval
        expect(interval).to be <= initial
        expect(interval).to be >= initial / 2

        interval = b.next_interval # make sure it continues increasing after that
        expect(interval).to be <= (initial * 2)
        expect(interval).to be >= initial
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ld-eventsource-1.0.3 spec/backoff_spec.rb