pelle-ruby-openid 2.1.8
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.
- data/CHANGELOG +215 -0
- data/CHANGES-2.1.0 +36 -0
- data/INSTALL +47 -0
- data/LICENSE +210 -0
- data/NOTICE +2 -0
- data/README +82 -0
- data/UPGRADE +127 -0
- data/VERSION +1 -0
- data/examples/README +32 -0
- data/examples/active_record_openid_store/README +58 -0
- data/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb +24 -0
- data/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb +26 -0
- data/examples/active_record_openid_store/init.rb +8 -0
- data/examples/active_record_openid_store/lib/association.rb +10 -0
- data/examples/active_record_openid_store/lib/nonce.rb +3 -0
- data/examples/active_record_openid_store/lib/open_id_setting.rb +4 -0
- data/examples/active_record_openid_store/lib/openid_ar_store.rb +57 -0
- data/examples/active_record_openid_store/test/store_test.rb +212 -0
- data/examples/discover +49 -0
- data/examples/rails_openid/README +153 -0
- data/examples/rails_openid/Rakefile +10 -0
- data/examples/rails_openid/app/controllers/application.rb +4 -0
- data/examples/rails_openid/app/controllers/consumer_controller.rb +122 -0
- data/examples/rails_openid/app/controllers/login_controller.rb +45 -0
- data/examples/rails_openid/app/controllers/server_controller.rb +265 -0
- data/examples/rails_openid/app/helpers/application_helper.rb +3 -0
- data/examples/rails_openid/app/helpers/login_helper.rb +2 -0
- data/examples/rails_openid/app/helpers/server_helper.rb +9 -0
- data/examples/rails_openid/app/views/consumer/index.rhtml +81 -0
- data/examples/rails_openid/app/views/layouts/server.rhtml +68 -0
- data/examples/rails_openid/app/views/login/index.rhtml +56 -0
- data/examples/rails_openid/app/views/server/decide.rhtml +26 -0
- data/examples/rails_openid/config/boot.rb +19 -0
- data/examples/rails_openid/config/database.yml +74 -0
- data/examples/rails_openid/config/environment.rb +54 -0
- data/examples/rails_openid/config/environments/development.rb +19 -0
- data/examples/rails_openid/config/environments/production.rb +19 -0
- data/examples/rails_openid/config/environments/test.rb +19 -0
- data/examples/rails_openid/config/routes.rb +24 -0
- data/examples/rails_openid/doc/README_FOR_APP +2 -0
- data/examples/rails_openid/public/.htaccess +40 -0
- data/examples/rails_openid/public/404.html +8 -0
- data/examples/rails_openid/public/500.html +8 -0
- data/examples/rails_openid/public/dispatch.cgi +12 -0
- data/examples/rails_openid/public/dispatch.fcgi +26 -0
- data/examples/rails_openid/public/dispatch.rb +12 -0
- data/examples/rails_openid/public/favicon.ico +0 -0
- data/examples/rails_openid/public/images/openid_login_bg.gif +0 -0
- data/examples/rails_openid/public/javascripts/controls.js +750 -0
- data/examples/rails_openid/public/javascripts/dragdrop.js +584 -0
- data/examples/rails_openid/public/javascripts/effects.js +854 -0
- data/examples/rails_openid/public/javascripts/prototype.js +1785 -0
- data/examples/rails_openid/public/robots.txt +1 -0
- data/examples/rails_openid/script/about +3 -0
- data/examples/rails_openid/script/breakpointer +3 -0
- data/examples/rails_openid/script/console +3 -0
- data/examples/rails_openid/script/destroy +3 -0
- data/examples/rails_openid/script/generate +3 -0
- data/examples/rails_openid/script/performance/benchmarker +3 -0
- data/examples/rails_openid/script/performance/profiler +3 -0
- data/examples/rails_openid/script/plugin +3 -0
- data/examples/rails_openid/script/process/reaper +3 -0
- data/examples/rails_openid/script/process/spawner +3 -0
- data/examples/rails_openid/script/process/spinner +3 -0
- data/examples/rails_openid/script/runner +3 -0
- data/examples/rails_openid/script/server +3 -0
- data/examples/rails_openid/test/functional/login_controller_test.rb +18 -0
- data/examples/rails_openid/test/functional/server_controller_test.rb +18 -0
- data/examples/rails_openid/test/test_helper.rb +28 -0
- data/lib/hmac/hmac.rb +112 -0
- data/lib/hmac/sha1.rb +11 -0
- data/lib/hmac/sha2.rb +25 -0
- data/lib/openid/association.rb +249 -0
- data/lib/openid/consumer/associationmanager.rb +344 -0
- data/lib/openid/consumer/checkid_request.rb +186 -0
- data/lib/openid/consumer/discovery.rb +498 -0
- data/lib/openid/consumer/discovery_manager.rb +123 -0
- data/lib/openid/consumer/html_parse.rb +134 -0
- data/lib/openid/consumer/idres.rb +523 -0
- data/lib/openid/consumer/responses.rb +148 -0
- data/lib/openid/consumer.rb +395 -0
- data/lib/openid/cryptutil.rb +97 -0
- data/lib/openid/dh.rb +89 -0
- data/lib/openid/extension.rb +39 -0
- data/lib/openid/extensions/ax.rb +516 -0
- data/lib/openid/extensions/oauth.rb +91 -0
- data/lib/openid/extensions/pape.rb +179 -0
- data/lib/openid/extensions/sreg.rb +277 -0
- data/lib/openid/extras.rb +11 -0
- data/lib/openid/fetchers.rb +238 -0
- data/lib/openid/kvform.rb +136 -0
- data/lib/openid/kvpost.rb +58 -0
- data/lib/openid/message.rb +553 -0
- data/lib/openid/protocolerror.rb +8 -0
- data/lib/openid/server.rb +1544 -0
- data/lib/openid/store/filesystem.rb +271 -0
- data/lib/openid/store/interface.rb +75 -0
- data/lib/openid/store/memcache.rb +107 -0
- data/lib/openid/store/memory.rb +84 -0
- data/lib/openid/store/nonce.rb +68 -0
- data/lib/openid/trustroot.rb +349 -0
- data/lib/openid/urinorm.rb +75 -0
- data/lib/openid/util.rb +110 -0
- data/lib/openid/yadis/accept.rb +148 -0
- data/lib/openid/yadis/constants.rb +21 -0
- data/lib/openid/yadis/discovery.rb +153 -0
- data/lib/openid/yadis/filters.rb +205 -0
- data/lib/openid/yadis/htmltokenizer.rb +305 -0
- data/lib/openid/yadis/parsehtml.rb +45 -0
- data/lib/openid/yadis/services.rb +42 -0
- data/lib/openid/yadis/xrds.rb +155 -0
- data/lib/openid/yadis/xri.rb +90 -0
- data/lib/openid/yadis/xrires.rb +106 -0
- data/lib/openid.rb +20 -0
- data/setup.rb +1551 -0
- data/test/data/accept.txt +124 -0
- data/test/data/dh.txt +29 -0
- data/test/data/example-xrds.xml +14 -0
- data/test/data/linkparse.txt +587 -0
- data/test/data/n2b64 +650 -0
- data/test/data/test1-discover.txt +137 -0
- data/test/data/test1-parsehtml.txt +152 -0
- data/test/data/test_discover/malformed_meta_tag.html +19 -0
- data/test/data/test_discover/openid.html +11 -0
- data/test/data/test_discover/openid2.html +11 -0
- data/test/data/test_discover/openid2_xrds.xml +12 -0
- data/test/data/test_discover/openid2_xrds_no_local_id.xml +11 -0
- data/test/data/test_discover/openid_1_and_2.html +11 -0
- data/test/data/test_discover/openid_1_and_2_xrds.xml +16 -0
- data/test/data/test_discover/openid_1_and_2_xrds_bad_delegate.xml +17 -0
- data/test/data/test_discover/openid_and_yadis.html +12 -0
- data/test/data/test_discover/openid_no_delegate.html +10 -0
- data/test/data/test_discover/yadis_0entries.xml +12 -0
- data/test/data/test_discover/yadis_2_bad_local_id.xml +15 -0
- data/test/data/test_discover/yadis_2entries_delegate.xml +22 -0
- data/test/data/test_discover/yadis_2entries_idp.xml +21 -0
- data/test/data/test_discover/yadis_another_delegate.xml +14 -0
- data/test/data/test_discover/yadis_idp.xml +12 -0
- data/test/data/test_discover/yadis_idp_delegate.xml +13 -0
- data/test/data/test_discover/yadis_no_delegate.xml +11 -0
- data/test/data/test_xrds/=j3h.2007.11.14.xrds +25 -0
- data/test/data/test_xrds/README +12 -0
- data/test/data/test_xrds/delegated-20060809-r1.xrds +34 -0
- data/test/data/test_xrds/delegated-20060809-r2.xrds +34 -0
- data/test/data/test_xrds/delegated-20060809.xrds +34 -0
- data/test/data/test_xrds/no-xrd.xml +7 -0
- data/test/data/test_xrds/not-xrds.xml +2 -0
- data/test/data/test_xrds/prefixsometimes.xrds +34 -0
- data/test/data/test_xrds/ref.xrds +109 -0
- data/test/data/test_xrds/sometimesprefix.xrds +34 -0
- data/test/data/test_xrds/spoof1.xrds +25 -0
- data/test/data/test_xrds/spoof2.xrds +25 -0
- data/test/data/test_xrds/spoof3.xrds +37 -0
- data/test/data/test_xrds/status222.xrds +9 -0
- data/test/data/test_xrds/subsegments.xrds +58 -0
- data/test/data/test_xrds/valid-populated-xrds.xml +39 -0
- data/test/data/trustroot.txt +153 -0
- data/test/data/urinorm.txt +79 -0
- data/test/discoverdata.rb +131 -0
- data/test/test_accept.rb +170 -0
- data/test/test_association.rb +266 -0
- data/test/test_associationmanager.rb +917 -0
- data/test/test_ax.rb +648 -0
- data/test/test_checkid_request.rb +294 -0
- data/test/test_consumer.rb +257 -0
- data/test/test_cryptutil.rb +119 -0
- data/test/test_dh.rb +86 -0
- data/test/test_discover.rb +838 -0
- data/test/test_discovery_manager.rb +262 -0
- data/test/test_extension.rb +46 -0
- data/test/test_extras.rb +35 -0
- data/test/test_fetchers.rb +538 -0
- data/test/test_filters.rb +270 -0
- data/test/test_idres.rb +963 -0
- data/test/test_kvform.rb +165 -0
- data/test/test_kvpost.rb +65 -0
- data/test/test_linkparse.rb +101 -0
- data/test/test_message.rb +1116 -0
- data/test/test_nonce.rb +89 -0
- data/test/test_oauth.rb +175 -0
- data/test/test_openid_yadis.rb +178 -0
- data/test/test_pape.rb +247 -0
- data/test/test_parsehtml.rb +80 -0
- data/test/test_responses.rb +63 -0
- data/test/test_server.rb +2457 -0
- data/test/test_sreg.rb +479 -0
- data/test/test_stores.rb +298 -0
- data/test/test_trustroot.rb +113 -0
- data/test/test_urinorm.rb +35 -0
- data/test/test_util.rb +145 -0
- data/test/test_xrds.rb +169 -0
- data/test/test_xri.rb +48 -0
- data/test/test_xrires.rb +63 -0
- data/test/test_yadis_discovery.rb +220 -0
- data/test/testutil.rb +127 -0
- data/test/util.rb +53 -0
- metadata +316 -0
|
@@ -0,0 +1,1116 @@
|
|
|
1
|
+
# last synced with Python openid.test.test_message on 6/29/2007.
|
|
2
|
+
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
require 'util'
|
|
5
|
+
require 'openid/message'
|
|
6
|
+
|
|
7
|
+
require 'rexml/document'
|
|
8
|
+
|
|
9
|
+
module OpenID
|
|
10
|
+
module GetArgsMixin
|
|
11
|
+
|
|
12
|
+
# Tests a standard set of behaviors of Message.get_arg with
|
|
13
|
+
# variations on handling defaults.
|
|
14
|
+
def get_arg_tests(ns, key, expected=nil)
|
|
15
|
+
assert_equal(expected, @m.get_arg(ns, key))
|
|
16
|
+
|
|
17
|
+
if expected.nil?
|
|
18
|
+
assert_equal(@m.get_arg(ns, key, :a_default), :a_default)
|
|
19
|
+
assert_raise(Message::KeyNotFound) { @m.get_arg(ns, key, NO_DEFAULT) }
|
|
20
|
+
else
|
|
21
|
+
assert_equal(@m.get_arg(ns, key, :a_default), expected)
|
|
22
|
+
assert_equal(@m.get_arg(ns, key, NO_DEFAULT), expected)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class EmptyMessageTestCase < Test::Unit::TestCase
|
|
30
|
+
include GetArgsMixin
|
|
31
|
+
|
|
32
|
+
def setup
|
|
33
|
+
@m = Message.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_get_aliased_arg_no_default
|
|
37
|
+
assert_raises(Message::KeyNotFound) do
|
|
38
|
+
@m.get_aliased_arg('ns.pork', NO_DEFAULT)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
ns_uri = "urn:pork"
|
|
42
|
+
@m.namespaces.add_alias(ns_uri, 'pork_alias')
|
|
43
|
+
|
|
44
|
+
# Should return ns_uri.
|
|
45
|
+
assert_equal(ns_uri, @m.get_aliased_arg('ns.pork_alias', NO_DEFAULT))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_to_post_args
|
|
49
|
+
assert_equal({}, @m.to_post_args)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_to_args
|
|
53
|
+
assert_equal({}, @m.to_args)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_to_kvform
|
|
57
|
+
assert_equal('', @m.to_kvform)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_from_kvform
|
|
61
|
+
kvform = "foo:bar\none:two\n"
|
|
62
|
+
args = {'foo' => 'bar', 'one' => 'two'}
|
|
63
|
+
expected_result = Message.from_openid_args(args)
|
|
64
|
+
|
|
65
|
+
assert_equal(expected_result, Message.from_kvform(kvform))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_to_url_encoded
|
|
69
|
+
assert_equal('', @m.to_url_encoded)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_to_url
|
|
73
|
+
base_url = 'http://base.url/'
|
|
74
|
+
assert_equal(base_url, @m.to_url(base_url))
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_get_openid
|
|
78
|
+
assert_equal(nil, @m.get_openid_namespace)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_get_key_openid
|
|
82
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
83
|
+
@m.get_key(OPENID_NS, nil)
|
|
84
|
+
}
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_get_key_bare
|
|
88
|
+
assert_equal('foo', @m.get_key(BARE_NS, 'foo'))
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_get_key_ns1
|
|
92
|
+
assert_equal(nil, @m.get_key(OPENID1_NS, 'foo'))
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_get_key_ns2
|
|
96
|
+
assert_equal(nil, @m.get_key(OPENID2_NS, 'foo'))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_get_key_ns3
|
|
100
|
+
assert_equal(nil, @m.get_key('urn:something-special', 'foo'))
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_has_key
|
|
104
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
105
|
+
@m.has_key?(OPENID_NS, 'foo')
|
|
106
|
+
}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_has_key_bare
|
|
110
|
+
assert_equal(false, @m.has_key?(BARE_NS, 'foo'))
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_has_key_ns1
|
|
114
|
+
assert_equal(false, @m.has_key?(OPENID1_NS, 'foo'))
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_has_key_ns2
|
|
118
|
+
assert_equal(false, @m.has_key?(OPENID2_NS, 'foo'))
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_has_key_ns3
|
|
122
|
+
assert_equal(false, @m.has_key?('urn:xxx', 'foo'))
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_get_arg
|
|
126
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
127
|
+
@m.get_args(OPENID_NS)
|
|
128
|
+
}
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_get_arg_bare
|
|
132
|
+
get_arg_tests(ns=BARE_NS, key='foo')
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def test_get_arg_ns1
|
|
136
|
+
get_arg_tests(ns=OPENID1_NS, key='foo')
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def test_get_arg_ns2
|
|
140
|
+
get_arg_tests(ns=OPENID2_NS, key='foo')
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def test_get_arg_ns3
|
|
144
|
+
get_arg_tests(ns='urn:nothing-significant', key='foo')
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def test_get_args
|
|
148
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
149
|
+
@m.get_args(OPENID_NS)
|
|
150
|
+
}
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_get_args_bare
|
|
154
|
+
assert_equal({}, @m.get_args(BARE_NS))
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def test_get_args_ns1
|
|
158
|
+
assert_equal({}, @m.get_args(OPENID1_NS))
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_get_args_ns2
|
|
162
|
+
assert_equal({}, @m.get_args(OPENID2_NS))
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def test_get_args_ns3
|
|
166
|
+
assert_equal({}, @m.get_args('urn:xxx'))
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def test_update_args
|
|
170
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
171
|
+
@m.update_args(OPENID_NS, {'does not'=>'matter'})
|
|
172
|
+
}
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def _test_update_args_ns(ns)
|
|
176
|
+
updates = {
|
|
177
|
+
'camper van beethoven' => 'david l',
|
|
178
|
+
'magnolia electric, co' => 'jason m'
|
|
179
|
+
}
|
|
180
|
+
assert_equal({}, @m.get_args(ns))
|
|
181
|
+
@m.update_args(ns, updates)
|
|
182
|
+
assert_equal(updates, @m.get_args(ns))
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_update_args_bare
|
|
186
|
+
_test_update_args_ns(BARE_NS)
|
|
187
|
+
end
|
|
188
|
+
def test_update_args_ns1
|
|
189
|
+
_test_update_args_ns(OPENID1_NS)
|
|
190
|
+
end
|
|
191
|
+
def test_update_args_ns2
|
|
192
|
+
_test_update_args_ns(OPENID2_NS)
|
|
193
|
+
end
|
|
194
|
+
def test_update_args_ns3
|
|
195
|
+
_test_update_args_ns('urn:xxx')
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def test_set_arg
|
|
199
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
200
|
+
@m.set_arg(OPENID_NS,'does not','matter')
|
|
201
|
+
}
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def _test_set_arg_ns(ns)
|
|
205
|
+
key = 'Camper Van Beethoven'
|
|
206
|
+
value = 'David Lowery'
|
|
207
|
+
assert_equal(nil, @m.get_arg(ns, key))
|
|
208
|
+
@m.set_arg(ns, key, value)
|
|
209
|
+
assert_equal(value, @m.get_arg(ns, key))
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def test_set_arg_bare
|
|
213
|
+
_test_set_arg_ns(BARE_NS)
|
|
214
|
+
end
|
|
215
|
+
def test_set_arg_ns1
|
|
216
|
+
_test_set_arg_ns(OPENID1_NS)
|
|
217
|
+
end
|
|
218
|
+
def test_set_arg_ns2
|
|
219
|
+
_test_set_arg_ns(OPENID2_NS)
|
|
220
|
+
end
|
|
221
|
+
def test_set_arg_ns3
|
|
222
|
+
_test_set_arg_ns('urn:xxx')
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def test_del_arg
|
|
226
|
+
assert_raise(UndefinedOpenIDNamespace) {
|
|
227
|
+
@m.set_arg(OPENID_NS, 'does not', 'matter')
|
|
228
|
+
}
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def _test_del_arg_ns(ns)
|
|
232
|
+
key = 'Fleeting Joys'
|
|
233
|
+
assert_equal(nil, @m.del_arg(ns, key))
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def test_del_arg_bare
|
|
237
|
+
_test_del_arg_ns(BARE_NS)
|
|
238
|
+
end
|
|
239
|
+
def test_del_arg_ns1
|
|
240
|
+
_test_del_arg_ns(OPENID1_NS)
|
|
241
|
+
end
|
|
242
|
+
def test_del_arg_ns2
|
|
243
|
+
_test_del_arg_ns(OPENID2_NS)
|
|
244
|
+
end
|
|
245
|
+
def test_del_arg_ns3
|
|
246
|
+
_test_del_arg_ns('urn:xxx')
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def test_isOpenID1
|
|
250
|
+
assert_equal(false, @m.is_openid1)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def test_isOpenID2
|
|
254
|
+
assert_equal(false, @m.is_openid2)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def test_set_openid_namespace
|
|
258
|
+
assert_raise(InvalidOpenIDNamespace) {
|
|
259
|
+
@m.set_openid_namespace('http://invalid/', false)
|
|
260
|
+
}
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
class OpenID1MessageTest < Test::Unit::TestCase
|
|
265
|
+
include GetArgsMixin
|
|
266
|
+
|
|
267
|
+
def setup
|
|
268
|
+
@m = Message.from_post_args({'openid.mode' => 'error',
|
|
269
|
+
'openid.error' => 'unit test'})
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def test_has_openid_ns
|
|
273
|
+
assert_equal(OPENID1_NS, @m.get_openid_namespace)
|
|
274
|
+
assert_equal(OPENID1_NS,
|
|
275
|
+
@m.namespaces.get_namespace_uri(NULL_NAMESPACE))
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def test_get_aliased_arg
|
|
279
|
+
assert_equal('error', @m.get_aliased_arg('mode'))
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def test_get_aliased_arg_ns
|
|
283
|
+
assert_equal(OPENID1_NS, @m.get_aliased_arg('ns'))
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def test_get_aliased_arg_with_ns
|
|
287
|
+
@m = Message.from_post_args(
|
|
288
|
+
{'openid.mode' => 'error',
|
|
289
|
+
'openid.error' => 'unit test',
|
|
290
|
+
'openid.ns.invalid' => 'http://invalid/',
|
|
291
|
+
'openid.invalid.stuff' => 'things',
|
|
292
|
+
'openid.invalid.stuff.blinky' => 'powerplant',
|
|
293
|
+
})
|
|
294
|
+
assert_equal('http://invalid/', @m.get_aliased_arg('ns.invalid'))
|
|
295
|
+
assert_equal('things', @m.get_aliased_arg('invalid.stuff'))
|
|
296
|
+
assert_equal('powerplant', @m.get_aliased_arg('invalid.stuff.blinky'))
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def test_get_aliased_arg_with_ns_default
|
|
300
|
+
@m = Message.from_post_args({})
|
|
301
|
+
assert_equal('monkeys!', @m.get_aliased_arg('ns.invalid',
|
|
302
|
+
default="monkeys!"))
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def test_to_post_args
|
|
306
|
+
assert_equal({'openid.mode' => 'error',
|
|
307
|
+
'openid.error' => 'unit test'},
|
|
308
|
+
@m.to_post_args)
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
def test_to_post_args_ns
|
|
312
|
+
invalid_ns = 'http://invalid/'
|
|
313
|
+
@m.namespaces.add_alias(invalid_ns, 'foos')
|
|
314
|
+
@m.set_arg(invalid_ns, 'ball', 'awesome')
|
|
315
|
+
@m.set_arg(BARE_NS, 'xey', 'value')
|
|
316
|
+
assert_equal({'openid.mode' => 'error',
|
|
317
|
+
'openid.error' => 'unit test',
|
|
318
|
+
'openid.foos.ball' => 'awesome',
|
|
319
|
+
'xey' => 'value',
|
|
320
|
+
'openid.ns.foos' => 'http://invalid/'
|
|
321
|
+
}, @m.to_post_args)
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def test_to_args
|
|
325
|
+
assert_equal({'mode' => 'error',
|
|
326
|
+
'error' => 'unit test'},
|
|
327
|
+
@m.to_args)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def test_to_kvform
|
|
331
|
+
assert_equal("error:unit test\nmode:error\n",
|
|
332
|
+
@m.to_kvform)
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def test_to_url_encoded
|
|
336
|
+
assert_equal('openid.error=unit+test&openid.mode=error',
|
|
337
|
+
@m.to_url_encoded)
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def test_to_url
|
|
341
|
+
base_url = 'http://base.url/'
|
|
342
|
+
actual = @m.to_url(base_url)
|
|
343
|
+
actual_base = actual[0...base_url.length]
|
|
344
|
+
assert_equal(base_url, actual_base)
|
|
345
|
+
assert_equal('?', actual[base_url.length].chr)
|
|
346
|
+
query = actual[base_url.length+1..-1]
|
|
347
|
+
assert_equal({'openid.mode'=>['error'],'openid.error'=>['unit test']},
|
|
348
|
+
CGI.parse(query))
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def test_get_openid
|
|
352
|
+
assert_equal(OPENID1_NS, @m.get_openid_namespace)
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
def test_get_key_openid
|
|
356
|
+
assert_equal('openid.mode', @m.get_key(OPENID_NS, 'mode'))
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def test_get_key_bare
|
|
360
|
+
assert_equal('mode', @m.get_key(BARE_NS, 'mode'))
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def test_get_key_ns1
|
|
364
|
+
assert_equal('openid.mode', @m.get_key(OPENID1_NS, 'mode'))
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
def test_get_key_ns2
|
|
368
|
+
assert_equal(nil, @m.get_key(OPENID2_NS, 'mode'))
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def test_get_key_ns3
|
|
372
|
+
assert_equal(nil, @m.get_key('urn:xxx', 'mode'))
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
def test_has_key
|
|
376
|
+
assert_equal(true, @m.has_key?(OPENID_NS, 'mode'))
|
|
377
|
+
end
|
|
378
|
+
def test_has_key_bare
|
|
379
|
+
assert_equal(false, @m.has_key?(BARE_NS, 'mode'))
|
|
380
|
+
end
|
|
381
|
+
def test_has_key_ns1
|
|
382
|
+
assert_equal(true, @m.has_key?(OPENID1_NS, 'mode'))
|
|
383
|
+
end
|
|
384
|
+
def test_has_key_ns2
|
|
385
|
+
assert_equal(false, @m.has_key?(OPENID2_NS, 'mode'))
|
|
386
|
+
end
|
|
387
|
+
def test_has_key_ns3
|
|
388
|
+
assert_equal(false, @m.has_key?('urn:xxx', 'mode'))
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def test_get_arg
|
|
392
|
+
assert_equal('error', @m.get_arg(OPENID_NS, 'mode'))
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def test_get_arg_bare
|
|
396
|
+
get_arg_tests(ns=BARE_NS, key='mode')
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def test_get_arg_ns
|
|
400
|
+
get_arg_tests(ns=OPENID_NS, key='mode', expected='error')
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
def test_get_arg_ns1
|
|
404
|
+
get_arg_tests(ns=OPENID1_NS, key='mode', expected='error')
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
def test_get_arg_ns2
|
|
408
|
+
get_arg_tests(ns=OPENID2_NS, key='mode')
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def test_get_arg_ns3
|
|
412
|
+
get_arg_tests(ns='urn:nothing-significant', key='mode')
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
def test_get_args
|
|
416
|
+
assert_equal({'mode'=>'error','error'=>'unit test'},
|
|
417
|
+
@m.get_args(OPENID_NS))
|
|
418
|
+
end
|
|
419
|
+
def test_get_args_bare
|
|
420
|
+
assert_equal({}, @m.get_args(BARE_NS))
|
|
421
|
+
end
|
|
422
|
+
def test_get_args_ns1
|
|
423
|
+
assert_equal({'mode'=>'error','error'=>'unit test'},
|
|
424
|
+
@m.get_args(OPENID1_NS))
|
|
425
|
+
end
|
|
426
|
+
def test_get_args_ns2
|
|
427
|
+
assert_equal({}, @m.get_args(OPENID2_NS))
|
|
428
|
+
end
|
|
429
|
+
def test_get_args_ns3
|
|
430
|
+
assert_equal({}, @m.get_args('urn:xxx'))
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
def _test_update_args_ns(ns, before=nil)
|
|
434
|
+
if before.nil?
|
|
435
|
+
before = {}
|
|
436
|
+
end
|
|
437
|
+
update_args = {
|
|
438
|
+
'Camper van Beethoven'=>'David Lowery',
|
|
439
|
+
'Magnolia Electric Co.'=>'Jason Molina'
|
|
440
|
+
}
|
|
441
|
+
assert_equal(before, @m.get_args(ns))
|
|
442
|
+
@m.update_args(ns, update_args)
|
|
443
|
+
after = before.dup
|
|
444
|
+
after.update(update_args)
|
|
445
|
+
assert_equal(after, @m.get_args(ns))
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
def test_update_args
|
|
449
|
+
_test_update_args_ns(OPENID_NS, {'mode'=>'error','error'=>'unit test'})
|
|
450
|
+
end
|
|
451
|
+
def test_update_args_bare
|
|
452
|
+
_test_update_args_ns(BARE_NS)
|
|
453
|
+
end
|
|
454
|
+
def test_update_args_ns1
|
|
455
|
+
_test_update_args_ns(OPENID1_NS, {'mode'=>'error','error'=>'unit test'})
|
|
456
|
+
end
|
|
457
|
+
def test_update_args_ns2
|
|
458
|
+
_test_update_args_ns(OPENID2_NS)
|
|
459
|
+
end
|
|
460
|
+
def test_update_args_ns3
|
|
461
|
+
_test_update_args_ns('urn:xxx')
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def _test_set_arg_ns(ns)
|
|
465
|
+
key = 'awesometown'
|
|
466
|
+
value = 'funny'
|
|
467
|
+
assert_equal(nil, @m.get_arg(ns,key))
|
|
468
|
+
@m.set_arg(ns, key, value)
|
|
469
|
+
assert_equal(value, @m.get_arg(ns,key))
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
def test_set_arg; _test_set_arg_ns(OPENID_NS); end
|
|
473
|
+
def test_set_arg_bare; _test_set_arg_ns(BARE_NS); end
|
|
474
|
+
def test_set_arg_ns1; _test_set_arg_ns(OPENID1_NS); end
|
|
475
|
+
def test_set_arg_ns2; _test_set_arg_ns(OPENID2_NS); end
|
|
476
|
+
def test_set_arg_ns3; _test_set_arg_ns('urn:xxx'); end
|
|
477
|
+
|
|
478
|
+
def _test_del_arg_ns(ns)
|
|
479
|
+
key = 'marry an'
|
|
480
|
+
value = 'ice cream sandwich'
|
|
481
|
+
@m.set_arg(ns, key, value)
|
|
482
|
+
assert_equal(value, @m.get_arg(ns,key))
|
|
483
|
+
@m.del_arg(ns,key)
|
|
484
|
+
assert_equal(nil, @m.get_arg(ns,key))
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
def test_del_arg; _test_del_arg_ns(OPENID_NS); end
|
|
488
|
+
def test_del_arg_bare; _test_del_arg_ns(BARE_NS); end
|
|
489
|
+
def test_del_arg_ns1; _test_del_arg_ns(OPENID1_NS); end
|
|
490
|
+
def test_del_arg_ns2; _test_del_arg_ns(OPENID2_NS); end
|
|
491
|
+
def test_del_arg_ns3; _test_del_arg_ns('urn:yyy'); end
|
|
492
|
+
|
|
493
|
+
def test_isOpenID1
|
|
494
|
+
assert_equal(true, @m.is_openid1)
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
def test_isOpenID2
|
|
498
|
+
assert_equal(false, @m.is_openid2)
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
def test_equal
|
|
502
|
+
assert_equal(Message.new, Message.new)
|
|
503
|
+
assert_not_equal(Message.new, nil)
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
def test_from_openid_args_undefined_ns
|
|
507
|
+
expected = 'almost.complete'
|
|
508
|
+
msg = Message.from_openid_args({'coverage.is' => expected})
|
|
509
|
+
actual = msg.get_arg(OPENID1_NS, 'coverage.is')
|
|
510
|
+
assert_equal(expected, actual)
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
# XXX: we need to implement the KVForm module before we can fix this
|
|
514
|
+
def TODOtest_from_kvform
|
|
515
|
+
kv = 'foos:ball\n'
|
|
516
|
+
msg = Message.from_kvform(kv)
|
|
517
|
+
assert_equal(msg.get(OPENID1_NS, 'foos'), 'ball')
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
def test_initialize_sets_namespace
|
|
521
|
+
msg = Message.new(OPENID1_NS)
|
|
522
|
+
assert_equal(OPENID1_NS, msg.get_openid_namespace)
|
|
523
|
+
end
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
class OpenID1ExplicitMessageTest < Test::Unit::TestCase
|
|
527
|
+
# XXX - check to make sure the test suite will get built the way this
|
|
528
|
+
# expects.
|
|
529
|
+
def setup
|
|
530
|
+
@m = Message.from_post_args({'openid.mode'=>'error',
|
|
531
|
+
'openid.error'=>'unit test',
|
|
532
|
+
'openid.ns'=>OPENID1_NS})
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
def test_to_post_args
|
|
536
|
+
assert_equal({'openid.mode' => 'error',
|
|
537
|
+
'openid.error' => 'unit test',
|
|
538
|
+
'openid.ns'=>OPENID1_NS,
|
|
539
|
+
},
|
|
540
|
+
@m.to_post_args)
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
def test_to_post_args_ns
|
|
544
|
+
invalid_ns = 'http://invalid/'
|
|
545
|
+
@m.namespaces.add_alias(invalid_ns, 'foos')
|
|
546
|
+
@m.set_arg(invalid_ns, 'ball', 'awesome')
|
|
547
|
+
@m.set_arg(BARE_NS, 'xey', 'value')
|
|
548
|
+
assert_equal({'openid.mode' => 'error',
|
|
549
|
+
'openid.error' => 'unit test',
|
|
550
|
+
'openid.foos.ball' => 'awesome',
|
|
551
|
+
'xey' => 'value',
|
|
552
|
+
'openid.ns'=>OPENID1_NS,
|
|
553
|
+
'openid.ns.foos' => 'http://invalid/'
|
|
554
|
+
}, @m.to_post_args)
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
def test_to_args
|
|
558
|
+
assert_equal({'mode' => 'error',
|
|
559
|
+
'error' => 'unit test',
|
|
560
|
+
'ns'=>OPENID1_NS
|
|
561
|
+
},
|
|
562
|
+
@m.to_args)
|
|
563
|
+
end
|
|
564
|
+
|
|
565
|
+
def test_to_kvform
|
|
566
|
+
assert_equal("error:unit test\nmode:error\nns:#{OPENID1_NS}\n",
|
|
567
|
+
@m.to_kvform)
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
def test_to_url_encoded
|
|
571
|
+
assert_equal('openid.error=unit+test&openid.mode=error&openid.ns=http%3A%2F%2Fopenid.net%2Fsignon%2F1.0',
|
|
572
|
+
@m.to_url_encoded)
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
def test_to_url
|
|
576
|
+
base_url = 'http://base.url/'
|
|
577
|
+
actual = @m.to_url(base_url)
|
|
578
|
+
actual_base = actual[0...base_url.length]
|
|
579
|
+
assert_equal(base_url, actual_base)
|
|
580
|
+
assert_equal('?', actual[base_url.length].chr)
|
|
581
|
+
query = actual[base_url.length+1..-1]
|
|
582
|
+
assert_equal({'openid.mode'=>['error'],
|
|
583
|
+
'openid.error'=>['unit test'],
|
|
584
|
+
'openid.ns'=>[OPENID1_NS],
|
|
585
|
+
},
|
|
586
|
+
CGI.parse(query))
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
class OpenID2MessageTest < Test::Unit::TestCase
|
|
593
|
+
include TestUtil
|
|
594
|
+
|
|
595
|
+
def setup
|
|
596
|
+
@m = Message.from_post_args({'openid.mode'=>'error',
|
|
597
|
+
'openid.error'=>'unit test',
|
|
598
|
+
'openid.ns'=>OPENID2_NS})
|
|
599
|
+
@m.set_arg(BARE_NS, 'xey', 'value')
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
def test_to_args_fails
|
|
603
|
+
assert_raises(ArgumentError) {
|
|
604
|
+
@m.to_args
|
|
605
|
+
}
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
def test_fix_ns_non_string
|
|
609
|
+
# Using has_key to invoke _fix_ns since _fix_ns should be private
|
|
610
|
+
assert_raises(ArgumentError) {
|
|
611
|
+
@m.has_key?(:non_string_namespace, "key")
|
|
612
|
+
}
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
def test_fix_ns_non_uri
|
|
616
|
+
# Using has_key to invoke _fix_ns since _fix_ns should be private
|
|
617
|
+
assert_log_matches(/identifiers SHOULD be URIs/) {
|
|
618
|
+
@m.has_key?("foo", "key")
|
|
619
|
+
}
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
def test_fix_ns_sreg_literal
|
|
623
|
+
# Using has_key to invoke _fix_ns since _fix_ns should be private
|
|
624
|
+
assert_log_matches(/identifiers SHOULD be URIs/, /instead of "sreg"/) {
|
|
625
|
+
@m.has_key?("sreg", "key")
|
|
626
|
+
}
|
|
627
|
+
end
|
|
628
|
+
|
|
629
|
+
def test_copy
|
|
630
|
+
n = @m.copy
|
|
631
|
+
assert_equal(@m, n)
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
def test_to_post_args
|
|
635
|
+
assert_equal({'openid.mode' => 'error',
|
|
636
|
+
'openid.error' => 'unit test',
|
|
637
|
+
'openid.ns' => OPENID2_NS,
|
|
638
|
+
'xey' => 'value',
|
|
639
|
+
}, @m.to_post_args)
|
|
640
|
+
end
|
|
641
|
+
|
|
642
|
+
def test_to_post_args_ns
|
|
643
|
+
invalid_ns = 'http://invalid/'
|
|
644
|
+
@m.namespaces.add_alias(invalid_ns, 'foos')
|
|
645
|
+
@m.set_arg(invalid_ns, 'ball', 'awesome')
|
|
646
|
+
assert_equal({'openid.mode' => 'error',
|
|
647
|
+
'openid.error' => 'unit test',
|
|
648
|
+
'openid.ns' => OPENID2_NS,
|
|
649
|
+
'openid.ns.foos' => invalid_ns,
|
|
650
|
+
'openid.foos.ball' => 'awesome',
|
|
651
|
+
'xey' => 'value',
|
|
652
|
+
}, @m.to_post_args)
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
def test_to_args
|
|
656
|
+
@m.del_arg(BARE_NS, 'xey')
|
|
657
|
+
assert_equal({'mode' => 'error',
|
|
658
|
+
'error' => 'unit test',
|
|
659
|
+
'ns' => OPENID2_NS},
|
|
660
|
+
@m.to_args)
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
def test_to_kvform
|
|
664
|
+
@m.del_arg(BARE_NS, 'xey')
|
|
665
|
+
assert_equal("error:unit test\nmode:error\nns:#{OPENID2_NS}\n",
|
|
666
|
+
@m.to_kvform)
|
|
667
|
+
end
|
|
668
|
+
|
|
669
|
+
def _test_urlencoded(s)
|
|
670
|
+
expected_list = ["openid.error=unit+test",
|
|
671
|
+
"openid.mode=error",
|
|
672
|
+
"openid.ns=#{CGI.escape(OPENID2_NS)}",
|
|
673
|
+
"xey=value"]
|
|
674
|
+
# Hard to do this with string comparison since the mapping doesn't
|
|
675
|
+
# preserve order.
|
|
676
|
+
encoded_list = s.split('&')
|
|
677
|
+
encoded_list.sort!
|
|
678
|
+
assert_equal(expected_list, encoded_list)
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
def test_to_urlencoded
|
|
682
|
+
_test_urlencoded(@m.to_url_encoded)
|
|
683
|
+
end
|
|
684
|
+
|
|
685
|
+
def test_to_url
|
|
686
|
+
base_url = 'http://base.url/'
|
|
687
|
+
actual = @m.to_url(base_url)
|
|
688
|
+
actual_base = actual[0...base_url.length]
|
|
689
|
+
assert_equal(base_url, actual_base)
|
|
690
|
+
assert_equal('?', actual[base_url.length].chr)
|
|
691
|
+
query = actual[base_url.length+1..-1]
|
|
692
|
+
_test_urlencoded(query)
|
|
693
|
+
end
|
|
694
|
+
|
|
695
|
+
def test_get_openid
|
|
696
|
+
assert_equal(OPENID2_NS, @m.get_openid_namespace)
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
def test_get_key_openid
|
|
700
|
+
assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode'))
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
def test_get_key_bare
|
|
704
|
+
assert_equal('mode', @m.get_key(BARE_NS, 'mode'))
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
def test_get_key_ns1
|
|
708
|
+
assert_equal(nil, @m.get_key(OPENID1_NS, 'mode'))
|
|
709
|
+
end
|
|
710
|
+
|
|
711
|
+
def test_get_key_ns2
|
|
712
|
+
assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode'))
|
|
713
|
+
end
|
|
714
|
+
|
|
715
|
+
def test_get_key_ns3
|
|
716
|
+
assert_equal(nil, @m.get_key('urn:xxx', 'mode'))
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
def test_has_key_openid
|
|
720
|
+
assert_equal(true, @m.has_key?(OPENID_NS,'mode'))
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
def test_has_key_bare
|
|
724
|
+
assert_equal(false, @m.has_key?(BARE_NS,'mode'))
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
def test_has_key_ns1
|
|
728
|
+
assert_equal(false, @m.has_key?(OPENID1_NS,'mode'))
|
|
729
|
+
end
|
|
730
|
+
|
|
731
|
+
def test_has_key_ns2
|
|
732
|
+
assert_equal(true, @m.has_key?(OPENID2_NS,'mode'))
|
|
733
|
+
end
|
|
734
|
+
|
|
735
|
+
def test_has_key_ns3
|
|
736
|
+
assert_equal(false, @m.has_key?('urn:xxx','mode'))
|
|
737
|
+
end
|
|
738
|
+
|
|
739
|
+
# XXX - getArgTest
|
|
740
|
+
def test_get_arg_openid
|
|
741
|
+
assert_equal('error', @m.get_arg(OPENID_NS,'mode'))
|
|
742
|
+
end
|
|
743
|
+
|
|
744
|
+
def test_get_arg_bare
|
|
745
|
+
assert_equal(nil, @m.get_arg(BARE_NS,'mode'))
|
|
746
|
+
end
|
|
747
|
+
|
|
748
|
+
def test_get_arg_ns1
|
|
749
|
+
assert_equal(nil, @m.get_arg(OPENID1_NS,'mode'))
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
def test_get_arg_ns2
|
|
753
|
+
assert_equal('error', @m.get_arg(OPENID2_NS,'mode'))
|
|
754
|
+
end
|
|
755
|
+
|
|
756
|
+
def test_get_arg_ns3
|
|
757
|
+
assert_equal(nil, @m.get_arg('urn:bananastand','mode'))
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
def test_get_args_openid
|
|
761
|
+
assert_equal({'mode'=>'error','error'=>'unit test'},
|
|
762
|
+
@m.get_args(OPENID_NS))
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
def test_get_args_bare
|
|
766
|
+
assert_equal({'xey'=>'value'},
|
|
767
|
+
@m.get_args(BARE_NS))
|
|
768
|
+
end
|
|
769
|
+
|
|
770
|
+
def test_get_args_ns1
|
|
771
|
+
assert_equal({},
|
|
772
|
+
@m.get_args(OPENID1_NS))
|
|
773
|
+
end
|
|
774
|
+
|
|
775
|
+
def test_get_args_ns2
|
|
776
|
+
assert_equal({'mode'=>'error','error'=>'unit test'},
|
|
777
|
+
@m.get_args(OPENID2_NS))
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
def test_get_args_ns3
|
|
781
|
+
assert_equal({},
|
|
782
|
+
@m.get_args('urn:loose seal'))
|
|
783
|
+
end
|
|
784
|
+
|
|
785
|
+
def _test_update_args_ns(ns, before=nil)
|
|
786
|
+
before = {} unless before
|
|
787
|
+
update_args = {'aa'=>'bb','cc'=>'dd'}
|
|
788
|
+
|
|
789
|
+
assert_equal(before, @m.get_args(ns))
|
|
790
|
+
@m.update_args(ns, update_args)
|
|
791
|
+
after = before.dup
|
|
792
|
+
after.update(update_args)
|
|
793
|
+
assert_equal(after, @m.get_args(ns))
|
|
794
|
+
end
|
|
795
|
+
|
|
796
|
+
def test_update_args_openid
|
|
797
|
+
_test_update_args_ns(OPENID_NS, {'mode'=>'error','error'=>'unit test'})
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
def test_update_args_bare
|
|
801
|
+
_test_update_args_ns(BARE_NS, {'xey'=>'value'})
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
def test_update_args_ns1
|
|
805
|
+
_test_update_args_ns(OPENID1_NS)
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
def test_update_args_ns2
|
|
809
|
+
_test_update_args_ns(OPENID2_NS, {'mode'=>'error','error'=>'unit test'})
|
|
810
|
+
end
|
|
811
|
+
|
|
812
|
+
def test_update_args_ns3
|
|
813
|
+
_test_update_args_ns('urn:sven')
|
|
814
|
+
end
|
|
815
|
+
|
|
816
|
+
def _test_set_arg_ns(ns)
|
|
817
|
+
key = "logan's"
|
|
818
|
+
value = "run"
|
|
819
|
+
assert_equal(nil, @m.get_arg(ns,key))
|
|
820
|
+
@m.set_arg(ns, key, value)
|
|
821
|
+
assert_equal(value, @m.get_arg(ns,key))
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
def test_set_arg_openid; _test_set_arg_ns(OPENID_NS); end
|
|
825
|
+
def test_set_arg_bare; _test_set_arg_ns(BARE_NS); end
|
|
826
|
+
def test_set_arg_ns1; _test_set_arg_ns(OPENID1_NS); end
|
|
827
|
+
def test_set_arg_ns2; _test_set_arg_ns(OPENID2_NS); end
|
|
828
|
+
def test_set_arg_ns3; _test_set_arg_ns('urn:g'); end
|
|
829
|
+
|
|
830
|
+
def test_bad_alias
|
|
831
|
+
# Make sure dotted aliases and OpenID protocol fields are not allowed
|
|
832
|
+
# as namespace aliases.
|
|
833
|
+
|
|
834
|
+
fields = OPENID_PROTOCOL_FIELDS + ['dotted.alias']
|
|
835
|
+
|
|
836
|
+
fields.each { |f|
|
|
837
|
+
args = {"openid.ns.#{f}" => "blah#{f}",
|
|
838
|
+
"openid.#{f}.foo" => "test#{f}"}
|
|
839
|
+
|
|
840
|
+
# .fromPostArgs covers .fromPostArgs, .fromOpenIDArgs,
|
|
841
|
+
# ._fromOpenIDArgs, and .fromOpenIDArgs (since it calls
|
|
842
|
+
# .fromPostArgs).
|
|
843
|
+
assert_raise(AssertionError) {
|
|
844
|
+
Message.from_post_args(args)
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
def test_from_post_args
|
|
850
|
+
msg = Message.from_post_args({'foos' => 'ball'})
|
|
851
|
+
assert_equal('ball', msg.get_arg(BARE_NS, 'foos'))
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
def _test_del_arg_ns(ns)
|
|
855
|
+
key = 'no'
|
|
856
|
+
value = 'socks'
|
|
857
|
+
assert_equal(nil, @m.get_arg(ns, key))
|
|
858
|
+
@m.set_arg(ns, key, value)
|
|
859
|
+
assert_equal(value, @m.get_arg(ns, key))
|
|
860
|
+
@m.del_arg(ns, key)
|
|
861
|
+
assert_equal(nil, @m.get_arg(ns, key))
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
def test_del_arg_openid; _test_del_arg_ns(OPENID_NS); end
|
|
865
|
+
def test_del_arg_bare; _test_del_arg_ns(BARE_NS); end
|
|
866
|
+
def test_del_arg_ns1; _test_del_arg_ns(OPENID1_NS); end
|
|
867
|
+
def test_del_arg_ns2; _test_del_arg_ns(OPENID2_NS); end
|
|
868
|
+
def test_del_arg_ns3; _test_del_arg_ns('urn:tofu'); end
|
|
869
|
+
|
|
870
|
+
def test_overwrite_extension_arg
|
|
871
|
+
ns = 'urn:unittest_extension'
|
|
872
|
+
key = 'mykey'
|
|
873
|
+
value_1 = 'value_1'
|
|
874
|
+
value_2 = 'value_2'
|
|
875
|
+
|
|
876
|
+
@m.set_arg(ns, key, value_1)
|
|
877
|
+
assert_equal(value_1, @m.get_arg(ns, key))
|
|
878
|
+
@m.set_arg(ns, key, value_2)
|
|
879
|
+
assert_equal(value_2, @m.get_arg(ns, key))
|
|
880
|
+
end
|
|
881
|
+
|
|
882
|
+
def test_argList
|
|
883
|
+
assert_raise(ArgumentError) {
|
|
884
|
+
Message.from_post_args({'arg' => [1, 2, 3]})
|
|
885
|
+
}
|
|
886
|
+
end
|
|
887
|
+
|
|
888
|
+
def test_isOpenID1
|
|
889
|
+
assert_equal(false, @m.is_openid1)
|
|
890
|
+
end
|
|
891
|
+
|
|
892
|
+
def test_isOpenID2
|
|
893
|
+
assert_equal(true, @m.is_openid2)
|
|
894
|
+
end
|
|
895
|
+
end
|
|
896
|
+
|
|
897
|
+
class MessageTest < Test::Unit::TestCase
|
|
898
|
+
def setup
|
|
899
|
+
@postargs = {
|
|
900
|
+
'openid.ns' => OPENID2_NS,
|
|
901
|
+
'openid.mode' => 'checkid_setup',
|
|
902
|
+
'openid.identity' => 'http://bogus.example.invalid:port/',
|
|
903
|
+
'openid.assoc_handle' => 'FLUB',
|
|
904
|
+
'openid.return_to' => 'Neverland',
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
@action_url = 'scheme://host:port/path?query'
|
|
908
|
+
|
|
909
|
+
@form_tag_attrs = {
|
|
910
|
+
'company' => 'janrain',
|
|
911
|
+
'class' => 'fancyCSS',
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
@submit_text = 'GO!'
|
|
915
|
+
|
|
916
|
+
### Expected data regardless of input
|
|
917
|
+
|
|
918
|
+
@required_form_attrs = {
|
|
919
|
+
'accept-charset' => 'UTF-8',
|
|
920
|
+
'enctype' => 'application/x-www-form-urlencoded',
|
|
921
|
+
'method' => 'post',
|
|
922
|
+
}
|
|
923
|
+
end
|
|
924
|
+
|
|
925
|
+
def _checkForm(html, message_, action_url,
|
|
926
|
+
form_tag_attrs, submit_text)
|
|
927
|
+
@xml = REXML::Document.new(html)
|
|
928
|
+
|
|
929
|
+
# Get root element
|
|
930
|
+
form = @xml.root
|
|
931
|
+
|
|
932
|
+
# Check required form attributes
|
|
933
|
+
@required_form_attrs.each { |k, v|
|
|
934
|
+
assert(form.attributes[k] == v,
|
|
935
|
+
"Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'")
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
# Check extra form attributes
|
|
939
|
+
@form_tag_attrs.each { |k, v|
|
|
940
|
+
# Skip attributes that already passed the required attribute
|
|
941
|
+
# check, since they should be ignored by the form generation
|
|
942
|
+
# code.
|
|
943
|
+
if @required_form_attrs.include?(k)
|
|
944
|
+
continue
|
|
945
|
+
end
|
|
946
|
+
|
|
947
|
+
assert(form.attributes[k] == v,
|
|
948
|
+
"Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'")
|
|
949
|
+
|
|
950
|
+
# Check hidden fields against post args
|
|
951
|
+
hiddens = []
|
|
952
|
+
form.each { |e|
|
|
953
|
+
if (e.is_a?(REXML::Element)) and
|
|
954
|
+
(e.name.upcase() == 'INPUT') and
|
|
955
|
+
(e.attributes['type'].upcase() == 'HIDDEN')
|
|
956
|
+
# For each post arg, make sure there is a hidden with that
|
|
957
|
+
# value. Make sure there are no other hiddens.
|
|
958
|
+
hiddens += [e]
|
|
959
|
+
end
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
message_.to_post_args().each { |name, value|
|
|
963
|
+
success = false
|
|
964
|
+
|
|
965
|
+
hiddens.each { |e|
|
|
966
|
+
if e.attributes['name'] == name
|
|
967
|
+
assert(e.attributes['value'] == value,
|
|
968
|
+
"Expected value of hidden input '#{e.attributes['name']}' " +
|
|
969
|
+
"to be '#{value}', got '#{e.attributes['value']}'")
|
|
970
|
+
success = true
|
|
971
|
+
break
|
|
972
|
+
end
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
if !success
|
|
976
|
+
flunk "Post arg '#{name}' not found in form"
|
|
977
|
+
end
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
hiddens.each { |e|
|
|
981
|
+
assert(message_.to_post_args().keys().include?(e.attributes['name']),
|
|
982
|
+
"Form element for '#{e.attributes['name']}' not in " +
|
|
983
|
+
"original message")
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
# Check action URL
|
|
987
|
+
assert(form.attributes['action'] == action_url,
|
|
988
|
+
"Expected form 'action' to be '#{action_url}', got '#{form.attributes['action']}'")
|
|
989
|
+
|
|
990
|
+
# Check submit text
|
|
991
|
+
submits = []
|
|
992
|
+
form.each { |e|
|
|
993
|
+
if (e.is_a?(REXML::Element)) and
|
|
994
|
+
(e.name.upcase() == 'INPUT') and
|
|
995
|
+
e.attributes['type'].upcase() == 'SUBMIT'
|
|
996
|
+
submits += [e]
|
|
997
|
+
end
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
assert(submits.length == 1,
|
|
1001
|
+
"Expected only one 'input' with type = 'submit', got #{submits.length}")
|
|
1002
|
+
|
|
1003
|
+
assert(submits[0].attributes['value'] == submit_text,
|
|
1004
|
+
"Expected submit value to be '#{submit_text}', " +
|
|
1005
|
+
"got '#{submits[0].attributes['value']}'")
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
end
|
|
1009
|
+
|
|
1010
|
+
def test_toFormMarkup
|
|
1011
|
+
m = Message.from_post_args(@postargs)
|
|
1012
|
+
html = m.to_form_markup(@action_url, @form_tag_attrs,
|
|
1013
|
+
@submit_text)
|
|
1014
|
+
_checkForm(html, m, @action_url,
|
|
1015
|
+
@form_tag_attrs, @submit_text)
|
|
1016
|
+
end
|
|
1017
|
+
|
|
1018
|
+
def test_overrideMethod
|
|
1019
|
+
# Be sure that caller cannot change form method to GET.
|
|
1020
|
+
m = Message.from_post_args(@postargs)
|
|
1021
|
+
|
|
1022
|
+
tag_attrs = @form_tag_attrs.clone
|
|
1023
|
+
tag_attrs['method'] = 'GET'
|
|
1024
|
+
|
|
1025
|
+
html = m.to_form_markup(@action_url, @form_tag_attrs,
|
|
1026
|
+
@submit_text)
|
|
1027
|
+
_checkForm(html, m, @action_url,
|
|
1028
|
+
@form_tag_attrs, @submit_text)
|
|
1029
|
+
end
|
|
1030
|
+
|
|
1031
|
+
def test_overrideRequired
|
|
1032
|
+
# Be sure that caller CANNOT change the form charset for
|
|
1033
|
+
# encoding type.
|
|
1034
|
+
m = Message.from_post_args(@postargs)
|
|
1035
|
+
|
|
1036
|
+
tag_attrs = @form_tag_attrs.clone
|
|
1037
|
+
tag_attrs['accept-charset'] = 'UCS4'
|
|
1038
|
+
tag_attrs['enctype'] = 'invalid/x-broken'
|
|
1039
|
+
|
|
1040
|
+
html = m.to_form_markup(@action_url, tag_attrs,
|
|
1041
|
+
@submit_text)
|
|
1042
|
+
_checkForm(html, m, @action_url,
|
|
1043
|
+
tag_attrs, @submit_text)
|
|
1044
|
+
end
|
|
1045
|
+
end
|
|
1046
|
+
|
|
1047
|
+
class NamespaceMapTestCase < Test::Unit::TestCase
|
|
1048
|
+
|
|
1049
|
+
def test_onealias
|
|
1050
|
+
nsm = NamespaceMap.new
|
|
1051
|
+
uri = 'http://example.com/foo'
|
|
1052
|
+
_alias = 'foo'
|
|
1053
|
+
nsm.add_alias(uri, _alias)
|
|
1054
|
+
assert_equal(uri, nsm.get_namespace_uri(_alias))
|
|
1055
|
+
assert_equal(_alias, nsm.get_alias(uri))
|
|
1056
|
+
end
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
def test_iteration
|
|
1060
|
+
nsm = NamespaceMap.new
|
|
1061
|
+
uripat = "http://example.com/foo%i"
|
|
1062
|
+
nsm.add(uripat % 0)
|
|
1063
|
+
|
|
1064
|
+
(1..23).each { |i|
|
|
1065
|
+
assert_equal(false, nsm.member?(uripat % i))
|
|
1066
|
+
nsm.add(uripat % i)
|
|
1067
|
+
}
|
|
1068
|
+
nsm.each { |uri, _alias|
|
|
1069
|
+
assert_equal(uri[22..-1], _alias[3..-1])
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
nsm = NamespaceMap.new
|
|
1073
|
+
alias_ = 'bogus'
|
|
1074
|
+
uri = 'urn:bogus'
|
|
1075
|
+
|
|
1076
|
+
nsm.add_alias(uri, alias_)
|
|
1077
|
+
|
|
1078
|
+
assert_equal(nsm.aliases(), [alias_])
|
|
1079
|
+
assert_equal(nsm.namespace_uris(), [uri])
|
|
1080
|
+
end
|
|
1081
|
+
|
|
1082
|
+
def test_register_default_alias
|
|
1083
|
+
invalid_ns = 'http://invalid/'
|
|
1084
|
+
alias_ = 'invalid'
|
|
1085
|
+
Message.register_namespace_alias(invalid_ns, alias_)
|
|
1086
|
+
# Doing it again doesn't raise an exception
|
|
1087
|
+
Message.register_namespace_alias(invalid_ns, alias_)
|
|
1088
|
+
|
|
1089
|
+
# Once it's registered, you can't register it again
|
|
1090
|
+
assert_raises(NamespaceAliasRegistrationError) {
|
|
1091
|
+
Message.register_namespace_alias(invalid_ns, 'another_alias')
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
# Once it's registered, you can't register another URL with that alias
|
|
1095
|
+
assert_raises(NamespaceAliasRegistrationError) {
|
|
1096
|
+
Message.register_namespace_alias('http://janrain.com/', alias_)
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
# It gets used automatically by the Message class:
|
|
1100
|
+
msg = Message.from_openid_args({'invalid.stuff' => 'things'})
|
|
1101
|
+
assert(msg.is_openid1)
|
|
1102
|
+
assert_equal(alias_, msg.namespaces.get_alias(invalid_ns))
|
|
1103
|
+
assert_equal(invalid_ns, msg.namespaces.get_namespace_uri(alias_))
|
|
1104
|
+
end
|
|
1105
|
+
|
|
1106
|
+
def test_alias_defined_twice
|
|
1107
|
+
nsm = NamespaceMap.new
|
|
1108
|
+
uri = 'urn:bogus'
|
|
1109
|
+
|
|
1110
|
+
nsm.add_alias(uri, 'foos')
|
|
1111
|
+
assert_raises(IndexError) {
|
|
1112
|
+
nsm.add_alias(uri, 'ball')
|
|
1113
|
+
}
|
|
1114
|
+
end
|
|
1115
|
+
end
|
|
1116
|
+
end
|