summaryrefslogtreecommitdiffstats
path: root/vendor/gems/ruby-openid-2.1.4/test/discoverdata.rb
blob: 7b21749f0e670147fc9f9bc2e3335d0556cfe00c (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
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
131
require 'uri'
require 'openid/yadis/constants'
require 'openid/yadis/discovery'
require 'openid/extras'
require 'openid/util'

module OpenID

  module DiscoverData

    include TestDataMixin
    include Util

    TESTLIST = [
                # success,  input_name,          id_name,            result_name
                [true,  "equiv",             "equiv",            "xrds"],
                [true,  "header",            "header",           "xrds"],
                [true,  "lowercase_header",  "lowercase_header", "xrds"],
                [true,  "xrds",              "xrds",             "xrds"],
                [true,  "xrds_ctparam",      "xrds_ctparam",     "xrds_ctparam"],
                [true,  "xrds_ctcase",       "xrds_ctcase",      "xrds_ctcase"],
                [false, "xrds_html",         "xrds_html",        "xrds_html"],
                [true,  "redir_equiv",       "equiv",            "xrds"],
                [true,  "redir_header",      "header",           "xrds"],
                [true,  "redir_xrds",        "xrds",             "xrds"],
                [false, "redir_xrds_html",   "xrds_html",        "xrds_html"],
                [true,  "redir_redir_equiv", "equiv",            "xrds"],
                [false, "404_server_response", nil,             nil],
                [false, "404_with_header",     nil,             nil],
                [false, "404_with_meta",       nil,             nil],
                [false, "201_server_response", nil,             nil],
                [false, "500_server_response", nil,             nil],
             ]

    @@example_xrds_file = 'example-xrds.xml'
    @@default_test_file = 'test1-discover.txt'
    @@discover_tests = {}

    def readTests(filename)
      data = read_data_file(filename, false)
      tests = {}
      data.split("\f\n", -1).each { |case_|
        name, content = case_.split("\n", 2)
        tests[name] = content
      }

      return tests
    end

    def getData(filename, name)
      if !@@discover_tests.member?(filename)
        @@discover_tests[filename] = readTests(filename)
      end

      file_tests = @@discover_tests[filename]
      return file_tests[name]
    end

    def fillTemplate(test_name, template, base_url, example_xrds)
      mapping = [
                 ['URL_BASE/', base_url],
                 ['<XRDS Content>', example_xrds],
                 ['YADIS_HEADER', Yadis::YADIS_HEADER_NAME],
                 ['NAME', test_name],
                ]

      mapping.each { |k, v|
        template = template.gsub(/#{k}/, v)
      }

      return template
    end

    def generateSample(test_name, base_url,
                       example_xrds=nil,
                       filename=@@default_test_file)
      if example_xrds.nil?
        example_xrds = read_data_file(@@example_xrds_file, false)
      end

      begin
        template = getData(filename, test_name)
      rescue Errno::ENOENT
        raise ArgumentError(filename)
      end

      return fillTemplate(test_name, template, base_url, example_xrds)
    end

    def generateResult(base_url, input_name, id_name, result_name, success)
      uri = URI::parse(base_url)

      input_url = (uri + input_name).to_s

      # If the name is None then we expect the protocol to fail, which
      # we represent by None
      if id_name.nil?
        Util.assert(result_name.nil?)
        return input_url, DiscoveryFailure
      end

      result = generateSample(result_name, base_url)
      headers, content = result.split("\n\n", 2)
      header_lines = headers.split("\n")

      ctype = nil
      header_lines.each { |header_line|
        if header_line.starts_with?('Content-Type:')
          _, ctype = header_line.split(':', 2)
          ctype = ctype.strip()
          break
        else
          ctype = nil
        end
      }

      id_url = (uri + id_name).to_s
      result = Yadis::DiscoveryResult.new(input_url)
      result.normalized_uri = id_url

      if success
        result.xrds_uri = (uri + result_name).to_s
      end

      result.content_type = ctype
      result.response_text = content
      return [input_url, result]
    end
  end
end