test_trustroot.rb
113 lines
| 3.6 KiB
| text/x-ruby
|
RubyLexer
|
r2376 | require 'test/unit' | ||
require 'openid/trustroot' | ||||
require "testutil" | ||||
class TrustRootTest < Test::Unit::TestCase | ||||
include OpenID::TestDataMixin | ||||
def _test_sanity(case_, sanity, desc) | ||||
tr = OpenID::TrustRoot::TrustRoot.parse(case_) | ||||
if sanity == 'sane' | ||||
assert(! tr.nil?) | ||||
assert(tr.sane?, [case_, desc]) | ||||
assert(OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc]) | ||||
elsif sanity == 'insane' | ||||
assert(!tr.sane?, [case_, desc]) | ||||
assert(!OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc]) | ||||
else | ||||
assert(tr.nil?, case_) | ||||
end | ||||
end | ||||
def _test_match(trust_root, url, expected_match) | ||||
tr = OpenID::TrustRoot::TrustRoot.parse(trust_root) | ||||
actual_match = tr.validate_url(url) | ||||
if expected_match | ||||
assert(actual_match, [trust_root, url]) | ||||
assert(OpenID::TrustRoot::TrustRoot.check_url(trust_root, url)) | ||||
else | ||||
assert(!actual_match, [expected_match, actual_match, trust_root, url]) | ||||
assert(!OpenID::TrustRoot::TrustRoot.check_url(trust_root, url)) | ||||
end | ||||
end | ||||
def test_trustroots | ||||
data = read_data_file('trustroot.txt', false) | ||||
parts = data.split('=' * 40 + "\n").collect { |i| i.strip() } | ||||
assert(parts[0] == '') | ||||
_, ph, pdat, mh, mdat = parts | ||||
getTests(['bad', 'insane', 'sane'], ph, pdat).each { |tc| | ||||
sanity, desc, case_ = tc | ||||
_test_sanity(case_, sanity, desc) | ||||
} | ||||
getTests([true, false], mh, mdat).each { |tc| | ||||
match, desc, case_ = tc | ||||
trust_root, url = case_.split() | ||||
_test_match(trust_root, url, match) | ||||
} | ||||
end | ||||
def getTests(grps, head, dat) | ||||
tests = [] | ||||
top = head.strip() | ||||
gdat = dat.split('-' * 40 + "\n").collect { |i| i.strip() } | ||||
assert(gdat[0] == '') | ||||
assert(gdat.length == (grps.length * 2 + 1), [gdat, grps]) | ||||
i = 1 | ||||
grps.each { |x| | ||||
n, desc = gdat[i].split(': ') | ||||
cases = gdat[i + 1].split("\n") | ||||
assert(cases.length == n.to_i, "Number of cases differs from header count") | ||||
cases.each { |case_| | ||||
tests += [[x, top + ' - ' + desc, case_]] | ||||
} | ||||
i += 2 | ||||
} | ||||
return tests | ||||
end | ||||
def test_return_to_matches | ||||
data = [ | ||||
[[], nil, false], | ||||
[[], "", false], | ||||
[[], "http://bogus/return_to", false], | ||||
[["http://bogus/"], nil, false], | ||||
[["://broken/"], nil, false], | ||||
[["://broken/"], "http://broken/", false], | ||||
[["http://*.broken/"], "http://foo.broken/", false], | ||||
[["http://x.broken/"], "http://foo.broken/", false], | ||||
[["http://first/", "http://second/path/"], "http://second/?query=x", false], | ||||
[["http://broken/"], "http://broken/", true], | ||||
[["http://first/", "http://second/"], "http://second/?query=x", true], | ||||
] | ||||
data.each { |case_| | ||||
allowed_return_urls, return_to, expected_result = case_ | ||||
actual_result = OpenID::TrustRoot::return_to_matches(allowed_return_urls, | ||||
return_to) | ||||
assert(expected_result == actual_result) | ||||
} | ||||
end | ||||
def test_build_discovery_url | ||||
data = [ | ||||
["http://foo.com/path", "http://foo.com/path"], | ||||
["http://foo.com/path?foo=bar", "http://foo.com/path?foo=bar"], | ||||
["http://*.bogus.com/path", "http://www.bogus.com/path"], | ||||
["http://*.bogus.com:122/path", "http://www.bogus.com:122/path"], | ||||
] | ||||
data.each { |case_| | ||||
trust_root, expected_disco_url = case_ | ||||
tr = OpenID::TrustRoot::TrustRoot.parse(trust_root) | ||||
actual_disco_url = tr.build_discovery_url() | ||||
assert(actual_disco_url == expected_disco_url, case_ + [actual_disco_url]) | ||||
} | ||||
end | ||||
end | ||||