lygneo-vines 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +19 -0
  4. data/README.md +7 -0
  5. data/Rakefile +23 -0
  6. data/bin/vines +4 -0
  7. data/conf/certs/README +39 -0
  8. data/conf/certs/ca-bundle.crt +3895 -0
  9. data/conf/config.rb +42 -0
  10. data/lib/vines/cli.rb +132 -0
  11. data/lib/vines/cluster/connection.rb +26 -0
  12. data/lib/vines/cluster/publisher.rb +55 -0
  13. data/lib/vines/cluster/pubsub.rb +92 -0
  14. data/lib/vines/cluster/sessions.rb +125 -0
  15. data/lib/vines/cluster/subscriber.rb +108 -0
  16. data/lib/vines/cluster.rb +246 -0
  17. data/lib/vines/command/bcrypt.rb +12 -0
  18. data/lib/vines/command/cert.rb +50 -0
  19. data/lib/vines/command/init.rb +68 -0
  20. data/lib/vines/command/ldap.rb +38 -0
  21. data/lib/vines/command/restart.rb +12 -0
  22. data/lib/vines/command/schema.rb +24 -0
  23. data/lib/vines/command/start.rb +28 -0
  24. data/lib/vines/command/stop.rb +18 -0
  25. data/lib/vines/config/host.rb +125 -0
  26. data/lib/vines/config/port.rb +132 -0
  27. data/lib/vines/config/pubsub.rb +108 -0
  28. data/lib/vines/config.rb +223 -0
  29. data/lib/vines/daemon.rb +78 -0
  30. data/lib/vines/error.rb +150 -0
  31. data/lib/vines/follower.rb +111 -0
  32. data/lib/vines/jid.rb +95 -0
  33. data/lib/vines/kit.rb +23 -0
  34. data/lib/vines/log.rb +24 -0
  35. data/lib/vines/router.rb +179 -0
  36. data/lib/vines/stanza/iq/auth.rb +18 -0
  37. data/lib/vines/stanza/iq/disco_info.rb +45 -0
  38. data/lib/vines/stanza/iq/disco_items.rb +29 -0
  39. data/lib/vines/stanza/iq/error.rb +16 -0
  40. data/lib/vines/stanza/iq/ping.rb +16 -0
  41. data/lib/vines/stanza/iq/private_storage.rb +83 -0
  42. data/lib/vines/stanza/iq/query.rb +10 -0
  43. data/lib/vines/stanza/iq/result.rb +16 -0
  44. data/lib/vines/stanza/iq/roster.rb +140 -0
  45. data/lib/vines/stanza/iq/session.rb +17 -0
  46. data/lib/vines/stanza/iq/vcard.rb +56 -0
  47. data/lib/vines/stanza/iq/version.rb +25 -0
  48. data/lib/vines/stanza/iq.rb +48 -0
  49. data/lib/vines/stanza/message.rb +40 -0
  50. data/lib/vines/stanza/presence/error.rb +23 -0
  51. data/lib/vines/stanza/presence/probe.rb +37 -0
  52. data/lib/vines/stanza/presence/subscribe.rb +42 -0
  53. data/lib/vines/stanza/presence/subscribed.rb +51 -0
  54. data/lib/vines/stanza/presence/unavailable.rb +15 -0
  55. data/lib/vines/stanza/presence/unsubscribe.rb +38 -0
  56. data/lib/vines/stanza/presence/unsubscribed.rb +38 -0
  57. data/lib/vines/stanza/presence.rb +141 -0
  58. data/lib/vines/stanza/pubsub/create.rb +39 -0
  59. data/lib/vines/stanza/pubsub/delete.rb +41 -0
  60. data/lib/vines/stanza/pubsub/publish.rb +66 -0
  61. data/lib/vines/stanza/pubsub/subscribe.rb +44 -0
  62. data/lib/vines/stanza/pubsub/unsubscribe.rb +30 -0
  63. data/lib/vines/stanza/pubsub.rb +22 -0
  64. data/lib/vines/stanza.rb +175 -0
  65. data/lib/vines/storage/ldap.rb +71 -0
  66. data/lib/vines/storage/local.rb +139 -0
  67. data/lib/vines/storage/null.rb +39 -0
  68. data/lib/vines/storage/sql.rb +138 -0
  69. data/lib/vines/storage.rb +239 -0
  70. data/lib/vines/store.rb +110 -0
  71. data/lib/vines/stream/client/auth.rb +74 -0
  72. data/lib/vines/stream/client/auth_restart.rb +29 -0
  73. data/lib/vines/stream/client/bind.rb +72 -0
  74. data/lib/vines/stream/client/bind_restart.rb +24 -0
  75. data/lib/vines/stream/client/closed.rb +13 -0
  76. data/lib/vines/stream/client/ready.rb +17 -0
  77. data/lib/vines/stream/client/session.rb +210 -0
  78. data/lib/vines/stream/client/start.rb +27 -0
  79. data/lib/vines/stream/client/tls.rb +38 -0
  80. data/lib/vines/stream/client.rb +84 -0
  81. data/lib/vines/stream/component/handshake.rb +26 -0
  82. data/lib/vines/stream/component/ready.rb +23 -0
  83. data/lib/vines/stream/component/start.rb +19 -0
  84. data/lib/vines/stream/component.rb +58 -0
  85. data/lib/vines/stream/http/auth.rb +22 -0
  86. data/lib/vines/stream/http/bind.rb +32 -0
  87. data/lib/vines/stream/http/bind_restart.rb +37 -0
  88. data/lib/vines/stream/http/ready.rb +29 -0
  89. data/lib/vines/stream/http/request.rb +172 -0
  90. data/lib/vines/stream/http/session.rb +120 -0
  91. data/lib/vines/stream/http/sessions.rb +65 -0
  92. data/lib/vines/stream/http/start.rb +23 -0
  93. data/lib/vines/stream/http.rb +157 -0
  94. data/lib/vines/stream/parser.rb +79 -0
  95. data/lib/vines/stream/sasl.rb +128 -0
  96. data/lib/vines/stream/server/auth.rb +13 -0
  97. data/lib/vines/stream/server/auth_restart.rb +13 -0
  98. data/lib/vines/stream/server/final_restart.rb +21 -0
  99. data/lib/vines/stream/server/outbound/auth.rb +31 -0
  100. data/lib/vines/stream/server/outbound/auth_restart.rb +20 -0
  101. data/lib/vines/stream/server/outbound/auth_result.rb +32 -0
  102. data/lib/vines/stream/server/outbound/final_features.rb +28 -0
  103. data/lib/vines/stream/server/outbound/final_restart.rb +20 -0
  104. data/lib/vines/stream/server/outbound/start.rb +20 -0
  105. data/lib/vines/stream/server/outbound/tls.rb +30 -0
  106. data/lib/vines/stream/server/outbound/tls_result.rb +34 -0
  107. data/lib/vines/stream/server/ready.rb +24 -0
  108. data/lib/vines/stream/server/start.rb +13 -0
  109. data/lib/vines/stream/server/tls.rb +13 -0
  110. data/lib/vines/stream/server.rb +150 -0
  111. data/lib/vines/stream/state.rb +60 -0
  112. data/lib/vines/stream.rb +247 -0
  113. data/lib/vines/token_bucket.rb +55 -0
  114. data/lib/vines/user.rb +123 -0
  115. data/lib/vines/version.rb +6 -0
  116. data/lib/vines/xmpp_server.rb +25 -0
  117. data/lib/vines.rb +203 -0
  118. data/test/cluster/publisher_test.rb +57 -0
  119. data/test/cluster/sessions_test.rb +47 -0
  120. data/test/cluster/subscriber_test.rb +109 -0
  121. data/test/config/host_test.rb +369 -0
  122. data/test/config/pubsub_test.rb +187 -0
  123. data/test/config_test.rb +732 -0
  124. data/test/error_test.rb +58 -0
  125. data/test/ext/nokogiri.rb +14 -0
  126. data/test/follower_test.rb +102 -0
  127. data/test/jid_test.rb +147 -0
  128. data/test/kit_test.rb +31 -0
  129. data/test/router_test.rb +243 -0
  130. data/test/stanza/iq/disco_info_test.rb +78 -0
  131. data/test/stanza/iq/disco_items_test.rb +49 -0
  132. data/test/stanza/iq/private_storage_test.rb +184 -0
  133. data/test/stanza/iq/roster_test.rb +229 -0
  134. data/test/stanza/iq/session_test.rb +25 -0
  135. data/test/stanza/iq/vcard_test.rb +146 -0
  136. data/test/stanza/iq/version_test.rb +64 -0
  137. data/test/stanza/iq_test.rb +70 -0
  138. data/test/stanza/message_test.rb +126 -0
  139. data/test/stanza/presence/probe_test.rb +50 -0
  140. data/test/stanza/presence/subscribe_test.rb +83 -0
  141. data/test/stanza/pubsub/create_test.rb +116 -0
  142. data/test/stanza/pubsub/delete_test.rb +169 -0
  143. data/test/stanza/pubsub/publish_test.rb +309 -0
  144. data/test/stanza/pubsub/subscribe_test.rb +205 -0
  145. data/test/stanza/pubsub/unsubscribe_test.rb +148 -0
  146. data/test/stanza_test.rb +85 -0
  147. data/test/storage/ldap_test.rb +201 -0
  148. data/test/storage/local_test.rb +59 -0
  149. data/test/storage/mock_redis.rb +97 -0
  150. data/test/storage/null_test.rb +29 -0
  151. data/test/storage/storage_tests.rb +182 -0
  152. data/test/storage_test.rb +85 -0
  153. data/test/store_test.rb +130 -0
  154. data/test/stream/client/auth_test.rb +137 -0
  155. data/test/stream/client/ready_test.rb +47 -0
  156. data/test/stream/client/session_test.rb +27 -0
  157. data/test/stream/component/handshake_test.rb +52 -0
  158. data/test/stream/component/ready_test.rb +103 -0
  159. data/test/stream/component/start_test.rb +39 -0
  160. data/test/stream/http/auth_test.rb +70 -0
  161. data/test/stream/http/ready_test.rb +86 -0
  162. data/test/stream/http/request_test.rb +209 -0
  163. data/test/stream/http/sessions_test.rb +49 -0
  164. data/test/stream/http/start_test.rb +50 -0
  165. data/test/stream/parser_test.rb +122 -0
  166. data/test/stream/sasl_test.rb +195 -0
  167. data/test/stream/server/auth_test.rb +61 -0
  168. data/test/stream/server/outbound/auth_test.rb +75 -0
  169. data/test/stream/server/ready_test.rb +98 -0
  170. data/test/test_helper.rb +42 -0
  171. data/test/token_bucket_test.rb +44 -0
  172. data/test/user_test.rb +96 -0
  173. data/vines.gemspec +30 -0
  174. metadata +387 -0
