nov-ruby-openid 2.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. data/CHANGELOG +215 -0
  2. data/CHANGES-2.1.0 +36 -0
  3. data/INSTALL +47 -0
  4. data/LICENSE +210 -0
  5. data/NOTICE +2 -0
  6. data/README +81 -0
  7. data/Rakefile +98 -0
  8. data/UPGRADE +127 -0
  9. data/VERSION +1 -0
  10. data/contrib/google/ruby-openid-apps-discovery-1.0.gem +0 -0
  11. data/contrib/google/ruby-openid-apps-discovery-1.01.gem +0 -0
  12. data/examples/README +32 -0
  13. data/examples/active_record_openid_store/README +58 -0
  14. data/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb +24 -0
  15. data/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb +26 -0
  16. data/examples/active_record_openid_store/init.rb +8 -0
  17. data/examples/active_record_openid_store/lib/association.rb +10 -0
  18. data/examples/active_record_openid_store/lib/nonce.rb +3 -0
  19. data/examples/active_record_openid_store/lib/open_id_setting.rb +4 -0
  20. data/examples/active_record_openid_store/lib/openid_ar_store.rb +57 -0
  21. data/examples/active_record_openid_store/test/store_test.rb +212 -0
  22. data/examples/discover +49 -0
  23. data/examples/rails_openid/README +153 -0
  24. data/examples/rails_openid/Rakefile +10 -0
  25. data/examples/rails_openid/app/controllers/application.rb +4 -0
  26. data/examples/rails_openid/app/controllers/consumer_controller.rb +122 -0
  27. data/examples/rails_openid/app/controllers/login_controller.rb +45 -0
  28. data/examples/rails_openid/app/controllers/server_controller.rb +265 -0
  29. data/examples/rails_openid/app/helpers/application_helper.rb +3 -0
  30. data/examples/rails_openid/app/helpers/login_helper.rb +2 -0
  31. data/examples/rails_openid/app/helpers/server_helper.rb +9 -0
  32. data/examples/rails_openid/app/views/consumer/index.rhtml +81 -0
  33. data/examples/rails_openid/app/views/layouts/server.rhtml +68 -0
  34. data/examples/rails_openid/app/views/login/index.rhtml +56 -0
  35. data/examples/rails_openid/app/views/server/decide.rhtml +26 -0
  36. data/examples/rails_openid/config/boot.rb +19 -0
  37. data/examples/rails_openid/config/database.yml +74 -0
  38. data/examples/rails_openid/config/environment.rb +54 -0
  39. data/examples/rails_openid/config/environments/development.rb +19 -0
  40. data/examples/rails_openid/config/environments/production.rb +19 -0
  41. data/examples/rails_openid/config/environments/test.rb +19 -0
  42. data/examples/rails_openid/config/routes.rb +24 -0
  43. data/examples/rails_openid/doc/README_FOR_APP +2 -0
  44. data/examples/rails_openid/public/.htaccess +40 -0
  45. data/examples/rails_openid/public/404.html +8 -0
  46. data/examples/rails_openid/public/500.html +8 -0
  47. data/examples/rails_openid/public/dispatch.cgi +12 -0
  48. data/examples/rails_openid/public/dispatch.fcgi +26 -0
  49. data/examples/rails_openid/public/dispatch.rb +12 -0
  50. data/examples/rails_openid/public/favicon.ico +0 -0
  51. data/examples/rails_openid/public/images/openid_login_bg.gif +0 -0
  52. data/examples/rails_openid/public/javascripts/controls.js +750 -0
  53. data/examples/rails_openid/public/javascripts/dragdrop.js +584 -0
  54. data/examples/rails_openid/public/javascripts/effects.js +854 -0
  55. data/examples/rails_openid/public/javascripts/prototype.js +1785 -0
  56. data/examples/rails_openid/public/robots.txt +1 -0
  57. data/examples/rails_openid/script/about +3 -0
  58. data/examples/rails_openid/script/breakpointer +3 -0
  59. data/examples/rails_openid/script/console +3 -0
  60. data/examples/rails_openid/script/destroy +3 -0
  61. data/examples/rails_openid/script/generate +3 -0
  62. data/examples/rails_openid/script/performance/benchmarker +3 -0
  63. data/examples/rails_openid/script/performance/profiler +3 -0
  64. data/examples/rails_openid/script/plugin +3 -0
  65. data/examples/rails_openid/script/process/reaper +3 -0
  66. data/examples/rails_openid/script/process/spawner +3 -0
  67. data/examples/rails_openid/script/process/spinner +3 -0
  68. data/examples/rails_openid/script/runner +3 -0
  69. data/examples/rails_openid/script/server +3 -0
  70. data/examples/rails_openid/test/functional/login_controller_test.rb +18 -0
  71. data/examples/rails_openid/test/functional/server_controller_test.rb +18 -0
  72. data/examples/rails_openid/test/test_helper.rb +28 -0
  73. data/lib/hmac/hmac.rb +112 -0
  74. data/lib/hmac/sha1.rb +11 -0
  75. data/lib/hmac/sha2.rb +25 -0
  76. data/lib/openid.rb +20 -0
  77. data/lib/openid/association.rb +249 -0
  78. data/lib/openid/consumer.rb +395 -0
  79. data/lib/openid/consumer/associationmanager.rb +344 -0
  80. data/lib/openid/consumer/checkid_request.rb +186 -0
  81. data/lib/openid/consumer/discovery.rb +497 -0
  82. data/lib/openid/consumer/discovery_manager.rb +123 -0
  83. data/lib/openid/consumer/html_parse.rb +134 -0
  84. data/lib/openid/consumer/idres.rb +523 -0
  85. data/lib/openid/consumer/responses.rb +148 -0
  86. data/lib/openid/cryptutil.rb +115 -0
  87. data/lib/openid/dh.rb +89 -0
  88. data/lib/openid/extension.rb +39 -0
  89. data/lib/openid/extensions/ax.rb +539 -0
  90. data/lib/openid/extensions/oauth.rb +91 -0
  91. data/lib/openid/extensions/pape.rb +179 -0
  92. data/lib/openid/extensions/sreg.rb +277 -0
  93. data/lib/openid/extensions/ui.rb +53 -0
  94. data/lib/openid/extras.rb +11 -0
  95. data/lib/openid/fetchers.rb +258 -0
  96. data/lib/openid/kvform.rb +136 -0
  97. data/lib/openid/kvpost.rb +58 -0
  98. data/lib/openid/message.rb +553 -0
  99. data/lib/openid/protocolerror.rb +8 -0
  100. data/lib/openid/server.rb +1544 -0
  101. data/lib/openid/store/filesystem.rb +271 -0
  102. data/lib/openid/store/interface.rb +75 -0
  103. data/lib/openid/store/memcache.rb +107 -0
  104. data/lib/openid/store/memory.rb +84 -0
  105. data/lib/openid/store/nonce.rb +68 -0
  106. data/lib/openid/trustroot.rb +349 -0
  107. data/lib/openid/urinorm.rb +75 -0
  108. data/lib/openid/util.rb +110 -0
  109. data/lib/openid/yadis/accept.rb +148 -0
  110. data/lib/openid/yadis/constants.rb +21 -0
  111. data/lib/openid/yadis/discovery.rb +153 -0
  112. data/lib/openid/yadis/filters.rb +205 -0
  113. data/lib/openid/yadis/htmltokenizer.rb +305 -0
  114. data/lib/openid/yadis/parsehtml.rb +45 -0
  115. data/lib/openid/yadis/services.rb +42 -0
  116. data/lib/openid/yadis/xrds.rb +155 -0
  117. data/lib/openid/yadis/xri.rb +90 -0
  118. data/lib/openid/yadis/xrires.rb +99 -0
  119. data/setup.rb +1551 -0
  120. data/test/data/accept.txt +124 -0
  121. data/test/data/dh.txt +29 -0
  122. data/test/data/example-xrds.xml +14 -0
  123. data/test/data/linkparse.txt +587 -0
  124. data/test/data/n2b64 +650 -0
  125. data/test/data/test1-discover.txt +137 -0
  126. data/test/data/test1-parsehtml.txt +152 -0
  127. data/test/data/test_discover/malformed_meta_tag.html +19 -0
  128. data/test/data/test_discover/openid.html +11 -0
  129. data/test/data/test_discover/openid2.html +11 -0
  130. data/test/data/test_discover/openid2_xrds.xml +12 -0
  131. data/test/data/test_discover/openid2_xrds_no_local_id.xml +11 -0
  132. data/test/data/test_discover/openid_1_and_2.html +11 -0
  133. data/test/data/test_discover/openid_1_and_2_xrds.xml +16 -0
  134. data/test/data/test_discover/openid_1_and_2_xrds_bad_delegate.xml +17 -0
  135. data/test/data/test_discover/openid_and_yadis.html +12 -0
  136. data/test/data/test_discover/openid_no_delegate.html +10 -0
  137. data/test/data/test_discover/openid_utf8.html +11 -0
  138. data/test/data/test_discover/yadis_0entries.xml +12 -0
  139. data/test/data/test_discover/yadis_2_bad_local_id.xml +15 -0
  140. data/test/data/test_discover/yadis_2entries_delegate.xml +22 -0
  141. data/test/data/test_discover/yadis_2entries_idp.xml +21 -0
  142. data/test/data/test_discover/yadis_another_delegate.xml +14 -0
  143. data/test/data/test_discover/yadis_idp.xml +12 -0
  144. data/test/data/test_discover/yadis_idp_delegate.xml +13 -0
  145. data/test/data/test_discover/yadis_no_delegate.xml +11 -0
  146. data/test/data/test_xrds/=j3h.2007.11.14.xrds +25 -0
  147. data/test/data/test_xrds/README +12 -0
  148. data/test/data/test_xrds/delegated-20060809-r1.xrds +34 -0
  149. data/test/data/test_xrds/delegated-20060809-r2.xrds +34 -0
  150. data/test/data/test_xrds/delegated-20060809.xrds +34 -0
  151. data/test/data/test_xrds/no-xrd.xml +7 -0
  152. data/test/data/test_xrds/not-xrds.xml +2 -0
  153. data/test/data/test_xrds/prefixsometimes.xrds +34 -0
  154. data/test/data/test_xrds/ref.xrds +109 -0
  155. data/test/data/test_xrds/sometimesprefix.xrds +34 -0
  156. data/test/data/test_xrds/spoof1.xrds +25 -0
  157. data/test/data/test_xrds/spoof2.xrds +25 -0
  158. data/test/data/test_xrds/spoof3.xrds +37 -0
  159. data/test/data/test_xrds/status222.xrds +9 -0
  160. data/test/data/test_xrds/subsegments.xrds +58 -0
  161. data/test/data/test_xrds/valid-populated-xrds.xml +39 -0
  162. data/test/data/trustroot.txt +153 -0
  163. data/test/data/urinorm.txt +79 -0
  164. data/test/discoverdata.rb +131 -0
  165. data/test/test_accept.rb +170 -0
  166. data/test/test_association.rb +266 -0
  167. data/test/test_associationmanager.rb +917 -0
  168. data/test/test_ax.rb +690 -0
  169. data/test/test_checkid_request.rb +294 -0
  170. data/test/test_consumer.rb +257 -0
  171. data/test/test_cryptutil.rb +119 -0
  172. data/test/test_dh.rb +86 -0
  173. data/test/test_discover.rb +852 -0
  174. data/test/test_discovery_manager.rb +262 -0
  175. data/test/test_extension.rb +46 -0
  176. data/test/test_extras.rb +35 -0
  177. data/test/test_fetchers.rb +565 -0
  178. data/test/test_filters.rb +270 -0
  179. data/test/test_idres.rb +963 -0
  180. data/test/test_kvform.rb +165 -0
  181. data/test/test_kvpost.rb +65 -0
  182. data/test/test_linkparse.rb +101 -0
  183. data/test/test_message.rb +1116 -0
  184. data/test/test_nonce.rb +89 -0
  185. data/test/test_oauth.rb +175 -0
  186. data/test/test_openid_yadis.rb +178 -0
  187. data/test/test_pape.rb +247 -0
  188. data/test/test_parsehtml.rb +80 -0
  189. data/test/test_responses.rb +63 -0
  190. data/test/test_server.rb +2457 -0
  191. data/test/test_sreg.rb +479 -0
  192. data/test/test_stores.rb +298 -0
  193. data/test/test_trustroot.rb +113 -0
  194. data/test/test_ui.rb +93 -0
  195. data/test/test_urinorm.rb +35 -0
  196. data/test/test_util.rb +145 -0
  197. data/test/test_xrds.rb +169 -0
  198. data/test/test_xri.rb +48 -0
  199. data/test/test_xrires.rb +63 -0
  200. data/test/test_yadis_discovery.rb +220 -0
  201. data/test/testutil.rb +127 -0
  202. data/test/util.rb +53 -0
  203. metadata +336 -0
