barx 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'ruby-prof'
3
+ require File.dirname(__FILE__) + '/../dist/lib/xri_parser'
4
+ include XriParser
5
+
6
+ RubyProf.start
7
+ 1000.times do
8
+ parsed = AuthorityParser.parse('@example*foo')
9
+ end
10
+ result = RubyProf.stop
11
+
12
+ # Print a flat profile to text
13
+ printer = RubyProf::FlatPrinter.new(result)
14
+ printer.print(STDOUT, 0)
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'barx'
4
+
5
+ TEST_ROOT = File.dirname(__FILE__) + '/../test'
6
+
7
+ Retn = Struct.new(:header, :content)
data/test/unit/all.rb ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/local/bin/ruby
2
+ UNIT_TEST_ROOT = File.dirname(__FILE__)
3
+
4
+ require "#{UNIT_TEST_ROOT}/authority_parser_test.rb"
5
+ require "#{UNIT_TEST_ROOT}/input_param_parser_test.rb"
6
+ require "#{UNIT_TEST_ROOT}/multi_stage_resolution_test.rb"
7
+ require "#{UNIT_TEST_ROOT}/sep_selection_test.rb"
@@ -0,0 +1,300 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ class AuthorityParserTest < Test::Unit::TestCase
3
+ include XriParser
4
+
5
+ def test_parse1
6
+ parsed = AuthorityParser.parse('@example')
7
+ assert_equal '@', parsed.root
8
+ assert_equal 1, parsed.subsegments.length
9
+ assert_equal '*example', parsed.subsegments[0]
10
+ assert_equal '@*example', parsed.fully_qualified
11
+ assert parsed.path.empty?
12
+ assert_equal '@', parsed.community
13
+ assert_equal 'example', parsed.local_iname
14
+ assert !parsed.is_inumber?
15
+ end
16
+ def test_parse2
17
+ parsed = AuthorityParser.parse('@example*foo')
18
+ assert_equal '@', parsed.root
19
+ assert_equal 2, parsed.subsegments.length
20
+ assert_equal '*example', parsed.subsegments[0]
21
+ assert_equal '*foo', parsed.subsegments[1]
22
+ assert_equal '@*example*foo', parsed.fully_qualified
23
+ assert parsed.path.empty?
24
+ assert_equal '@example', parsed.community
25
+ assert_equal 'foo', parsed.local_iname
26
+ assert !parsed.is_inumber?
27
+ end
28
+ def test_parse3
29
+ parsed = AuthorityParser.parse('=example')
30
+ assert_equal '=', parsed.root
31
+ assert_equal 1, parsed.subsegments.length
32
+ assert_equal '*example', parsed.subsegments[0]
33
+ assert_equal '=*example', parsed.fully_qualified
34
+ assert parsed.path.empty?
35
+ assert_equal '=', parsed.community
36
+ assert_equal 'example', parsed.local_iname
37
+ assert !parsed.is_inumber?
38
+ end
39
+ def test_parse4
40
+ parsed = AuthorityParser.parse('=example*foo')
41
+ assert_equal '=', parsed.root
42
+ assert_equal 2, parsed.subsegments.length
43
+ assert_equal '*example', parsed.subsegments[0]
44
+ assert_equal '*foo', parsed.subsegments[1]
45
+ assert_equal '=*example*foo', parsed.fully_qualified
46
+ assert parsed.path.empty?
47
+ assert_equal '=example', parsed.community
48
+ assert_equal 'foo', parsed.local_iname
49
+ assert !parsed.is_inumber?
50
+ end
51
+ def test_parse5
52
+ parsed = AuthorityParser.parse('!!1001')
53
+ assert_equal '!', parsed.root
54
+ assert_equal 1, parsed.subsegments.length
55
+ assert_equal '!1001', parsed.subsegments[0]
56
+ assert_equal '!!1001', parsed.fully_qualified
57
+ assert parsed.path.empty?
58
+ assert_equal '!', parsed.community
59
+ assert_nil parsed.local_iname
60
+ assert_equal '!1001', parsed.local_inumber
61
+ assert parsed.is_inumber?
62
+ end
63
+ def test_parse6
64
+ parsed = AuthorityParser.parse('=!9C9D.73FC.7768.6268')
65
+ assert_equal '=', parsed.root
66
+ assert_equal 1, parsed.subsegments.length
67
+ assert_equal '!9C9D.73FC.7768.6268', parsed.subsegments[0]
68
+ assert_equal '=!9C9D.73FC.7768.6268', parsed.fully_qualified
69
+ assert parsed.path.empty?
70
+ assert_equal '=', parsed.community
71
+ assert_nil parsed.local_iname
72
+ assert_equal '!9C9D.73FC.7768.6268', parsed.local_inumber
73
+ assert parsed.is_inumber?
74
+ end
75
+ def test_parse7
76
+ parsed = AuthorityParser.parse('=!9C9D.73FC.7768.6268!1002')
77
+ assert_equal '=', parsed.root
78
+ assert_equal 2, parsed.subsegments.length
79
+ assert_equal '!9C9D.73FC.7768.6268', parsed.subsegments[0]
80
+ assert_equal '!1002', parsed.subsegments[1]
81
+ assert parsed.path.empty?
82
+ assert_equal '=!9C9D.73FC.7768.6268', parsed.community
83
+ assert_nil parsed.local_iname
84
+ assert_equal '!1002', parsed.local_inumber
85
+ assert parsed.is_inumber?
86
+ end
87
+ ## examples from http://wiki.oasis-open.org/xri/XriCd02/GlobalXrefs
88
+ ## compound global xrefs omitted because of Special Status note that document
89
+ def test_parse8
90
+ parsed = AuthorityParser.parse('@!!1000')
91
+ assert_equal '@', parsed.root
92
+ assert_equal 2, parsed.subsegments.length
93
+ assert_equal '!', parsed.subsegments[0]
94
+ assert_equal '!1000', parsed.subsegments[1]
95
+ assert_equal '@!!1000', parsed.fully_qualified
96
+ assert parsed.path.empty?
97
+ assert_equal '@!', parsed.community
98
+ assert_nil parsed.local_iname
99
+ assert_equal '!1000', parsed.local_inumber
100
+ assert parsed.is_inumber?
101
+ end
102
+ def test_parse9
103
+ parsed = AuthorityParser.parse('@example*foo=baz')
104
+ assert_equal '@', parsed.root
105
+ assert_equal 3, parsed.subsegments.length
106
+ assert_equal '*example', parsed.subsegments[0]
107
+ assert_equal '*foo', parsed.subsegments[1]
108
+ assert_equal '=baz', parsed.subsegments[2]
109
+ assert_equal '@*example*foo=baz', parsed.fully_qualified
110
+ assert parsed.path.empty?
111
+ assert_equal '@example*foo', parsed.community
112
+ assert_nil parsed.local_inumber
113
+ assert_equal '=baz', parsed.local_iname
114
+ assert !parsed.is_inumber?
115
+ end
116
+ def test_parse10
117
+ parsed = AuthorityParser.parse('@*foo=baz')
118
+ assert_equal '@', parsed.root
119
+ assert_equal 2, parsed.subsegments.length
120
+ assert_equal '*foo', parsed.subsegments[0]
121
+ assert_equal '=baz', parsed.subsegments[1]
122
+ assert_equal '@*foo=baz', parsed.fully_qualified
123
+ assert parsed.path.empty?
124
+ assert_equal '@foo', parsed.community
125
+ assert_nil parsed.local_inumber
126
+ assert_equal '=baz', parsed.local_iname
127
+ assert !parsed.is_inumber?
128
+ end
129
+ def test_parse11
130
+ parsed = AuthorityParser.parse('@!1234*foo')
131
+ assert_equal '@', parsed.root
132
+ assert_equal 2, parsed.subsegments.length
133
+ assert_equal '!1234', parsed.subsegments[0]
134
+ assert_equal '*foo', parsed.subsegments[1]
135
+ assert_equal '@!1234*foo', parsed.fully_qualified
136
+ assert parsed.path.empty?
137
+ assert_equal '@!1234', parsed.community
138
+ assert_nil parsed.local_inumber
139
+ assert_equal 'foo', parsed.local_iname
140
+ assert !parsed.is_inumber?
141
+ end
142
+ def test_parse12
143
+ parsed = AuthorityParser.parse('@=baz')
144
+ assert_equal '@', parsed.root
145
+ assert_equal 1, parsed.subsegments.length
146
+ assert_equal '=baz', parsed.subsegments[0]
147
+ assert_equal '@=baz', parsed.fully_qualified
148
+ assert parsed.path.empty?
149
+ assert_equal '@', parsed.community
150
+ assert_nil parsed.local_inumber
151
+ assert_equal '=baz', parsed.local_iname
152
+ assert !parsed.is_inumber?
153
+ end
154
+ def test_parse13
155
+ parsed = AuthorityParser.parse('@example*(=foo)')
156
+ assert_equal '@', parsed.root
157
+ assert_equal 2, parsed.subsegments.length
158
+ assert_equal '*example', parsed.subsegments[0]
159
+ assert_equal '*(=foo)', parsed.subsegments[1]
160
+ assert_equal '@*example*(=foo)', parsed.fully_qualified
161
+ assert parsed.path.empty?
162
+ assert_equal '@example', parsed.community
163
+ assert_nil parsed.local_inumber
164
+ assert_equal '(=foo)', parsed.local_iname
165
+ assert !parsed.is_inumber?
166
+ end
167
+ def test_parse14
168
+ parsed = AuthorityParser.parse('$ip*124.173.14.2*bar')
169
+ assert_equal '$ip*124.173.14.2', parsed.root
170
+ assert_equal 1, parsed.subsegments.length
171
+ assert_equal '*bar', parsed.subsegments[0]
172
+ assert_equal '$ip*124.173.14.2*bar', parsed.fully_qualified
173
+ assert parsed.path.empty?
174
+ assert_equal '$ip*124.173.14.2', parsed.community
175
+ assert_nil parsed.local_inumber
176
+ assert_equal 'bar', parsed.local_iname
177
+ assert !parsed.is_inumber?
178
+ end
179
+ def test_parse15
180
+ parsed = AuthorityParser.parse('$ip*124.173.14.2!1234')
181
+ assert_equal '$ip*124.173.14.2', parsed.root
182
+ assert_equal 1, parsed.subsegments.length
183
+ assert_equal '!1234', parsed.subsegments[0]
184
+ assert_equal '$ip*124.173.14.2!1234', parsed.fully_qualified
185
+ assert parsed.path.empty?
186
+ assert_equal '$ip*124.173.14.2', parsed.community
187
+ assert_nil parsed.local_iname
188
+ assert_equal '!1234', parsed.local_inumber
189
+ assert parsed.is_inumber?
190
+ end
191
+ def test_parse16
192
+ parsed = AuthorityParser.parse('$ip*124.173.14.2=example')
193
+ assert_equal '$ip*124.173.14.2', parsed.root
194
+ assert_equal 1, parsed.subsegments.length
195
+ assert_equal '=example', parsed.subsegments[0]
196
+ assert_equal '$ip*124.173.14.2=example', parsed.fully_qualified
197
+ assert parsed.path.empty?
198
+ assert_equal '$ip*124.173.14.2', parsed.community
199
+ assert_nil parsed.local_inumber
200
+ assert_equal '=example', parsed.local_iname
201
+ assert !parsed.is_inumber?
202
+ end
203
+ def test_parse17
204
+ parsed = AuthorityParser.parse('$dns*www.example.com*bar')
205
+ assert_equal '$dns*www.example.com', parsed.root
206
+ assert_equal 1, parsed.subsegments.length
207
+ assert_equal '*bar', parsed.subsegments[0]
208
+ assert_equal '$dns*www.example.com*bar', parsed.fully_qualified
209
+ assert parsed.path.empty?
210
+ assert_equal '$dns*www.example.com', parsed.community
211
+ assert_nil parsed.local_inumber
212
+ assert_equal 'bar', parsed.local_iname
213
+ assert !parsed.is_inumber?
214
+ end
215
+ def test_parse18
216
+ parsed = AuthorityParser.parse('$dns*www.example.com=example')
217
+ assert_equal '$dns*www.example.com', parsed.root
218
+ assert_equal 1, parsed.subsegments.length
219
+ assert_equal '=example', parsed.subsegments[0]
220
+ assert_equal '$dns*www.example.com=example', parsed.fully_qualified
221
+ assert parsed.path.empty?
222
+ assert_equal '$dns*www.example.com', parsed.community
223
+ assert_nil parsed.local_inumber
224
+ assert_equal '=example', parsed.local_iname
225
+ assert !parsed.is_inumber?
226
+ end
227
+ def test_parse19
228
+ parsed = AuthorityParser.parse('$dns*www.example.com!1234')
229
+ assert_equal '$dns*www.example.com', parsed.root
230
+ assert_equal 1, parsed.subsegments.length
231
+ assert_equal '!1234', parsed.subsegments[0]
232
+ assert_equal '$dns*www.example.com!1234', parsed.fully_qualified
233
+ assert parsed.path.empty?
234
+ assert_equal '$dns*www.example.com', parsed.community
235
+ assert_nil parsed.local_iname
236
+ assert_equal '!1234', parsed.local_inumber
237
+ assert parsed.is_inumber?
238
+ end
239
+ def test_parse20
240
+ parsed = AuthorityParser.parse('$(http://example.com/user/)*foo')
241
+ assert_equal '$(http://example.com/user/)', parsed.root
242
+ assert_equal 1, parsed.subsegments.length
243
+ assert_equal '*foo', parsed.subsegments[0]
244
+ assert_equal '$(http://example.com/user/)*foo', parsed.fully_qualified
245
+ assert parsed.path.empty?
246
+ assert_equal '$(http://example.com/user/)', parsed.community
247
+ assert_nil parsed.local_inumber
248
+ assert_equal 'foo', parsed.local_iname
249
+ assert !parsed.is_inumber?
250
+ end
251
+ def test_parse21
252
+ parsed = AuthorityParser.parse('$(http://example.com/user/)=example')
253
+ assert_equal '$(http://example.com/user/)', parsed.root
254
+ assert_equal 1, parsed.subsegments.length
255
+ assert_equal '=example', parsed.subsegments[0]
256
+ assert_equal '$(http://example.com/user/)=example', parsed.fully_qualified
257
+ assert parsed.path.empty?
258
+ assert_equal '$(http://example.com/user/)', parsed.community
259
+ assert_nil parsed.local_inumber
260
+ assert_equal '=example', parsed.local_iname
261
+ assert !parsed.is_inumber?
262
+ end
263
+ def test_parse22
264
+ parsed = AuthorityParser.parse('$(http://example.com/user/)!1234')
265
+ assert_equal '$(http://example.com/user/)', parsed.root
266
+ assert_equal 1, parsed.subsegments.length
267
+ assert_equal '!1234', parsed.subsegments[0]
268
+ assert_equal '$(http://example.com/user/)!1234', parsed.fully_qualified
269
+ assert parsed.path.empty?
270
+ assert_equal '$(http://example.com/user/)', parsed.community
271
+ assert_nil parsed.local_iname
272
+ assert_equal '!1234', parsed.local_inumber
273
+ assert parsed.is_inumber?
274
+ end
275
+ ## UUID identified community
276
+ def test_parse23
277
+ parsed = AuthorityParser.parse('$(6c0699fa-34a7-11dc-8314-0800200c9a66)*foo')
278
+ assert_equal '$(6c0699fa-34a7-11dc-8314-0800200c9a66)', parsed.root
279
+ assert_equal 1, parsed.subsegments.length
280
+ assert_equal '*foo', parsed.subsegments[0]
281
+ assert_equal '$(6c0699fa-34a7-11dc-8314-0800200c9a66)*foo', parsed.fully_qualified
282
+ assert parsed.path.empty?
283
+ assert_equal '$(6c0699fa-34a7-11dc-8314-0800200c9a66)', parsed.community
284
+ assert_nil parsed.local_inumber
285
+ assert_equal 'foo', parsed.local_iname
286
+ assert !parsed.is_inumber?
287
+ end
288
+
289
+ def test_local_path_query_methods
290
+ parsed = AuthorityParser.parse('=example*foo/yellow/brick/road*v2?foo=bar')
291
+ assert_equal '=', parsed.root
292
+ assert_equal 2, parsed.subsegments.length
293
+ assert_equal '*example', parsed.subsegments[0]
294
+ assert_equal '*foo', parsed.subsegments[1]
295
+ assert_equal '=example*foo', parsed.authority
296
+ assert_equal '/yellow/brick/road*v2?foo=bar', parsed.local
297
+ assert_equal '/yellow/brick/road*v2', parsed.path
298
+ assert_equal 'foo=bar', parsed.query
299
+ end
300
+ end
@@ -0,0 +1,93 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ class InputParamParserTest < Test::Unit::TestCase
3
+ include XriResolver
4
+
5
+ def test_default
6
+ resparams = ParseInputParameters.new()
7
+ assert_equal "", resparams.resolution_media_type
8
+ assert !resparams.service_media_type
9
+ assert !resparams.service_type
10
+ assert resparams.sep
11
+ assert resparams.cid
12
+ assert !resparams.nodefault_p
13
+ assert !resparams.nodefault_t
14
+ assert !resparams.nodefault_m
15
+ assert !resparams.https
16
+ assert !resparams.saml
17
+ end
18
+
19
+ def test_saml_param
20
+ params = {:_xrd_r => 'application/xrds+xml;saml=true'}
21
+ resparams = ParseInputParameters.new(params)
22
+ assert_equal "application/xrds+xml", resparams.resolution_media_type
23
+ assert resparams.saml
24
+ end
25
+
26
+ def test_all_query_params_set
27
+ params = {:_xrd_r => 'application/xrd+xml;saml=true;https=true;cid=1;refs=0;nodefault_p=1;nodefault_t=1;nodefault_m=1;sep=1',
28
+ :_xrd_t => 'xri://+i-service*(+forwarding)*($v*1.0)',
29
+ :_xrd_m => 'video/mpeg'}
30
+ resparams = ParseInputParameters.new(params)
31
+ assert_equal "application/xrd+xml", resparams.resolution_media_type
32
+ assert_equal "xri://+i-service*(+forwarding)*($v*1.0)", resparams.service_type
33
+ assert_equal "video/mpeg", resparams.service_media_type
34
+ assert resparams.sep
35
+ assert resparams.cid
36
+ assert resparams.nodefault_p
37
+ assert resparams.nodefault_t
38
+ assert resparams.nodefault_m
39
+ assert resparams.https
40
+ assert resparams.saml
41
+ end
42
+
43
+ def test_header_params
44
+ params = {}
45
+ req = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*, application/xrds+xml'
46
+ resparams = ParseInputParameters.new(params, req)
47
+ assert_equal "application/xrds+xml", resparams.resolution_media_type
48
+ assert !resparams.service_media_type
49
+ assert !resparams.service_type
50
+ assert !resparams.sep
51
+ assert resparams.cid
52
+ assert !resparams.nodefault_p
53
+ assert !resparams.nodefault_t
54
+ assert !resparams.nodefault_m
55
+ assert !resparams.https
56
+ assert !resparams.saml
57
+ end
58
+
59
+ def test_all_header_params_set
60
+ params = {}
61
+ req = 'application/xrd+xml;saml=1;https=1;cid=true;refs=false;sep=1;nodefault_p=1;nodefault_t=1;nodefault_m=1'
62
+ resparams = ParseInputParameters.new(params, req)
63
+ assert_equal "application/xrd+xml", resparams.resolution_media_type
64
+ assert !resparams.service_media_type
65
+ assert !resparams.service_type
66
+ assert resparams.sep
67
+ assert resparams.cid
68
+ assert resparams.nodefault_p
69
+ assert resparams.nodefault_t
70
+ assert resparams.nodefault_m
71
+ assert resparams.https
72
+ assert resparams.saml
73
+ end
74
+
75
+ def test_combo
76
+ params = {:_xrd_t => 'xri://+i-service*(+forwarding)*($v*1.0)',
77
+ :_xrd_m => 'video/mpeg'}
78
+ req = 'text/uri-list'
79
+ resparams = ParseInputParameters.new(params, req)
80
+ assert_equal "text/uri-list", resparams.resolution_media_type
81
+ assert_equal "xri://+i-service*(+forwarding)*($v*1.0)", resparams.service_type
82
+ assert_equal "video/mpeg", resparams.service_media_type
83
+ end
84
+
85
+ def test_params_override_accept_header
86
+ params = {:_xrd_r => 'application/xrd+xml;cid=true'}
87
+ req = 'application/xrds+xml;cid=false'
88
+ resparams = ParseInputParameters.new(params, req)
89
+ assert_equal "application/xrd+xml", resparams.resolution_media_type
90
+ assert resparams.cid
91
+ end
92
+
93
+ end
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ class MultiStageResolutionTest < Test::Unit::TestCase
3
+
4
+ class XriResolver::AuthorityResolver::HTTPClient
5
+
6
+ def self.authr=(authority_servers = {})
7
+ @@authority_servers = authority_servers
8
+ end
9
+
10
+ def get_with_redirect(uri, query=nil, extheader={}, &block)
11
+ Retn.new({}, @@authority_servers[uri.to_s])
12
+ end
13
+ end
14
+
15
+ def test_resolution_uses_local_httpclient_method
16
+ authrs = {'https://at.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/first_stage1")}
17
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
18
+ xrds = XriResolver::AuthorityResolver.resolve('@example')
19
+ assert xrds.instance_of?(XriResolver::AuthorityResolver)
20
+ assert xrds.resolved_successfully?
21
+ assert_equal '100', xrds.status_code
22
+ assert_equal '@*example', xrds.resolved
23
+ end
24
+
25
+ def test_two_stage_resolution
26
+ authrs = {'https://at.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/first_stage1"),
27
+ 'http://resolve.example.com/resolve/@example/*user' => IO.read("#{TEST_ROOT}/xrds_sources/second_stage1")}
28
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
29
+ xrds = XriResolver::AuthorityResolver.resolve('@example*user')
30
+ inputs = XriResolver::ParseInputParameters.new
31
+ assert xrds.instance_of?(XriResolver::AuthorityResolver)
32
+ assert xrds.resolved_successfully?
33
+ assert_equal '100', xrds.status_code
34
+ assert_equal '@*example*user', xrds.resolved
35
+ assert_equal 2, xrds.xrd_array.length
36
+
37
+ uri_list = XriResolver::SEPSelector.select(xrds, xrds.last_xrd, inputs).to_urilist
38
+ assert_equal ["http://example.com/contact/@example*user"], uri_list
39
+ end
40
+
41
+
42
+
43
+ end
44
+
@@ -0,0 +1,87 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ class SEPSelectionTest < Test::Unit::TestCase
3
+
4
+ class XriResolver::AuthorityResolver::HTTPClient
5
+
6
+ def self.authr=(authority_servers = {})
7
+ @@authority_servers = authority_servers
8
+ end
9
+
10
+ def get_with_redirect(uri, query=nil, extheader={}, &block)
11
+ Retn.new({}, @@authority_servers[uri.to_s])
12
+ end
13
+ end
14
+
15
+ def test_resolution_uses_httpclient_stubbing
16
+ authrs = {'https://equal.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/sep1")}
17
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
18
+ xrds = XriResolver::AuthorityResolver.resolve('=example')
19
+ assert xrds.instance_of?(XriResolver::AuthorityResolver)
20
+ assert xrds.resolved_successfully?
21
+ assert_equal '100', xrds.status_code
22
+ assert_equal '=*example', xrds.resolved
23
+ end
24
+
25
+ def test_select_path_match
26
+ authrs = {'https://equal.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/sep1")}
27
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
28
+ xrds = XriResolver::AuthorityResolver.resolve('=example/(+contact)')
29
+ inputs = XriResolver::ParseInputParameters.new
30
+ uri_list = XriResolver::SEPSelector.select(xrds, xrds.last_xrd, inputs).to_urilist
31
+ assert uri_list.kind_of?(Array)
32
+ ## first SEP: positive match on null type, default match on path, default match on null mediaType
33
+ ## second SEP, negative match on type, default match on path, default match on null mediaType
34
+ ## third SEP, default match on type, positive/select match on path, default match on null mediaType
35
+
36
+ assert_equal ['http://example.com/contact/=example/(+contact)'], uri_list
37
+ end
38
+
39
+ def test_empty_path_match
40
+ authrs = {'https://equal.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/sep1")}
41
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
42
+ xrds = XriResolver::AuthorityResolver.resolve('=example')
43
+ inputs = XriResolver::ParseInputParameters.new
44
+ uri_list = XriResolver::SEPSelector.select(xrds, xrds.last_xrd, inputs).to_urilist
45
+ assert uri_list.kind_of?(Array)
46
+ ## first SEP: positive match on null type, default match on null path, default match on null mediaType
47
+ ## second SEP, negative match on type, default match on null path, default match on null mediaType
48
+ ## third SEP, default match on null type, positive match on null path, default match on null mediaType
49
+
50
+ assert_equal ['http://example.com/forwarding/=example', 'http://example.com/contact/=example'], uri_list
51
+ end
52
+
53
+ ## these 3 are probably the simplest possible cases
54
+ def test_no_seps_in_xrd
55
+ authrs = {'https://equal.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/no_svc_sep")}
56
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
57
+ xrds = XriResolver::AuthorityResolver.resolve('=example')
58
+ inputs = XriResolver::ParseInputParameters.new
59
+ uri_list = XriResolver::SEPSelector.select(xrds, xrds.last_xrd, inputs).to_urilist
60
+ assert uri_list.kind_of?(Array)
61
+ assert uri_list.empty?
62
+ end
63
+
64
+ def test_empty_sels_no_append_qxri_sep
65
+ authrs = {'https://equal.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/empty_sels_no_append_qxri_sep")}
66
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
67
+ xrds = XriResolver::AuthorityResolver.resolve('=example')
68
+ inputs = XriResolver::ParseInputParameters.new
69
+ uri_list = XriResolver::SEPSelector.select(xrds, xrds.last_xrd, inputs).to_urilist
70
+ assert uri_list.kind_of?(Array)
71
+ assert_equal 1, uri_list.size
72
+ assert_equal 'http://example.com/default_selection/', uri_list[0]
73
+ end
74
+
75
+ def test_empty_sels_sep
76
+ authrs = {'https://equal.xri.net/*example' => IO.read("#{TEST_ROOT}/xrds_sources/empty_sels_sep")}
77
+ XriResolver::AuthorityResolver::HTTPClient.authr = authrs
78
+ xrds = XriResolver::AuthorityResolver.resolve('=example')
79
+ inputs = XriResolver::ParseInputParameters.new
80
+ uri_list = XriResolver::SEPSelector.select(xrds, xrds.last_xrd, inputs).to_urilist
81
+ assert uri_list.kind_of?(Array)
82
+ assert_equal 1, uri_list.size
83
+ assert_equal 'http://example.com/default_selection/=example', uri_list[0]
84
+ end
85
+
86
+
87
+ end
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=example" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*example</Query>
5
+ <Status code="100"/>
6
+ <CanonicalID priority="10">=!1234.5678</CanonicalID>
7
+
8
+ <Service priority="10">
9
+ <URI>http://example.com/default_selection/</URI>
10
+ </Service>
11
+
12
+ </XRD>
13
+ </XRDS>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=example" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*example</Query>
5
+ <Status code="100"/>
6
+ <CanonicalID priority="10">=!1234.5678</CanonicalID>
7
+
8
+ <Service priority="10">
9
+ <URI append="qxri">http://example.com/default_selection/</URI>
10
+ </Service>
11
+
12
+ </XRD>
13
+ </XRDS>
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://@example" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*example</Query>
5
+ <Status code="100"/>
6
+ <Expires>2007-08-27T17:27:07.000Z</Expires>
7
+ <ProviderID>xri://@</ProviderID>
8
+ <LocalID priority="10">!1234</LocalID>
9
+ <CanonicalID priority="10">@!1234</CanonicalID>
10
+ <Service priority="10">
11
+ <Type select="true">xri://$res*auth*($v*2.0)</Type>
12
+ <ProviderID>xri://!!1000</ProviderID>
13
+ <MediaType>application/xrds+xml;trust=none</MediaType>
14
+ <URI priority="10">http://resolve.example.com/resolve/@example/</URI>
15
+ </Service>
16
+ <Service priority="10">
17
+ <Type match="null"/>
18
+ <Type select="true">xri://+i-service*(+contact)*($v*1.0)</Type>
19
+ <ProviderID>xri://!!1000!100xx</ProviderID>
20
+ <Path select="true">(+contact)</Path>
21
+ <Path match="null"/>
22
+ <URI append="authority" priority="1">http://example.net/contact/</URI>
23
+ </Service>
24
+ <Service priority="1">
25
+ <Type match="content" select="true">xri://+i-service*(+forwarding)*($v*1.0)</Type>
26
+ <Type match="null" select="false"/>
27
+ <ProviderID>xri://!!1000!100</ProviderID>
28
+ <Path match="content">(+index)</Path>
29
+ <Path match="default"/>
30
+ <URI append="qxri" priority="1">http://example.net/forwarding/</URI>
31
+ </Service>
32
+ <Service priority="10">
33
+ <Type select="true">http://openid.net/signon/1.0</Type>
34
+ <ProviderID/>
35
+ <URI append="qxri" priority="1">https://example.net/server/</URI>
36
+ </Service>
37
+ </XRD>
38
+ </XRDS>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS ref="xri://=example" xmlns="xri://$xrds">
3
+ <XRD xmlns="xri://$xrd*($v*2.0)">
4
+ <Query>*example</Query>
5
+ <Status code="100"/>
6
+ <CanonicalID priority="10">=!1234.5678</CanonicalID>
7
+ </XRD>
8
+ </XRDS>
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <XRDS xmlns="xri://$xrds" ref="xri://@example*user">
3
+ <XRD xmlns:xrd="xri://$xrd*($v*2.0)">
4
+ <Query>*user</Query>
5
+ <Status code="100">SUCCESS</Status>
6
+ <ProviderID>xri://!!1000</ProviderID>
7
+ <LocalID >!1234</LocalID>
8
+ <CanonicalID >@!1234!1234</CanonicalID>
9
+ <xrd:Service>
10
+ <xrd:ProviderID>xri://!!1000!100</xrd:ProviderID>
11
+ <xrd:Type select="true">xri://+i-service*(+contact)*($v*1.0)</xrd:Type> <xrd:Type match="null"></xrd:Type>
12
+
13
+ <xrd:Path select="true">(+contact)</xrd:Path> <xrd:Path match="null"></xrd:Path>
14
+ <xrd:URI priority="1" append="authority">http://example.com/contact/</xrd:URI>
15
+ </xrd:Service>
16
+ <xrd:Service priority="1">
17
+ <xrd:ProviderID>xri://!!1000!100</xrd:ProviderID>
18
+ <xrd:Type select="true" match="content">xri://+i-service*(+forwarding)*($v*1.0)</xrd:Type> <xrd:Type select="false" match="null"></xrd:Type>
19
+
20
+ <xrd:Path match="content">(+index)</xrd:Path> <xrd:Path match="default"></xrd:Path>
21
+ <xrd:URI priority="1" append="qxri">http://example.com/forwarding/</xrd:URI>
22
+ </xrd:Service>
23
+
24
+
25
+ </XRD>
26
+ </XRDS>