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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
require 'minitest/autorun'
require 'net/http/digest_auth'
class TestNetHttpDigestAuth < Minitest::Test
def setup
@uri = URI.parse "http://www.example.com/"
@uri.user = 'user'
@uri.password = 'password'
@cnonce = '9ea5ff3bd34554a4165bbdc1df91dcff'
@header = [
'Digest qop="auth"',
'realm="www.example.com"',
'nonce="4107baa081a592a6021660200000cd6c5686ff5f579324402b374d83e2c9"'
].join ', '
@expected = [
'Digest username="user"',
'realm="www.example.com"',
'algorithm=MD5',
'qop=auth',
'uri="/"',
'nonce="4107baa081a592a6021660200000cd6c5686ff5f579324402b374d83e2c9"',
'nc=00000000',
'cnonce="9ea5ff3bd34554a4165bbdc1df91dcff"',
'response="67be92a5e7b38d08679957db04f5da04"'
]
@da = Net::HTTP::DigestAuth.new
def @da.make_cnonce
'9ea5ff3bd34554a4165bbdc1df91dcff'
end
end
def expected
@expected.join ', '
end
def test_auth_header
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
@expected[6] = 'nc=00000001'
@expected[8] = 'response="1f5f0cd1588690c1303737f081c0b9bb"'
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
end
def test_auth_header_iis
@expected[3] = 'qop="auth"'
assert_equal expected, @da.auth_header(@uri, @header, 'GET', true)
end
def test_auth_header_no_qop
@header.sub! ' qop="auth",', ''
@expected[8] = 'response="32f6ca1631ccf7c42a8075deff44e470"'
@expected.delete 'qop=auth'
@expected.delete 'cnonce="9ea5ff3bd34554a4165bbdc1df91dcff"'
@expected.delete 'nc=00000000'
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
end
def test_auth_header_opaque
@expected << 'opaque="5ccc069c403ebaf9f0171e9517f40e41"'
@header << 'opaque="5ccc069c403ebaf9f0171e9517f40e41"'
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
end
def test_auth_header_post
@expected[8] = 'response="d82219e1e5430b136bbae1670fa51d48"'
assert_equal expected, @da.auth_header(@uri, @header, 'POST')
end
def test_auth_header_sess
@header << ', algorithm=MD5-sess'
@expected[2] = 'algorithm=MD5-sess'
@expected[8] = 'response="c22c5bd9112a86ca78ddc1ae772daeeb"'
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
end
def test_auth_header_sha1
@expected[2] = 'algorithm=SHA1'
@expected[8] = 'response="2cb62fc18f7b0ebdc34543f896bb77686b4115e4"'
@header << 'algorithm=SHA1'
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
end
def test_auth_header_unknown_algorithm
@header << 'algorithm=bogus'
e = assert_raises Net::HTTP::DigestAuth::Error do
@da.auth_header @uri, @header, 'GET'
end
assert_equal 'unknown algorithm "bogus"', e.message
end
def test_auth_header_quoted_algorithm
@header << 'algorithm="MD5"'
assert_equal expected, @da.auth_header(@uri, @header, 'GET')
end
def test_make_cnonce
da = Net::HTTP::DigestAuth.new
cnonce = da.make_cnonce
assert_match %r%\A[a-f\d]{32}\z%, cnonce
refute_equal cnonce, da.make_cnonce
end
def test_next_nonce
first = @da.next_nonce
assert_equal first + 1, @da.next_nonce
end
end
|