summaryrefslogtreecommitdiff
path: root/certs/test/unit/cert_pool_test.rb
blob: 24ace5727e0de6309e7447506a0b9930afeb4f9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require 'test_helper'

class CertPoolTest < ActiveSupport::TestCase

  setup do
    2.times { Cert.create! }
  end

  teardown do
    Cert.all.each {|c| c.destroy}
  end

  test "picks random sample" do
    Cert.create! # with 3 certs chances are pretty low we pick the same one 40 times.
    picked = []
    first = Cert.sample.id
    current = Cert.sample.id
    40.times do
      break if current != first
      current = Cert.sample.id
    end
    assert_not_equal current, first
  end

  test "picks cert from the pool" do
    assert_difference "Cert.count", -1 do
      cert = Cert.pick_from_pool
    end
  end

  test "err's out if all certs have been destroyed" do
    sample = Cert.first.tap{|c| c.destroy}
    Cert.all.each {|c| c.destroy}
    assert_raises RECORD_NOT_FOUND do
      Cert.expects(:sample).returns(sample)
      cert = Cert.pick_from_pool
    end
  end

  test "picks other cert if first pick has been destroyed" do
    first = Cert.first.tap{|c| c.destroy}
    second = Cert.first
    Cert.expects(:sample).at_least_once.
      returns(first).
      then.returns(second)
    cert = Cert.pick_from_pool
    assert_equal second, cert
    assert_nil Cert.first
  end

end