Sha256: 9f340822418d93b68c90e90bb468b29fc46027b3b9e3d16c9aa6421c41710d02

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

require "spec_helper"

describe Throttle::RedisScript do
  let(:redis) { Redis.current }
  let(:time)  { Time.now }

  describe "instance" do
    let(:key) { "test" }
    let(:size) { 3 }
    subject! { described_class.new(redis, key, size) }

    describe "managing bucket size" do
      let(:bucket_size) { redis.get(described_class.key(key, :size)).to_i }

      it "sets to default if no value given" do
        subject.set_bucket_size!
        expect(bucket_size).to eq size
      end

      it "sets to given value" do
        subject.set_bucket_size!(100)
        expect(bucket_size).to eq 100
      end
    end

    describe "status" do
      it "returns info on window time, window runs, bucket size" do
        expect(Time).to receive(:at).with(time.to_i).and_return(time)
        redis.set(described_class.key(key, :time),  time.to_i)
        redis.set(described_class.key(key, :count), "12")
        redis.set(described_class.key(key, :size),  "24")
        expect(subject.status).to eq [time, 12, 24]
      end
    end

    describe "acquiring permission" do
      before(:each) { subject.set_bucket_size! }

      it "acquires entry on bucket if possible and returns time, count and flag" do
        Timecop.freeze(time) do |t|
          expect(subject.acquire).to eq [true,  1, t.to_i]
          expect(subject.acquire).to eq [true,  2, t.to_i]
          expect(subject.acquire).to eq [true,  3, t.to_i]
          expect(subject.acquire).to eq [false, 3, t.to_i]
          expect(subject.acquire).to eq [false, 3, t.to_i]
        end
      end

      it "changes bucket size at runtime" do
        Timecop.freeze(time) do |t|
          expect(subject.acquire).to eq [true,  1, t.to_i]
          expect(subject.acquire).to eq [true,  2, t.to_i]
          expect(subject.acquire).to eq [true,  3, t.to_i]
          expect(subject.acquire).to eq [false, 3, t.to_i]

          subject.set_bucket_size!(4)
          expect(subject.acquire).to eq [true,  4, t.to_i]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
full_throttle-0.0.1 spec/lib/throttle/redis_script_spec.rb