1 import unittest
2 from openid.yadis import services, etxrd, xri
3 import os.path
4
6 module_directory = os.path.dirname(os.path.abspath(__file__))
7 return os.path.join(module_directory, 'data', 'test_etxrd', filename)
8
9 XRD_FILE = datapath('valid-populated-xrds.xml')
10 NOXRDS_FILE = datapath('not-xrds.xml')
11 NOXRD_FILE = datapath('no-xrd.xml')
12
13
14
15
16 LID_2_0 = "http://lid.netmesh.org/sso/2.0b5"
17 TYPEKEY_1_0 = "http://typekey.com/services/1.0"
18
29
32 self.xmldoc = file(XRD_FILE).read()
33 self.yadis_url = 'http://unittest.url/'
34
37
39 """Make sure that parsing succeeds at all"""
40 services = self._getServices()
41
43 """Parse for OpenID services with a transformer function"""
44 services = self._getServices(simpleOpenIDTransformer)
45
46 expectedServices = [
47 ("http://www.myopenid.com/server", "http://josh.myopenid.com/"),
48 ("http://www.schtuff.com/openid", "http://users.schtuff.com/josh"),
49 ("http://www.livejournal.com/openid/server.bml",
50 "http://www.livejournal.com/users/nedthealpaca/"),
51 ]
52
53 it = iter(services)
54 for (server_url, delegate) in expectedServices:
55 for (actual_url, actual_delegate) in it:
56 self.failUnlessEqual(server_url, actual_url)
57 self.failUnlessEqual(delegate, actual_delegate)
58 break
59 else:
60 self.fail('Not enough services found')
61
63 """Check to make sure that the expected services are found in
64 that order in the parsed document."""
65 it = iter(self._getServices())
66 for (type_uri, uri) in expectedServices:
67 for service in it:
68 if type_uri in service.type_uris:
69 self.failUnlessEqual(service.uri, uri)
70 break
71 else:
72 self.fail('Did not find %r service' % (type_uri,))
73
75 """Get some services in order"""
76 expectedServices = [
77
78 (TYPEKEY_1_0, None),
79 (LID_2_0, "http://mylid.net/josh"),
80 ]
81
82 self._checkServices(expectedServices)
83
85 """Getting services for one Service with several Type elements."""
86 types = [ 'http://lid.netmesh.org/sso/2.0b5'
87 , 'http://lid.netmesh.org/2.0b5'
88 ]
89
90 uri = "http://mylid.net/josh"
91
92 for service in self._getServices():
93 if service.uri == uri:
94 found_types = service.matchTypes(types)
95 if found_types == types:
96 break
97 else:
98 self.fail('Did not find service with expected types and uris')
99
101 """Make sure that we get an exception when an XRDS element is
102 not present"""
103 self.xmldoc = file(NOXRDS_FILE).read()
104 self.failUnlessRaises(
105 etxrd.XRDSError,
106 services.applyFilter, self.yadis_url, self.xmldoc, None)
107
109 """Make sure that we get an exception when an XRDS element is
110 not present"""
111 self.xmldoc = ''
112 self.failUnlessRaises(
113 etxrd.XRDSError,
114 services.applyFilter, self.yadis_url, self.xmldoc, None)
115
117 """Make sure that we get an exception when there is no XRD
118 element present."""
119 self.xmldoc = file(NOXRD_FILE).read()
120 self.failUnlessRaises(
121 etxrd.XRDSError,
122 services.applyFilter, self.yadis_url, self.xmldoc, None)
123
124
126
127 - def mkTest(iname, filename, expectedID):
128 """This function builds a method that runs the CanonicalID
129 test for the given set of inputs"""
130
131 filename = datapath(filename)
132 def test(self):
133 xrds = etxrd.parseXRDS(file(filename).read())
134 self._getCanonicalID(iname, xrds, expectedID)
135 return test
136
137 test_delegated = mkTest(
138 "@ootao*test1", "delegated-20060809.xrds",
139 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01")
140
141 test_delegated_r1 = mkTest(
142 "@ootao*test1", "delegated-20060809-r1.xrds",
143 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01")
144
145 test_delegated_r2 = mkTest(
146 "@ootao*test1", "delegated-20060809-r2.xrds",
147 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01")
148
149 test_sometimesprefix = mkTest(
150 "@ootao*test1", "sometimesprefix.xrds",
151 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01")
152
153 test_prefixsometimes = mkTest(
154 "@ootao*test1", "prefixsometimes.xrds",
155 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01")
156
157 test_spoof1 = mkTest("=keturn*isDrummond", "spoof1.xrds", etxrd.XRDSFraud)
158
159 test_spoof2 = mkTest("=keturn*isDrummond", "spoof2.xrds", etxrd.XRDSFraud)
160
161 test_spoof3 = mkTest("@keturn*is*drummond", "spoof3.xrds", etxrd.XRDSFraud)
162
163 test_status222 = mkTest("=x", "status222.xrds", None)
164
165 test_multisegment_xri = mkTest('xri://=nishitani*masaki',
166 'subsegments.xrds',
167 '=!E117.EF2F.454B.C707!0000.0000.3B9A.CA01')
168
169 test_iri_auth_not_allowed = mkTest(
170 "phreak.example.com", "delegated-20060809-r2.xrds", etxrd.XRDSFraud)
171 test_iri_auth_not_allowed.__doc__ = \
172 "Don't let IRI authorities be canonical for the GCS."
173
174
175
176
177
178
179
180
182 if isinstance(expectedID, (str, unicode, type(None))):
183 cid = etxrd.getCanonicalID(iname, xrds)
184 self.failUnlessEqual(cid, expectedID and xri.XRI(expectedID))
185 elif issubclass(expectedID, etxrd.XRDSError):
186 self.failUnlessRaises(expectedID, etxrd.getCanonicalID,
187 iname, xrds)
188 else:
189 self.fail("Don't know how to test for expected value %r"
190 % (expectedID,))
191
192
193 if __name__ == '__main__':
194 unittest.main()
195