1 """Module to make discovery data test cases available"""
2 import urlparse
3 import os.path
4
5 from openid.yadis.discover import DiscoveryResult, DiscoveryFailure
6 from openid.yadis.constants import YADIS_HEADER_NAME
7
8 tests_dir = os.path.dirname(__file__)
9 data_path = os.path.join(tests_dir, 'data')
10
11 testlist = [
12
13 (True, "equiv", "equiv", "xrds"),
14 (True, "header", "header", "xrds"),
15 (True, "lowercase_header", "lowercase_header", "xrds"),
16 (True, "xrds", "xrds", "xrds"),
17 (True, "xrds_ctparam", "xrds_ctparam", "xrds_ctparam"),
18 (True, "xrds_ctcase", "xrds_ctcase", "xrds_ctcase"),
19 (False, "xrds_html", "xrds_html", "xrds_html"),
20 (True, "redir_equiv", "equiv", "xrds"),
21 (True, "redir_header", "header", "xrds"),
22 (True, "redir_xrds", "xrds", "xrds"),
23 (False, "redir_xrds_html", "xrds_html", "xrds_html"),
24 (True, "redir_redir_equiv", "equiv", "xrds"),
25 (False, "404_server_response", None, None),
26 (False, "404_with_header", None, None),
27 (False, "404_with_meta", None, None),
28 (False, "201_server_response", None, None),
29 (False, "500_server_response", None, None),
30 ]
31
33 sanitized = []
34 for part in components:
35 if part in ['.', '..']:
36 raise ValueError
37 elif part:
38 sanitized.append(part)
39
40 if not sanitized:
41 raise ValueError
42
43 return os.path.join(data_path, *sanitized)
44
48
49 example_xrds = getExampleXRDS()
50 default_test_file = getDataName('test1-discover.txt')
51
52 discover_tests = {}
53
55 data = file(filename).read()
56 tests = {}
57 for case in data.split('\f\n'):
58 (name, content) = case.split('\n', 1)
59 tests[name] = content
60 return tests
61
69
70 -def fillTemplate(test_name, template, base_url, example_xrds):
71 mapping = [
72 ('URL_BASE/', base_url),
73 ('<XRDS Content>', example_xrds),
74 ('YADIS_HEADER', YADIS_HEADER_NAME),
75 ('NAME', test_name),
76 ]
77
78 for k, v in mapping:
79 template = template.replace(k, v)
80
81 return template
82
86 try:
87 template = getData(filename, test_name)
88 except IOError, why:
89 import errno
90 if why[0] == errno.ENOENT:
91 raise KeyError(filename)
92 else:
93 raise
94
95 return fillTemplate(test_name, template, base_url, example_xrds)
96
97 -def generateResult(base_url, input_name, id_name, result_name, success):
98 input_url = urlparse.urljoin(base_url, input_name)
99
100
101
102 if id_name is None:
103 assert result_name is None
104 return input_url, DiscoveryFailure
105
106 result = generateSample(result_name, base_url)
107 headers, content = result.split('\n\n', 1)
108 header_lines = headers.split('\n')
109 for header_line in header_lines:
110 if header_line.startswith('Content-Type:'):
111 _, ctype = header_line.split(':', 1)
112 ctype = ctype.strip()
113 break
114 else:
115 ctype = None
116
117 id_url = urlparse.urljoin(base_url, id_name)
118
119 result = DiscoveryResult(input_url)
120 result.normalized_uri = id_url
121 if success:
122 result.xrds_uri = urlparse.urljoin(base_url, result_name)
123 result.content_type = ctype
124 result.response_text = content
125 return input_url, result
126