@@ -0,0 +1,732 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+
5
+ describe Vines::Config do
6
+ def test_missing_host
7
+ assert_raises(RuntimeError) do
8
+ Vines::Config.new do
9
+ # missing hosts
10
+ end
11
+ end
12
+ end
13
+
14
+ def test_duplicate_host
15
+ assert_raises(RuntimeError) do
16
+ Vines::Config.new do
17
+ host 'wonderland.lit' do
18
+ storage 'fs' do
19
+ dir Dir.tmpdir
20
+ end
21
+ end
22
+ host 'WONDERLAND.LIT' do
23
+ storage 'fs' do
24
+ dir Dir.tmpdir
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ def test_duplicate_host_in_one_call
32
+ assert_raises(RuntimeError) do
33
+ Vines::Config.new do
34
+ host 'wonderland.lit', 'wonderland.lit' do
35
+ storage 'fs' do
36
+ dir Dir.tmpdir
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def test_configure
44
+ config = Vines::Config.configure do
45
+ host 'wonderland.lit' do
46
+ storage :fs do
47
+ dir Dir.tmpdir
48
+ end
49
+ end
50
+ end
51
+ refute_nil config
52
+ assert_same config, Vines::Config.instance
53
+ end
54
+
55
+ def test_vhost
56
+ config = Vines::Config.new do
57
+ host 'wonderland.lit' do
58
+ storage(:fs) { dir Dir.tmpdir }
59
+ end
60
+ end
61
+ refute_nil config.vhost('wonderland.lit')
62
+ refute_nil config.vhost(Vines::JID.new('wonderland.lit'))
63
+ assert config.vhost?('wonderland.lit')
64
+ assert config.vhost?(Vines::JID.new('wonderland.lit'))
65
+ refute config.vhost?('alice@wonderland.lit')
66
+ refute config.vhost?('tea.wonderland.lit')
67
+ refute config.vhost?('bogus')
68
+ end
69
+
70
+ def test_port_lookup
71
+ config = Vines::Config.new do
72
+ host 'wonderland.lit' do
73
+ storage(:fs) { dir Dir.tmpdir }
74
+ end
75
+ client
76
+ end
77
+ refute_nil config[:client]
78
+ assert_raises(ArgumentError) { config[:server] }
79
+ assert_raises(ArgumentError) { config[:bogus] }
80
+ end
81
+
82
+ def test_duplicate_client
83
+ assert_raises(RuntimeError) do
84
+ Vines::Config.new do
85
+ host 'wonderland.lit' do
86
+ storage(:fs) { dir Dir.tmpdir }
87
+ end
88
+ client
89
+ client
90
+ end
91
+ end
92
+ end
93
+
94
+ def test_duplicate_server
95
+ assert_raises(RuntimeError) do
96
+ Vines::Config.new do
97
+ host 'wonderland.lit' do
98
+ storage(:fs) { dir Dir.tmpdir }
99
+ end
100
+ server
101
+ server
102
+ end
103
+ end
104
+ end
105
+
106
+ def test_duplicate_http
107
+ assert_raises(RuntimeError) do
108
+ Vines::Config.new do
109
+ host 'wonderland.lit' do
110
+ storage(:fs) { dir Dir.tmpdir }
111
+ end
112
+ http
113
+ http
114
+ end
115
+ end
116
+ end
117
+
118
+ def test_duplicate_component
119
+ assert_raises(RuntimeError) do
120
+ Vines::Config.new do
121
+ host 'wonderland.lit' do
122
+ storage(:fs) { dir Dir.tmpdir }
123
+ end
124
+ component
125
+ component
126
+ end
127
+ end
128
+ end
129
+
130
+ def test_duplicate_cluster
131
+ assert_raises(RuntimeError) do
132
+ Vines::Config.new do
133
+ host 'wonderland.lit' do
134
+ storage(:fs) { dir Dir.tmpdir }
135
+ end
136
+ cluster {}
137
+ cluster {}
138
+ end
139
+ end
140
+ end
141
+
142
+ def test_missing_cluster
143
+ config = Vines::Config.new do
144
+ host 'wonderland.lit' do
145
+ storage(:fs) { dir Dir.tmpdir }
146
+ end
147
+ end
148
+ assert_nil config.cluster
149
+ refute config.cluster?
150
+ end
151
+
152
+ def test_cluster
153
+ config = Vines::Config.new do
154
+ host 'wonderland.lit' do
155
+ storage(:fs) { dir Dir.tmpdir }
156
+ end
157
+ cluster do
158
+ host 'redis.wonderland.lit'
159
+ port 12345
160
+ database 8
161
+ password 'secr3t'
162
+ end
163
+ end
164
+ refute_nil config.cluster
165
+ assert config.cluster?
166
+ assert_equal 'redis.wonderland.lit', config.cluster.host
167
+ assert_equal 12345, config.cluster.port
168
+ assert_equal 8, config.cluster.database
169
+ assert_equal 'secr3t', config.cluster.password
170
+ end
171
+
172
+ def test_default_client
173
+ config = Vines::Config.new do
174
+ host 'wonderland.lit' do
175
+ storage(:fs) { dir Dir.tmpdir }
176
+ end
177
+ client
178
+ end
179
+ port = config.ports.first
180
+ refute_nil port
181
+ assert_equal Vines::Config::ClientPort, port.class
182
+ assert_equal '0.0.0.0', port.host
183
+ assert_equal 5222, port.port
184
+ assert_equal 131_072, port.max_stanza_size
185
+ assert_equal 5, port.max_resources_per_account
186
+ assert_equal Vines::Stream::Client, port.stream
187
+ assert_same config, port.config
188
+ assert_equal 1, config.ports.size
189
+ end
190
+
191
+ def test_configured_client
192
+ config = Vines::Config.new do
193
+ host 'wonderland.lit' do
194
+ storage(:fs) { dir Dir.tmpdir }
195
+ end
196
+ client '0.0.0.1', 42 do
197
+ max_stanza_size 60_000
198
+ max_resources_per_account 1
199
+ end
200
+ end
201
+ port = config.ports.first
202
+ refute_nil port
203
+ assert_equal Vines::Config::ClientPort, port.class
204
+ assert_equal '0.0.0.1', port.host
205
+ assert_equal 42, port.port
206
+ assert_equal 60_000, port.max_stanza_size
207
+ assert_equal 1, port.max_resources_per_account
208
+ assert_equal Vines::Stream::Client, port.stream
209
+ assert_same config, port.config
210
+ assert_equal 1, config.ports.size
211
+ end
212
+
213
+ def test_max_stanza_size
214
+ config = Vines::Config.new do
215
+ host 'wonderland.lit' do
216
+ storage(:fs) { dir Dir.tmpdir }
217
+ end
218
+ client do
219
+ max_stanza_size 0
220
+ end
221
+ end
222
+ assert_equal 10_000, config.ports.first.max_stanza_size
223
+ end
224
+
225
+ def test_default_server
226
+ config = Vines::Config.new do
227
+ host 'wonderland.lit' do
228
+ storage(:fs) { dir Dir.tmpdir }
229
+ end
230
+ server
231
+ end
232
+ port = config.ports.first
233
+ refute_nil port
234
+ assert !config.s2s?('verona.lit')
235
+ assert_equal Vines::Config::ServerPort, port.class
236
+ assert_equal '0.0.0.0', port.host
237
+ assert_equal 5269, port.port
238
+ assert_equal 131_072, port.max_stanza_size
239
+ assert_equal Vines::Stream::Server, port.stream
240
+ assert_same config, port.config
241
+ assert_equal 1, config.ports.size
242
+ end
243
+
244
+ def test_configured_server
245
+ config = Vines::Config.new do
246
+ host 'wonderland.lit' do
247
+ storage(:fs) { dir Dir.tmpdir }
248
+ end
249
+ server '0.0.0.1', 42 do
250
+ max_stanza_size 60_000
251
+ hosts ['verona.lit', 'denmark.lit']
252
+ end
253
+ end
254
+ port = config.ports.first
255
+ refute_nil port
256
+ assert config.s2s?('verona.lit')
257
+ assert config.s2s?('denmark.lit')
258
+ assert config.s2s?(Vines::JID.new('denmark.lit'))
259
+ refute config.s2s?(Vines::JID.new('hamlet@denmark.lit'))
260
+ refute config.s2s?('bogus')
261
+ refute config.s2s?(nil)
262
+ assert_equal Vines::Config::ServerPort, port.class
263
+ assert_equal '0.0.0.1', port.host
264
+ assert_equal 42, port.port
265
+ assert_equal 60_000, port.max_stanza_size
266
+ assert_equal Vines::Stream::Server, port.stream
267
+ assert_same config, port.config
268
+ assert_equal 1, config.ports.size
269
+ end
270
+
271
+ def test_default_http
272
+ config = Vines::Config.new do
273
+ host 'wonderland.lit' do
274
+ storage(:fs) { dir Dir.tmpdir }
275
+ end
276
+ http
277
+ end
278
+ port = config.ports.first
279
+ refute_nil port
280
+ assert_equal Vines::Config::HttpPort, port.class
281
+ assert_equal '0.0.0.0', port.host
282
+ assert_equal 5280, port.port
283
+ assert_equal 131_072, port.max_stanza_size
284
+ assert_equal 5, port.max_resources_per_account
285
+ assert_equal File.join(Dir.pwd, 'web'), port.root
286
+ assert_equal '/xmpp', port.bind
287
+ assert_equal Vines::Stream::Http, port.stream
288
+ assert_same config, port.config
289
+ assert_equal 1, config.ports.size
290
+ end
291
+
292
+ def test_configured_http
293
+ config = Vines::Config.new do
294
+ host 'wonderland.lit' do
295
+ storage(:fs) { dir Dir.tmpdir }
296
+ end
297
+ http '0.0.0.1', 42 do
298
+ bind '/custom'
299
+ max_stanza_size 60_000
300
+ max_resources_per_account 1
301
+ root '/var/www/html'
302
+ end
303
+ end
304
+ port = config.ports.first
305
+ refute_nil port
306
+ assert_equal Vines::Config::HttpPort, port.class
307
+ assert_equal '0.0.0.1', port.host
308
+ assert_equal 42, port.port
309
+ assert_equal 60_000, port.max_stanza_size
310
+ assert_equal 1, port.max_resources_per_account
311
+ assert_equal '/var/www/html', port.root
312
+ assert_equal '/custom', port.bind
313
+ assert_equal Vines::Stream::Http, port.stream
314
+ assert_same config, port.config
315
+ assert_equal 1, config.ports.size
316
+ end
317
+
318
+ def test_default_component
319
+ config = Vines::Config.new do
320
+ host 'wonderland.lit' do
321
+ storage(:fs) { dir Dir.tmpdir }
322
+ end
323
+ component
324
+ end
325
+ port = config.ports.first
326
+ refute_nil port
327
+ assert_equal Vines::Config::ComponentPort, port.class
328
+ assert_equal '0.0.0.0', port.host
329
+ assert_equal 5347, port.port
330
+ assert_equal 131_072, port.max_stanza_size
331
+ assert_equal Vines::Stream::Component, port.stream
332
+ assert_same config, port.config
333
+ assert_equal 1, config.ports.size
334
+ end
335
+
336
+ def test_configured_component
337
+ config = Vines::Config.new do
338
+ host 'wonderland.lit' do
339
+ storage(:fs) { dir Dir.tmpdir }
340
+ end
341
+ component '0.0.0.1', 42 do
342
+ max_stanza_size 60_000
343
+ end
344
+ end
345
+ port = config.ports.first
346
+ refute_nil port
347
+ assert_equal Vines::Config::ComponentPort, port.class
348
+ assert_equal '0.0.0.1', port.host
349
+ assert_equal 42, port.port
350
+ assert_equal 60_000, port.max_stanza_size
351
+ assert_equal Vines::Stream::Component, port.stream
352
+ assert_same config, port.config
353
+ assert_equal 1, config.ports.size
354
+ end
355
+
356
+ def test_invalid_log_level
357
+ assert_raises(RuntimeError) do
358
+ config = Vines::Config.new do
359
+ log 'bogus'
360
+ host 'wonderland.lit' do
361
+ storage(:fs) { dir Dir.tmpdir }
362
+ end
363
+ end
364
+ end
365
+ end
366
+
367
+ def test_valid_log_level
368
+ config = Vines::Config.new do
369
+ log :error
370
+ host 'wonderland.lit' do
371
+ storage(:fs) { dir Dir.tmpdir }
372
+ end
373
+ end
374
+ assert_equal Logger::ERROR, Class.new.extend(Vines::Log).log.level
375
+ end
376
+
377
+ def test_null_storage
378
+ config = Vines::Config.new do
379
+ host 'wonderland.lit' do
380
+ storage(:fs) { dir Dir.tmpdir }
381
+ end
382
+ end
383
+ assert_equal Vines::Storage::Local, config.storage('wonderland.lit').class
384
+ assert_equal Vines::Storage::Null, config.storage('bogus').class
385
+ end
386
+
387
+ def test_cross_domain_messages
388
+ config = Vines::Config.new do
389
+ host 'wonderland.lit' do
390
+ storage(:fs) { dir Dir.tmpdir }
391
+ end
392
+ host 'verona.lit' do
393
+ cross_domain_messages true
394
+ storage(:fs) { dir Dir.tmpdir }
395
+ end
396
+ end
397
+ refute config.vhost('wonderland.lit').cross_domain_messages?
398
+ assert config.vhost('verona.lit').cross_domain_messages?
399
+ end
400
+
401
+ def test_local_jid?
402
+ config = Vines::Config.new do
403
+ host 'wonderland.lit', 'verona.lit' do
404
+ storage(:fs) { dir Dir.tmpdir }
405
+ end
406
+ end
407
+ refute config.local_jid?(nil)
408
+ refute config.local_jid?('alice@wonderland.lit', nil)
409
+ assert config.local_jid?('alice@wonderland.lit')
410
+ assert config.local_jid?(Vines::JID.new('alice@wonderland.lit'))
411
+ assert config.local_jid?(Vines::JID.new('wonderland.lit'))
412
+ assert config.local_jid?('alice@wonderland.lit', 'romeo@verona.lit')
413
+ refute config.local_jid?('alice@wonderland.lit', 'romeo@bogus.lit')
414
+ refute config.local_jid?('alice@tea.wonderland.lit')
415
+ refute config.local_jid?('alice@bogus.lit')
416
+ end
417
+
418
+ def test_missing_addresses_not_allowed
419
+ config = Vines::Config.new do
420
+ host 'wonderland.lit', 'verona.lit' do
421
+ storage(:fs) { dir Dir.tmpdir }
422
+ end
423
+ end
424
+ refute config.allowed?(nil, nil)
425
+ refute config.allowed?('', '')
426
+ end
427
+
428
+ def test_same_domain_allowed
429
+ config = Vines::Config.new do
430
+ host 'wonderland.lit', 'verona.lit' do
431
+ storage(:fs) { dir Dir.tmpdir }
432
+ end
433
+ end
434
+ alice = Vines::JID.new('alice@wonderland.lit')
435
+ hatter = Vines::JID.new('hatter@wonderland.lit')
436
+ assert config.allowed?(alice, hatter)
437
+ assert config.allowed?(hatter, alice)
438
+ assert config.allowed?('wonderland.lit', alice)
439
+ end
440
+
441
+ def test_both_vhosts_with_cross_domain_allowed
442
+ config = Vines::Config.new do
443
+ host 'wonderland.lit', 'verona.lit' do
444
+ cross_domain_messages true
445
+ storage(:fs) { dir Dir.tmpdir }
446
+ end
447
+ end
448
+ alice = Vines::JID.new('alice@wonderland.lit')
449
+ romeo = Vines::JID.new('romeo@verona.lit')
450
+ assert config.allowed?(alice, romeo)
451
+ assert config.allowed?(romeo, alice)
452
+ end
453
+
454
+ def test_one_vhost_with_cross_domain_not_allowed
455
+ config = Vines::Config.new do
456
+ host 'wonderland.lit' do
457
+ cross_domain_messages true
458
+ storage(:fs) { dir Dir.tmpdir }
459
+ end
460
+ host 'verona.lit' do
461
+ cross_domain_messages false
462
+ storage(:fs) { dir Dir.tmpdir }
463
+ end
464
+ end
465
+ alice = Vines::JID.new('alice@wonderland.lit')
466
+ romeo = Vines::JID.new('romeo@verona.lit')
467
+ refute config.allowed?(alice, romeo)
468
+ refute config.allowed?(romeo, alice)
469
+ end
470
+
471
+ def test_same_domain_component_to_pubsub_allowed
472
+ config = Vines::Config.new do
473
+ host 'wonderland.lit' do
474
+ cross_domain_messages false
475
+ storage(:fs) { dir Dir.tmpdir }
476
+ components 'tea' => 'secr3t', cake: 'passw0rd'
477
+ pubsub 'games'
478
+ end
479
+ end
480
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
481
+ tea = Vines::JID.new('tea.wonderland.lit')
482
+ pubsub = Vines::JID.new('games.wonderland.lit')
483
+ assert config.allowed?(alice, pubsub)
484
+ assert config.allowed?(pubsub, alice)
485
+ assert config.allowed?(tea, pubsub)
486
+ assert config.allowed?(pubsub, tea)
487
+ end
488
+
489
+ def test_cross_domain_component_to_pubsub_allowed
490
+ config = Vines::Config.new do
491
+ host 'wonderland.lit', 'verona.lit' do
492
+ cross_domain_messages true
493
+ storage(:fs) { dir Dir.tmpdir }
494
+ components 'tea' => 'secr3t', cake: 'passw0rd'
495
+ pubsub 'games'
496
+ end
497
+ end
498
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
499
+ tea = Vines::JID.new('tea.wonderland.lit')
500
+ pubsub = Vines::JID.new('games.verona.lit')
501
+ assert config.allowed?(alice, pubsub)
502
+ assert config.allowed?(pubsub, alice)
503
+ assert config.allowed?(tea, pubsub)
504
+ assert config.allowed?(pubsub, tea)
505
+ end
506
+
507
+ def test_cross_domain_component_to_pubsub_not_allowed
508
+ config = Vines::Config.new do
509
+ host 'wonderland.lit' do
510
+ cross_domain_messages true
511
+ storage(:fs) { dir Dir.tmpdir }
512
+ components 'tea' => 'secr3t', cake: 'passw0rd'
513
+ pubsub 'games'
514
+ end
515
+ host 'verona.lit' do
516
+ cross_domain_messages false
517
+ storage(:fs) { dir Dir.tmpdir }
518
+ components 'party' => 'secr3t'
519
+ end
520
+ end
521
+ romeo = Vines::JID.new('romeo@party.verona.lit')
522
+ party = Vines::JID.new('party.verona.lit')
523
+ pubsub = Vines::JID.new('games.wonderland.lit')
524
+ refute config.allowed?(romeo, pubsub)
525
+ refute config.allowed?(pubsub, romeo)
526
+ refute config.allowed?(party, pubsub)
527
+ refute config.allowed?(pubsub, party)
528
+ end
529
+
530
+ def test_same_domain_component_to_component_allowed
531
+ config = Vines::Config.new do
532
+ host 'wonderland.lit' do
533
+ cross_domain_messages false
534
+ storage(:fs) { dir Dir.tmpdir }
535
+ components 'tea' => 'secr3t', cake: 'passw0rd'
536
+ end
537
+ end
538
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
539
+ hatter = Vines::JID.new('hatter@cake.wonderland.lit')
540
+ assert config.allowed?(alice, alice)
541
+ assert config.allowed?(alice, hatter)
542
+ assert config.allowed?(hatter, alice)
543
+ end
544
+
545
+ def test_cross_domain_component_to_component_allowed
546
+ config = Vines::Config.new do
547
+ host 'wonderland.lit', 'verona.lit' do
548
+ cross_domain_messages true
549
+ storage(:fs) { dir Dir.tmpdir }
550
+ components 'tea' => 'secr3t', cake: 'passw0rd'
551
+ end
552
+ end
553
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
554
+ romeo = Vines::JID.new('romeo@cake.verona.lit')
555
+ assert config.allowed?(alice, romeo)
556
+ assert config.allowed?(romeo, alice)
557
+ end
558
+
559
+ def test_cross_domain_component_to_component_not_allowed
560
+ config = Vines::Config.new do
561
+ host 'wonderland.lit' do
562
+ cross_domain_messages true
563
+ storage(:fs) { dir Dir.tmpdir }
564
+ components 'tea' => 'secr3t', cake: 'passw0rd'
565
+ end
566
+ host 'verona.lit' do
567
+ cross_domain_messages false
568
+ storage(:fs) { dir Dir.tmpdir }
569
+ components 'party' => 'secr3t'
570
+ end
571
+ end
572
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
573
+ romeo = Vines::JID.new('romeo@party.verona.lit')
574
+ refute config.allowed?(alice, romeo)
575
+ refute config.allowed?(romeo, alice)
576
+ end
577
+
578
+ def test_same_domain_user_to_component_allowed
579
+ config = Vines::Config.new do
580
+ host 'wonderland.lit' do
581
+ cross_domain_messages false
582
+ storage(:fs) { dir Dir.tmpdir }
583
+ components 'tea' => 'secr3t', cake: 'passw0rd'
584
+ end
585
+ end
586
+ alice = Vines::JID.new('alice@wonderland.lit')
587
+ comp = Vines::JID.new('hatter@cake.wonderland.lit')
588
+ assert config.allowed?(alice, comp)
589
+ assert config.allowed?(comp, alice)
590
+ end
591
+
592
+ def test_cross_domain_user_to_component_allowed
593
+ config = Vines::Config.new do
594
+ host 'wonderland.lit', 'verona.lit' do
595
+ cross_domain_messages true
596
+ storage(:fs) { dir Dir.tmpdir }
597
+ components 'tea' => 'secr3t', cake: 'passw0rd'
598
+ end
599
+ end
600
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
601
+ romeo = Vines::JID.new('romeo@verona.lit')
602
+ assert config.allowed?(alice, romeo)
603
+ assert config.allowed?(romeo, alice)
604
+ end
605
+
606
+ def test_cross_domain_user_to_component_not_allowed
607
+ config = Vines::Config.new do
608
+ host 'wonderland.lit' do
609
+ cross_domain_messages true
610
+ storage(:fs) { dir Dir.tmpdir }
611
+ components 'tea' => 'secr3t', cake: 'passw0rd'
612
+ end
613
+ host 'verona.lit' do
614
+ cross_domain_messages false
615
+ storage(:fs) { dir Dir.tmpdir }
616
+ end
617
+ end
618
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
619
+ romeo = Vines::JID.new('romeo@verona.lit')
620
+ refute config.allowed?(alice, romeo)
621
+ refute config.allowed?(romeo, alice)
622
+ end
623
+
624
+ def test_remote_user_to_component_allowed
625
+ config = Vines::Config.new do
626
+ host 'wonderland.lit' do
627
+ cross_domain_messages true
628
+ storage(:fs) { dir Dir.tmpdir }
629
+ components 'tea' => 'secr3t', cake: 'passw0rd'
630
+ end
631
+ host 'verona.lit' do
632
+ cross_domain_messages false
633
+ storage(:fs) { dir Dir.tmpdir }
634
+ components 'tea' => 'secr3t', cake: 'passw0rd'
635
+ end
636
+ end
637
+ alice = Vines::JID.new('alice@tea.wonderland.lit')
638
+ romeo = Vines::JID.new('romeo@tea.verona.lit')
639
+ hamlet = Vines::JID.new('hamlet@denmark.lit')
640
+ assert config.allowed?(alice, hamlet)
641
+ assert config.allowed?(hamlet, alice)
642
+ refute config.allowed?(romeo, hamlet)
643
+ refute config.allowed?(hamlet, romeo)
644
+ end
645
+
646
+ def test_same_domain_user_to_pubsub_allowed
647
+ config = Vines::Config.new do
648
+ host 'wonderland.lit' do
649
+ cross_domain_messages false
650
+ storage(:fs) { dir Dir.tmpdir }
651
+ pubsub 'games'
652
+ end
653
+ end
654
+ alice = Vines::JID.new('alice@wonderland.lit')
655
+ pubsub = Vines::JID.new('games.wonderland.lit')
656
+ assert config.allowed?(alice, pubsub)
657
+ assert config.allowed?(pubsub, alice)
658
+ end
659
+
660
+ def test_cross_domain_user_to_pubsub_not_allowed
661
+ config = Vines::Config.new do
662
+ host 'wonderland.lit' do
663
+ cross_domain_messages true
664
+ storage(:fs) { dir Dir.tmpdir }
665
+ pubsub 'games'
666
+ end
667
+ host 'verona.lit' do
668
+ cross_domain_messages false
669
+ storage(:fs) { dir Dir.tmpdir }
670
+ end
671
+ end
672
+ pubsub = Vines::JID.new('games.wonderland.lit')
673
+ romeo = Vines::JID.new('romeo@verona.lit')
674
+ refute config.allowed?(pubsub, romeo)
675
+ refute config.allowed?(romeo, pubsub)
676
+ end
677
+
678
+ def test_remote_user_to_pubsub_allowed
679
+ config = Vines::Config.new do
680
+ host 'wonderland.lit' do
681
+ cross_domain_messages true
682
+ storage(:fs) { dir Dir.tmpdir }
683
+ pubsub 'games'
684
+ end
685
+ host 'verona.lit' do
686
+ cross_domain_messages false
687
+ storage(:fs) { dir Dir.tmpdir }
688
+ pubsub 'games'
689
+ end
690
+ end
691
+ wonderland = Vines::JID.new('games.wonderland.lit')
692
+ verona = Vines::JID.new('games.verona.lit')
693
+ hamlet = Vines::JID.new('hamlet@denmark.lit')
694
+ assert config.allowed?(wonderland, hamlet)
695
+ assert config.allowed?(hamlet, wonderland)
696
+ refute config.allowed?(verona, hamlet)
697
+ refute config.allowed?(hamlet, verona)
698
+ end
699
+
700
+ def test_remote_user_to_local_user_allowed
701
+ config = Vines::Config.new do
702
+ host 'wonderland.lit' do
703
+ cross_domain_messages true
704
+ storage(:fs) { dir Dir.tmpdir }
705
+ end
706
+ host 'verona.lit' do
707
+ cross_domain_messages false
708
+ storage(:fs) { dir Dir.tmpdir }
709
+ end
710
+ end
711
+ alice = Vines::JID.new('alice@wonderland.lit')
712
+ romeo = Vines::JID.new('romeo@verona.lit')
713
+ hamlet = Vines::JID.new('hamlet@denmark.lit')
714
+ assert config.allowed?(alice, hamlet)
715
+ assert config.allowed?(hamlet, alice)
716
+ refute config.allowed?(romeo, hamlet)
717
+ refute config.allowed?(hamlet, romeo)
718
+ end
719
+
720
+ def test_remote_user_to_remote_user_not_allowed
721
+ config = Vines::Config.new do
722
+ host 'wonderland.lit' do
723
+ cross_domain_messages true
724
+ storage(:fs) { dir Dir.tmpdir }
725
+ end
726
+ end
727
+ romeo = Vines::JID.new('romeo@verona.lit')
728
+ hamlet = Vines::JID.new('hamlet@denmark.lit')
729
+ refute config.allowed?(romeo, hamlet)
730
+ refute config.allowed?(hamlet, romeo)
731
+ end
732
+ end