File: secure_compare_rotator_test.rb

package info (click to toggle)
rails 2%3A7.2.2.1%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 43,352 kB
  • sloc: ruby: 349,799; javascript: 30,703; yacc: 46; sql: 43; sh: 29; makefile: 27
file content (57 lines) | stat: -rw-r--r-- 1,934 bytes parent folder | download | duplicates (3)
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
52
53
54
55
56
57
# frozen_string_literal: true

require_relative "abstract_unit"
require "active_support/secure_compare_rotator"

class SecureCompareRotatorTest < ActiveSupport::TestCase
  test "#secure_compare! works correctly after rotation" do
    wrapper = ActiveSupport::SecureCompareRotator.new("old_secret")
    wrapper.rotate("new_secret")

    assert_equal(true, wrapper.secure_compare!("new_secret"))
  end

  test "#secure_compare! works correctly after multiple rotation" do
    wrapper = ActiveSupport::SecureCompareRotator.new("old_secret")
    wrapper.rotate("new_secret")
    wrapper.rotate("another_secret")
    wrapper.rotate("and_another_one")

    assert_equal(true, wrapper.secure_compare!("and_another_one"))
  end

  test "#secure_compare! fails correctly when credential is not part of the rotation" do
    wrapper = ActiveSupport::SecureCompareRotator.new("old_secret")
    wrapper.rotate("new_secret")

    assert_raises(ActiveSupport::SecureCompareRotator::InvalidMatch) do
      wrapper.secure_compare!("different_secret")
    end
  end

  test "#secure_compare! calls the on_rotation proc" do
    wrapper = ActiveSupport::SecureCompareRotator.new("old_secret")
    wrapper.rotate("new_secret")
    wrapper.rotate("another_secret")
    wrapper.rotate("and_another_one")

    @witness = nil

    assert_changes(:@witness, from: nil, to: true) do
      assert_equal(true, wrapper.secure_compare!("and_another_one", on_rotation: -> { @witness = true }))
    end
  end

  test "#secure_compare! calls the on_rotation proc that given in constructor" do
    @witness = nil

    wrapper = ActiveSupport::SecureCompareRotator.new("old_secret", on_rotation: -> { @witness = true })
    wrapper.rotate("new_secret")
    wrapper.rotate("another_secret")
    wrapper.rotate("and_another_one")

    assert_changes(:@witness, from: nil, to: true) do
      assert_equal(true, wrapper.secure_compare!("and_another_one"))
    end
  end
end