diff options
Diffstat (limited to 'vendor/gems/ruby-openid-2.1.4/test/test_trustroot.rb')
-rw-r--r-- | vendor/gems/ruby-openid-2.1.4/test/test_trustroot.rb | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/vendor/gems/ruby-openid-2.1.4/test/test_trustroot.rb b/vendor/gems/ruby-openid-2.1.4/test/test_trustroot.rb new file mode 100644 index 000000000..2616021a0 --- /dev/null +++ b/vendor/gems/ruby-openid-2.1.4/test/test_trustroot.rb @@ -0,0 +1,113 @@ +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 |