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
|