1 import unittest
2 from yadis import services, etxrd, xri
3 import os.path
4
5 -def sibpath(one, other, make_absolute=True):
6 if os.path.isabs(other):
7 return other
8 p = os.path.join(os.path.dirname(one), other)
9 if make_absolute:
10 p = os.path.abspath(p)
11 return p
12
13
14 XRD_FILE = sibpath(__file__, os.path.join("data", "test1-xrd.xml"))
15 NOXRDS_FILE = sibpath(__file__, os.path.join("data", "not-xrds.xml"))
16 NOXRD_FILE = sibpath(__file__, os.path.join("data", "no-xrd.xml"))
17
18
19
20
21 LID_2_0 = "http://lid.netmesh.org/sso/2.0b5"
22 TYPEKEY_1_0 = "http://typekey.com/services/1.0"
23
25 """Function to extract information from an OpenID service element"""
26 if 'http://openid.net/signon/1.0' not in endpoint.type_uris:
27 return None
28
29 delegates = list(endpoint.service_element.findall(
30 '{http://openid.net/xmlns/1.0}Delegate'))
31 assert len(delegates) == 1
32 delegate = delegates[0].text
33 return (endpoint.uri, delegate)
34
37 self.xmldoc = file(XRD_FILE).read()
38 self.yadis_url = 'http://unittest.url/'
39
42
46
48 """Parse for OpenID services with a transformer function"""
49 services = self._getServices(simpleOpenIDTransformer)
50
51 expectedServices = [
52 ("http://www.myopenid.com/server", "http://josh.myopenid.com/"),
53 ("http://www.schtuff.com/openid", "http://users.schtuff.com/josh"),
54 ("http://www.livejournal.com/openid/server.bml",
55 "http://www.livejournal.com/users/nedthealpaca/"),
56 ]
57
58 it = iter(services)
59 for (server_url, delegate) in expectedServices:
60 for (actual_url, actual_delegate) in it:
61 self.failUnlessEqual(server_url, actual_url)
62 self.failUnlessEqual(delegate, actual_delegate)
63 break
64 else:
65 self.fail('Not enough services found')
66
68 """Check to make sure that the expected services are found in
69 that order in the parsed document."""
70 it = iter(self._getServices())
71 for (type_uri, uri) in expectedServices:
72 for service in it:
73 if type_uri in service.type_uris:
74 self.failUnlessEqual(service.uri, uri)
75 break
76 else:
77 self.fail('Did not find %r service' % (type_uri,))
78
80 """Get some services in order"""
81 expectedServices = [
82
83 (TYPEKEY_1_0, None),
84 (LID_2_0, "http://mylid.net/josh"),
85 ]
86
87 self._checkServices(expectedServices)
88
90 """Getting services for one Service with several Type elements."""
91 types = [ 'http://lid.netmesh.org/sso/2.0b5'
92 , 'http://lid.netmesh.org/2.0b5'
93 ]
94
95 uri = "http://mylid.net/josh"
96
97 for service in self._getServices():
98 if service.uri == uri:
99 found_types = service.matchTypes(types)
100 if found_types == types:
101 break
102 else:
103 self.fail('Did not find service with expected types and uris')
104
106 """Make sure that we get an exception when an XRDS element is
107 not present"""
108 self.xmldoc = file(NOXRDS_FILE).read()
109 self.failUnlessRaises(
110 etxrd.XRDSError,
111 services.applyFilter, self.yadis_url, self.xmldoc, None)
112
114 """Make sure that we get an exception when an XRDS element is
115 not present"""
116 self.xmldoc = ''
117 self.failUnlessRaises(
118 etxrd.XRDSError,
119 services.applyFilter, self.yadis_url, self.xmldoc, None)
120
122 """Make sure that we get an exception when there is no XRD
123 element present."""
124 self.xmldoc = file(NOXRD_FILE).read()
125 self.failUnlessRaises(
126 etxrd.XRDSError,
127 services.applyFilter, self.yadis_url, self.xmldoc, None)
128
129
131
132 canonicalIDtests = [
133 ("@ootao*test1", "delegated-20060809.xrds",
134 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
135 ("@ootao*test1", "delegated-20060809-r1.xrds",
136 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
137 ("@ootao*test1", "delegated-20060809-r2.xrds",
138 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
139 ("@ootao*test1", "sometimesprefix.xrds",
140 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
141 ("@ootao*test1", "prefixsometimes.xrds",
142 "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
143 ("=keturn*isDrummond", "spoof1.xrds", etxrd.XRDSFraud),
144 ("=keturn*isDrummond", "spoof2.xrds", etxrd.XRDSFraud),
145 ("@keturn*is*drummond", "spoof3.xrds", etxrd.XRDSFraud),
146 ("=x", "status222.xrds", None),
147
148 ("phreak.example.com", "delegated-20060809-r2.xrds", etxrd.XRDSFraud),
149
150
151 ]
152
153
154
155
156
162
163
165 if isinstance(expectedID, (str, unicode, type(None))):
166 cid = etxrd.getCanonicalID(iname, xrds)
167 self.failUnlessEqual(cid, expectedID and xri.XRI(expectedID))
168 elif issubclass(expectedID, etxrd.XRDSError):
169 self.failUnlessRaises(expectedID, etxrd.getCanonicalID,
170 iname, xrds)
171 else:
172 self.fail("Don't know how to test for expected value %r"
173 % (expectedID,))
174
175
176 if __name__ == '__main__':
177 unittest.main()
178