@@ -0,0 +1,35 @@
1
+ require 'test/unit'
2
+
3
+ require "openid/urinorm"
4
+ require "testutil"
5
+
6
+ class URINormTestCase < Test::Unit::TestCase
7
+ include OpenID::TestDataMixin
8
+
9
+ def test_normalize
10
+ lines = read_data_file('urinorm.txt')
11
+
12
+ while lines.length > 0
13
+
14
+ case_name = lines.shift.strip
15
+ actual = lines.shift.strip
16
+ expected = lines.shift.strip
17
+ _newline = lines.shift
18
+
19
+ if expected == 'fail'
20
+ begin
21
+ OpenID::URINorm.urinorm(actual)
22
+ rescue URI::InvalidURIError
23
+ assert true
24
+ else
25
+ raise 'Should have gotten URI error'
26
+ end
27
+ else
28
+ normalized = OpenID::URINorm.urinorm(actual)
29
+ assert_equal(expected, normalized, case_name)
30
+ end
31
+ end
32
+ end
33
+
34
+ end
35
+
@@ -0,0 +1,145 @@
1
+ # coding: ASCII-8BIT
2
+ require 'test/unit'
3
+
4
+ require "openid/util"
5
+
6
+ module OpenID
7
+ class UtilTestCase < Test::Unit::TestCase
8
+
9
+ def test_base64
10
+ cases = [
11
+ "",
12
+ "\000",
13
+ "\001",
14
+ "\000" * 100,
15
+ (0...256).collect{ |i| i.chr }.join('')
16
+ ]
17
+
18
+ cases.each do |c|
19
+ encoded = Util.to_base64(c)
20
+ decoded = Util.from_base64(encoded)
21
+ assert(c == decoded)
22
+ end
23
+
24
+ end
25
+
26
+ def test_base64_valid
27
+ [["foos", "~\212,"],
28
+ ["++++", "\373\357\276"],
29
+ ["/+==", "\377"],
30
+ ["", ""],
31
+ ["FOOSBALL", "\024\343\222\004\002\313"],
32
+ ["FoosBL==", "\026\212,\004"],
33
+ ["Foos\nBall", "\026\212,\005\251e"],
34
+ ["Foo\r\ns\nBall", "\026\212,\005\251e"]
35
+ ].each do | input, expected |
36
+ assert_equal(expected, Util.from_base64(input))
37
+ end
38
+ end
39
+
40
+ def test_base64_invalid
41
+ ['!',
42
+ 'Foos!',
43
+ 'Balls',
44
+ 'B===',
45
+ 'Foos Ball',
46
+ '=foo',
47
+ ].each do |invalid_input|
48
+ assert_raises(ArgumentError) do
49
+ Util.from_base64(invalid_input)
50
+ end
51
+ end
52
+ end
53
+
54
+ def test_append_args()
55
+ simple = 'http://www.example.com/'
56
+
57
+ cases = [
58
+ ['empty list',
59
+ [simple, []],
60
+ simple],
61
+
62
+ ['empty dict',
63
+ [simple, {}],
64
+ simple],
65
+
66
+ ['one list',
67
+ [simple, [['a', 'b']]],
68
+ simple + '?a=b'],
69
+
70
+ ['one dict',
71
+ [simple, {'a' => 'b'}],
72
+ simple + '?a=b'],
73
+
74
+ ['two list (same)',
75
+ [simple, [['a', 'b'], ['a', 'c']]],
76
+ simple + '?a=b&a=c'],
77
+
78
+ ['two list',
79
+ [simple, [['a', 'b'], ['b', 'c']]],
80
+ simple + '?a=b&b=c'],
81
+
82
+ ['two list (order)',
83
+ [simple, [['b', 'c'], ['a', 'b']]],
84
+ simple + '?b=c&a=b'],
85
+
86
+ ['two dict [order]',
87
+ [simple, {'b' => 'c', 'a' => 'b'}],
88
+ simple + '?a=b&b=c'],
89
+
90
+ ['args exist [empty]',
91
+ [simple + '?stuff=bother', []],
92
+ simple + '?stuff=bother'],
93
+
94
+ ['escape',
95
+ [simple, [['=', '=']]],
96
+ simple + '?%3D=%3D'],
97
+
98
+ ['escape [URL]',
99
+ [simple, [['this_url', simple]]],
100
+ simple + '?this_url=http%3A%2F%2Fwww.example.com%2F'],
101
+
102
+ ['use dots',
103
+ [simple, [['openid.stuff', 'bother']]],
104
+ simple + '?openid.stuff=bother'],
105
+
106
+ ['args exist',
107
+ [simple + '?stuff=bother', [['ack', 'ack']]],
108
+ simple + '?stuff=bother&ack=ack'],
109
+
110
+ ['args exist',
111
+ [simple + '?stuff=bother', [['ack', 'ack']]],
112
+ simple + '?stuff=bother&ack=ack'],
113
+
114
+ ['args exist [dict]',
115
+ [simple + '?stuff=bother', {'ack' => 'ack'}],
116
+ simple + '?stuff=bother&ack=ack'],
117
+
118
+ ['args exist [dict 2]',
119
+ [simple + '?stuff=bother', {'ack' => 'ack', 'zebra' => 'lion'}],
120
+ simple + '?stuff=bother&ack=ack&zebra=lion'],
121
+
122
+ ['three args [dict]',
123
+ [simple, {'stuff' => 'bother', 'ack' => 'ack', 'zebra' => 'lion'}],
124
+ simple + '?ack=ack&stuff=bother&zebra=lion'],
125
+
126
+ ['three args [list]',
127
+ [simple, [['stuff', 'bother'], ['ack', 'ack'], ['zebra', 'lion']]],
128
+ simple + '?stuff=bother&ack=ack&zebra=lion'],
129
+ ]
130
+
131
+ cases.each { |name, args, expected|
132
+ url, pairs = args
133
+ actual = Util.append_args(url, pairs)
134
+ msg = "[#{name}] Expected: #{expected}, actual: #{actual}"
135
+ assert_equal(expected, actual, msg)
136
+ }
137
+
138
+ end
139
+
140
+ def test_parse_query
141
+ assert_equal({'foo'=>'bar'}, Util.parse_query('foo=bar'))
142
+ end
143
+
144
+ end
145
+ end
@@ -0,0 +1,169 @@
1
+
2
+ require 'test/unit'
3
+ require 'openid/yadis/xrds'
4
+
5
+ require 'testutil'
6
+
7
+ module OpenID
8
+ module Yadis
9
+
10
+ module XRDSTestMixin
11
+ include TestDataMixin
12
+
13
+ XRD_FILE = 'valid-populated-xrds.xml'
14
+ NOXRDS_FILE = 'not-xrds.xml'
15
+ NOXRD_FILE = 'no-xrd.xml'
16
+
17
+ XRDS_DATA_DIR = TEST_DATA_DIR.join('test_xrds')
18
+
19
+ def read_data_file(filename)
20
+ super(filename, false, XRDS_DATA_DIR)
21
+ end
22
+ end
23
+
24
+ class ParseXRDSTestCase < Test::Unit::TestCase
25
+ include XRDSTestMixin
26
+
27
+ # Check that parsing succeeds at all.
28
+ def test_parse
29
+ result = Yadis.parseXRDS(read_data_file(XRD_FILE))
30
+ assert_not_nil result
31
+ end
32
+
33
+ def test_parse_no_xrds_xml
34
+ xmldoc = read_data_file(NOXRDS_FILE)
35
+ assert_raise(Yadis::XRDSError) {
36
+ Yadis.parseXRDS(xmldoc)
37
+ }
38
+ end
39
+
40
+ def test_parse_no_xrds_empty
41
+ assert_raise(Yadis::XRDSError) {
42
+ Yadis.parseXRDS('')
43
+ }
44
+ end
45
+
46
+ def test_is_xrds
47
+ isnt = REXML::Document.new(read_data_file(NOXRDS_FILE))
48
+ should_be = Yadis.parseXRDS(read_data_file(XRD_FILE))
49
+ assert_equal false, Yadis::is_xrds?(isnt)
50
+ assert Yadis::is_xrds?(should_be)
51
+ end
52
+ end
53
+
54
+ class GetYadisXRDTestCase < Test::Unit::TestCase
55
+ include XRDSTestMixin
56
+
57
+ # XXX: Test to make sure this really gets the _right_ XRD.
58
+ def test_get_xrd
59
+ doc = Yadis.parseXRDS(read_data_file(XRD_FILE))
60
+ result = Yadis::get_yadis_xrd(doc)
61
+ assert_not_nil result
62
+ assert_equal 'XRD', result.name
63
+ assert_equal Yadis::XRD_NS_2_0, result.namespace
64
+ end
65
+
66
+ def test_no_xrd
67
+ xmldoc = read_data_file(NOXRD_FILE)
68
+ doc = Yadis.parseXRDS(xmldoc)
69
+ assert_raise(Yadis::XRDSError) {
70
+ Yadis.get_yadis_xrd(doc)
71
+ }
72
+ end
73
+ end
74
+
75
+ class EachServiceTestCase < Test::Unit::TestCase
76
+ include XRDSTestMixin
77
+
78
+ def test_get_xrd
79
+ doc = Yadis.parseXRDS(read_data_file(XRD_FILE))
80
+ count = 0
81
+ result = Yadis::each_service(doc) { |e|
82
+ assert_equal 'Service', e.name
83
+ count += 1
84
+ }
85
+ assert_not_nil result
86
+ assert_equal 5, count
87
+ end
88
+
89
+ def test_no_xrd
90
+ xmldoc = read_data_file(NOXRD_FILE)
91
+ doc = Yadis.parseXRDS(xmldoc)
92
+ assert_raise(Yadis::XRDSError) {
93
+ Yadis.each_service(doc)
94
+ }
95
+ end
96
+
97
+ def test_equal_j3h
98
+ doc = Yadis.parseXRDS(read_data_file('=j3h.2007.11.14.xrds'))
99
+ count = 0
100
+ result = Yadis::each_service(doc) { |e|
101
+ assert_equal 'Service', e.name
102
+ count += 1
103
+ }
104
+ assert_not_nil result
105
+ assert_equal 2, count
106
+ end
107
+ end
108
+
109
+ # XXX: test prioSort!
110
+
111
+ class ExpandServiceTestCase < Test::Unit::TestCase
112
+ @@service_xml = <<END
113
+ <Service>
114
+ <Type>urn://foo</Type>
115
+ <Type>urn://bar</Type>
116
+ <URI priority='2'>http://2.invalid/</URI>
117
+ <URI>http://0.invalid/</URI>
118
+ <URI priority='1'>http://1.invalid/</URI>
119
+ </Service>
120
+ END
121
+
122
+ # XXX - not sorted!
123
+ def test_expand_service
124
+ service_element = REXML::Document.new(@@service_xml).root
125
+ result = Yadis::expand_service(service_element)
126
+ assert_equal 3, result.length
127
+ types, uri, result_element = result[0]
128
+ assert_same service_element, result_element
129
+ assert_equal 'http://0.invalid/', uri
130
+ assert_equal ['urn://foo', 'urn://bar'], types
131
+ types, uri, result_element = result[1]
132
+ assert_equal 'http://1.invalid/', uri
133
+ types, uri, result_element = result[2]
134
+ assert_equal 'http://2.invalid/', uri
135
+ end
136
+ end
137
+
138
+ class PrioSortTestCase < Test::Unit::TestCase
139
+ def new_uri(priority)
140
+ e = REXML::Element.new("URI")
141
+ e.add_attribute("priority", priority.to_s) unless e.nil?
142
+ return e
143
+ end
144
+
145
+ def test_sorting
146
+ l = [
147
+ e7 = new_uri(7),
148
+ e1 = new_uri(1),
149
+ e0 = new_uri(nil),
150
+ e2 = new_uri(2),
151
+ ]
152
+ sorted = Yadis::prio_sort(l)
153
+ assert_same e0, sorted[0]
154
+ assert_same e1, sorted[1]
155
+ assert_same e2, sorted[2]
156
+ assert_same e7, sorted[3]
157
+ end
158
+ end
159
+
160
+ class GetCanonicalIDTestCase < Test::Unit::TestCase
161
+ include XRDSTestMixin
162
+
163
+ def test_multisegment_xri
164
+ xmldoc = Yadis.parseXRDS(read_data_file('subsegments.xrds'))
165
+ result = Yadis.get_canonical_id('xri://=nishitani*masaki', xmldoc)
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,48 @@
1
+ require 'test/unit'
2
+ require 'openid/yadis/xri'
3
+
4
+ module OpenID
5
+
6
+ module Yadis
7
+
8
+ class XriDiscoveryTestCase < Test::Unit::TestCase
9
+
10
+ def test_isXRI?
11
+ assert_equal(:xri, XRI.identifier_scheme('=john.smith'))
12
+ assert_equal(:xri, XRI.identifier_scheme('@smiths/john'))
13
+ assert_equal(:xri, XRI.identifier_scheme('xri://=john'))
14
+ assert_equal(:xri, XRI.identifier_scheme('@ootao*test1'))
15
+ assert_equal(:uri, XRI.identifier_scheme('smoker.myopenid.com'))
16
+ assert_equal(:uri, XRI.identifier_scheme('http://smoker.myopenid.com'))
17
+ assert_equal(:uri, XRI.identifier_scheme('https://smoker.myopenid.com'))
18
+ end
19
+ end
20
+
21
+ class XriEscapingTestCase < Test::Unit::TestCase
22
+ def test_escaping_percents
23
+ assert_equal('@example/abc%252Fd/ef',
24
+ XRI.escape_for_iri('@example/abc%2Fd/ef'))
25
+ end
26
+
27
+ def test_escaping_xref
28
+ # no escapes
29
+ assert_equal('@example/foo/(@bar)',
30
+ XRI.escape_for_iri('@example/foo/(@bar)'))
31
+ # escape slashes
32
+ assert_equal('@example/foo/(@bar%2Fbaz)',
33
+ XRI.escape_for_iri('@example/foo/(@bar/baz)'))
34
+ # escape query ? and fragment #
35
+ assert_equal('@example/foo/(@baz%3Fp=q%23r)?i=j#k',
36
+ XRI.escape_for_iri('@example/foo/(@baz?p=q#r)?i=j#k'))
37
+ end
38
+ end
39
+
40
+ class XriTransformationTestCase < Test::Unit::TestCase
41
+ def test_to_iri_normal
42
+ assert_equal('xri://@example', XRI.to_iri_normal('@example'))
43
+ end
44
+ # iri_to_url:
45
+ # various ucschar to hex
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,63 @@
1
+
2
+ require 'test/unit'
3
+ require 'openid/yadis/xrires'
4
+
5
+ module OpenID
6
+ module Yadis
7
+
8
+ class XRDSFetcher
9
+ def initialize(results)
10
+ @results = results
11
+ end
12
+
13
+ def fetch(url, body=nil, headers=nil, redirect_limit=nil)
14
+ if !@results.empty?
15
+ return @results.shift
16
+ end
17
+
18
+ nil
19
+ end
20
+ end
21
+
22
+ class ProxyQueryTestCase < Test::Unit::TestCase
23
+ def setup
24
+ @proxy_url = 'http://xri.example.com/'
25
+ @proxy = XRI::ProxyResolver.new(@proxy_url)
26
+ @servicetype = 'xri://+i-service*(+forwarding)*($v*1.0)'
27
+ @servicetype_enc = 'xri%3A%2F%2F%2Bi-service%2A%28%2Bforwarding%29%2A%28%24v%2A1.0%29'
28
+ end
29
+
30
+ def test_proxy_url
31
+ st = @servicetype
32
+ ste = @servicetype_enc
33
+ args_esc = "_xrd_r=application%2Fxrds%2Bxml&_xrd_t=" + ste
34
+ pqu = @proxy.method('query_url')
35
+ h = @proxy_url
36
+
37
+ assert_equal(h + '=foo?' + args_esc, pqu.call('=foo', st))
38
+ assert_equal(h + '=foo/bar?baz&' + args_esc,
39
+ pqu.call('=foo/bar?baz', st))
40
+ assert_equal(h + '=foo/bar?baz=quux&' + args_esc,
41
+ pqu.call('=foo/bar?baz=quux', st))
42
+ assert_equal(h + '=foo/bar?mi=fa&so=la&' + args_esc,
43
+ pqu.call('=foo/bar?mi=fa&so=la', st))
44
+
45
+ # With no service endpoint selection.
46
+ args_esc = "_xrd_r=application%2Fxrds%2Bxml%3Bsep%3Dfalse"
47
+ assert_equal(h + '=foo?' + args_esc, pqu.call('=foo', nil))
48
+ end
49
+
50
+ def test_proxy_url_qmarks
51
+ st = @servicetype
52
+ ste = @servicetype_enc
53
+ args_esc = "_xrd_r=application%2Fxrds%2Bxml&_xrd_t=" + ste
54
+ pqu = @proxy.method('query_url')
55
+ h = @proxy_url
56
+
57
+ assert_equal(h + '=foo/bar??' + args_esc, pqu.call('=foo/bar?', st))
58
+ assert_equal(h + '=foo/bar????' + args_esc,
59
+ pqu.call('=foo/bar???', st))
60
+ end
61
+ end
62
+ end
63
+ end