barx 0.1.0

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.
@@ -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>