vines 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/README +5 -9
  2. data/Rakefile +11 -9
  3. data/conf/config.rb +30 -4
  4. data/lib/vines/cluster/connection.rb +26 -0
  5. data/lib/vines/cluster/publisher.rb +55 -0
  6. data/lib/vines/cluster/pubsub.rb +92 -0
  7. data/lib/vines/cluster/sessions.rb +125 -0
  8. data/lib/vines/cluster/subscriber.rb +108 -0
  9. data/lib/vines/cluster.rb +246 -0
  10. data/lib/vines/command/init.rb +21 -24
  11. data/lib/vines/config/host.rb +48 -8
  12. data/lib/vines/config/port.rb +5 -0
  13. data/lib/vines/config/pubsub.rb +108 -0
  14. data/lib/vines/config.rb +74 -20
  15. data/lib/vines/jid.rb +14 -0
  16. data/lib/vines/router.rb +69 -55
  17. data/lib/vines/stanza/iq/disco_info.rb +22 -9
  18. data/lib/vines/stanza/iq/disco_items.rb +6 -3
  19. data/lib/vines/stanza/iq/ping.rb +1 -1
  20. data/lib/vines/stanza/iq/private_storage.rb +4 -8
  21. data/lib/vines/stanza/iq/roster.rb +6 -14
  22. data/lib/vines/stanza/iq/session.rb +2 -7
  23. data/lib/vines/stanza/iq/vcard.rb +4 -6
  24. data/lib/vines/stanza/iq/version.rb +1 -1
  25. data/lib/vines/stanza/iq.rb +8 -10
  26. data/lib/vines/stanza/presence/subscribe.rb +3 -11
  27. data/lib/vines/stanza/presence/subscribed.rb +16 -29
  28. data/lib/vines/stanza/presence/unsubscribe.rb +3 -15
  29. data/lib/vines/stanza/presence/unsubscribed.rb +3 -16
  30. data/lib/vines/stanza/presence.rb +30 -0
  31. data/lib/vines/stanza/pubsub/create.rb +39 -0
  32. data/lib/vines/stanza/pubsub/delete.rb +41 -0
  33. data/lib/vines/stanza/pubsub/publish.rb +66 -0
  34. data/lib/vines/stanza/pubsub/subscribe.rb +44 -0
  35. data/lib/vines/stanza/pubsub/unsubscribe.rb +30 -0
  36. data/lib/vines/stanza/pubsub.rb +22 -0
  37. data/lib/vines/stanza.rb +72 -22
  38. data/lib/vines/storage/couchdb.rb +46 -65
  39. data/lib/vines/storage/local.rb +20 -14
  40. data/lib/vines/storage/mongodb.rb +132 -0
  41. data/lib/vines/storage/null.rb +39 -0
  42. data/lib/vines/storage/redis.rb +61 -68
  43. data/lib/vines/storage/sql.rb +73 -69
  44. data/lib/vines/storage.rb +1 -1
  45. data/lib/vines/stream/client/bind.rb +2 -2
  46. data/lib/vines/stream/client/session.rb +71 -16
  47. data/lib/vines/stream/component/handshake.rb +1 -0
  48. data/lib/vines/stream/component/ready.rb +2 -2
  49. data/lib/vines/stream/http/session.rb +2 -0
  50. data/lib/vines/stream/http.rb +0 -6
  51. data/lib/vines/stream/server/final_restart.rb +1 -0
  52. data/lib/vines/stream/server/outbound/final_features.rb +1 -0
  53. data/lib/vines/stream/server/ready.rb +6 -2
  54. data/lib/vines/stream/server.rb +4 -3
  55. data/lib/vines/stream.rb +10 -6
  56. data/lib/vines/version.rb +1 -1
  57. data/lib/vines.rb +48 -22
  58. data/test/cluster/publisher_test.rb +45 -0
  59. data/test/cluster/sessions_test.rb +54 -0
  60. data/test/cluster/subscriber_test.rb +94 -0
  61. data/test/config/host_test.rb +100 -21
  62. data/test/config/pubsub_test.rb +181 -0
  63. data/test/config_test.rb +225 -43
  64. data/test/jid_test.rb +7 -0
  65. data/test/router_test.rb +181 -9
  66. data/test/stanza/iq/disco_info_test.rb +8 -6
  67. data/test/stanza/iq/disco_items_test.rb +3 -3
  68. data/test/stanza/iq/private_storage_test.rb +8 -19
  69. data/test/stanza/iq/roster_test.rb +1 -1
  70. data/test/stanza/iq/session_test.rb +3 -6
  71. data/test/stanza/iq/vcard_test.rb +6 -2
  72. data/test/stanza/iq/version_test.rb +3 -2
  73. data/test/stanza/iq_test.rb +5 -5
  74. data/test/stanza/message_test.rb +3 -2
  75. data/test/stanza/presence/probe_test.rb +2 -1
  76. data/test/stanza/pubsub/create_test.rb +138 -0
  77. data/test/stanza/pubsub/delete_test.rb +142 -0
  78. data/test/stanza/pubsub/publish_test.rb +373 -0
  79. data/test/stanza/pubsub/subscribe_test.rb +186 -0
  80. data/test/stanza/pubsub/unsubscribe_test.rb +179 -0
  81. data/test/stanza_test.rb +2 -1
  82. data/test/storage/local_test.rb +26 -25
  83. data/test/storage/mock_mongo.rb +40 -0
  84. data/test/storage/mock_redis.rb +98 -0
  85. data/test/storage/mongodb_test.rb +81 -0
  86. data/test/storage/null_test.rb +30 -0
  87. data/test/storage/redis_test.rb +3 -36
  88. data/test/stream/component/handshake_test.rb +4 -0
  89. data/test/stream/component/ready_test.rb +2 -1
  90. data/test/stream/server/ready_test.rb +7 -1
  91. data/web/404.html +5 -3
  92. data/web/chat/coffeescripts/chat.coffee +9 -5
  93. data/web/chat/javascripts/app.js +1 -1
  94. data/web/chat/javascripts/chat.js +14 -8
  95. data/web/chat/stylesheets/chat.css +4 -1
  96. data/web/lib/coffeescripts/button.coffee +9 -5
  97. data/web/lib/coffeescripts/filter.coffee +1 -1
  98. data/web/lib/coffeescripts/login.coffee +14 -1
  99. data/web/lib/coffeescripts/session.coffee +8 -11
  100. data/web/lib/images/dark-gray.png +0 -0
  101. data/web/lib/images/light-gray.png +0 -0
  102. data/web/lib/images/logo-large.png +0 -0
  103. data/web/lib/images/logo-small.png +0 -0
  104. data/web/lib/images/white.png +0 -0
  105. data/web/lib/javascripts/base.js +9 -8
  106. data/web/lib/javascripts/button.js +20 -12
  107. data/web/lib/javascripts/filter.js +1 -1
  108. data/web/lib/javascripts/icons.js +7 -1
  109. data/web/lib/javascripts/jquery.js +4 -4
  110. data/web/lib/javascripts/login.js +16 -2
  111. data/web/lib/javascripts/raphael.js +5 -7
  112. data/web/lib/javascripts/session.js +10 -14
  113. data/web/lib/stylesheets/base.css +7 -11
  114. data/web/lib/stylesheets/login.css +31 -27
  115. metadata +100 -34
data/test/config_test.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'minitest/autorun'
5
6
 
@@ -17,12 +18,12 @@ class ConfigTest < MiniTest::Unit::TestCase
17
18
  Vines::Config.new do
18
19
  host 'wonderland.lit' do
19
20
  storage 'fs' do
20
- dir '.'
21
+ dir Dir.tmpdir
21
22
  end
22
23
  end
23
24
  host 'WONDERLAND.LIT' do
24
25
  storage 'fs' do
25
- dir '.'
26
+ dir Dir.tmpdir
26
27
  end
27
28
  end
28
29
  end
@@ -34,7 +35,7 @@ class ConfigTest < MiniTest::Unit::TestCase
34
35
  Vines::Config.new do
35
36
  host 'wonderland.lit', 'wonderland.lit' do
36
37
  storage 'fs' do
37
- dir '.'
38
+ dir Dir.tmpdir
38
39
  end
39
40
  end
40
41
  end
@@ -45,7 +46,7 @@ class ConfigTest < MiniTest::Unit::TestCase
45
46
  config = Vines::Config.configure do
46
47
  host 'wonderland.lit' do
47
48
  storage :fs do
48
- dir '.'
49
+ dir Dir.tmpdir
49
50
  end
50
51
  end
51
52
  end
@@ -56,11 +57,12 @@ class ConfigTest < MiniTest::Unit::TestCase
56
57
  def test_vhost
57
58
  config = Vines::Config.new do
58
59
  host 'wonderland.lit' do
59
- storage(:fs) { dir '.' }
60
+ storage(:fs) { dir Dir.tmpdir }
60
61
  end
61
62
  end
62
63
  assert_equal ['wonderland.lit'], config.vhosts.keys
63
64
  assert config.vhost?('wonderland.lit')
65
+ refute config.vhost?('alice@wonderland.lit')
64
66
  refute config.vhost?('tea.wonderland.lit')
65
67
  refute config.vhost?('bogus')
66
68
  end
@@ -68,7 +70,7 @@ class ConfigTest < MiniTest::Unit::TestCase
68
70
  def test_port_lookup
69
71
  config = Vines::Config.new do
70
72
  host 'wonderland.lit' do
71
- storage(:fs) { dir '.' }
73
+ storage(:fs) { dir Dir.tmpdir }
72
74
  end
73
75
  client
74
76
  end
@@ -80,6 +82,9 @@ class ConfigTest < MiniTest::Unit::TestCase
80
82
  def test_duplicate_client
81
83
  assert_raises(RuntimeError) do
82
84
  Vines::Config.new do
85
+ host 'wonderland.lit' do
86
+ storage(:fs) { dir Dir.tmpdir }
87
+ end
83
88
  client
84
89
  client
85
90
  end
@@ -89,6 +94,9 @@ class ConfigTest < MiniTest::Unit::TestCase
89
94
  def test_duplicate_server
90
95
  assert_raises(RuntimeError) do
91
96
  Vines::Config.new do
97
+ host 'wonderland.lit' do
98
+ storage(:fs) { dir Dir.tmpdir }
99
+ end
92
100
  server
93
101
  server
94
102
  end
@@ -98,6 +106,9 @@ class ConfigTest < MiniTest::Unit::TestCase
98
106
  def test_duplicate_http
99
107
  assert_raises(RuntimeError) do
100
108
  Vines::Config.new do
109
+ host 'wonderland.lit' do
110
+ storage(:fs) { dir Dir.tmpdir }
111
+ end
101
112
  http
102
113
  http
103
114
  end
@@ -107,16 +118,61 @@ class ConfigTest < MiniTest::Unit::TestCase
107
118
  def test_duplicate_component
108
119
  assert_raises(RuntimeError) do
109
120
  Vines::Config.new do
121
+ host 'wonderland.lit' do
122
+ storage(:fs) { dir Dir.tmpdir }
123
+ end
110
124
  component
111
125
  component
112
126
  end
113
127
  end
114
128
  end
115
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
+
116
172
  def test_default_client
117
173
  config = Vines::Config.new do
118
174
  host 'wonderland.lit' do
119
- storage(:fs) { dir '.' }
175
+ storage(:fs) { dir Dir.tmpdir }
120
176
  end
121
177
  client
122
178
  end
@@ -135,7 +191,7 @@ class ConfigTest < MiniTest::Unit::TestCase
135
191
  def test_configured_client
136
192
  config = Vines::Config.new do
137
193
  host 'wonderland.lit' do
138
- storage(:fs) { dir '.' }
194
+ storage(:fs) { dir Dir.tmpdir }
139
195
  end
140
196
  client '0.0.0.1', 42 do
141
197
  max_stanza_size 60_000
@@ -157,7 +213,7 @@ class ConfigTest < MiniTest::Unit::TestCase
157
213
  def test_max_stanza_size
158
214
  config = Vines::Config.new do
159
215
  host 'wonderland.lit' do
160
- storage(:fs) { dir '.' }
216
+ storage(:fs) { dir Dir.tmpdir }
161
217
  end
162
218
  client do
163
219
  max_stanza_size 0
@@ -169,7 +225,7 @@ class ConfigTest < MiniTest::Unit::TestCase
169
225
  def test_default_server
170
226
  config = Vines::Config.new do
171
227
  host 'wonderland.lit' do
172
- storage(:fs) { dir '.' }
228
+ storage(:fs) { dir Dir.tmpdir }
173
229
  end
174
230
  server
175
231
  end
@@ -188,7 +244,7 @@ class ConfigTest < MiniTest::Unit::TestCase
188
244
  def test_configured_server
189
245
  config = Vines::Config.new do
190
246
  host 'wonderland.lit' do
191
- storage(:fs) { dir '.' }
247
+ storage(:fs) { dir Dir.tmpdir }
192
248
  end
193
249
  server '0.0.0.1', 42 do
194
250
  max_stanza_size 60_000
@@ -199,7 +255,10 @@ class ConfigTest < MiniTest::Unit::TestCase
199
255
  refute_nil port
200
256
  assert config.s2s?('verona.lit')
201
257
  assert config.s2s?('denmark.lit')
202
- assert !config.s2s?('bogus')
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)
203
262
  assert_equal Vines::Config::ServerPort, port.class
204
263
  assert_equal '0.0.0.1', port.host
205
264
  assert_equal 42, port.port
@@ -212,7 +271,7 @@ class ConfigTest < MiniTest::Unit::TestCase
212
271
  def test_default_http
213
272
  config = Vines::Config.new do
214
273
  host 'wonderland.lit' do
215
- storage(:fs) { dir '.' }
274
+ storage(:fs) { dir Dir.tmpdir }
216
275
  end
217
276
  http
218
277
  end
@@ -233,7 +292,7 @@ class ConfigTest < MiniTest::Unit::TestCase
233
292
  def test_configured_http
234
293
  config = Vines::Config.new do
235
294
  host 'wonderland.lit' do
236
- storage(:fs) { dir '.' }
295
+ storage(:fs) { dir Dir.tmpdir }
237
296
  end
238
297
  http '0.0.0.1', 42 do
239
298
  bind '/custom'
@@ -259,7 +318,7 @@ class ConfigTest < MiniTest::Unit::TestCase
259
318
  def test_default_component
260
319
  config = Vines::Config.new do
261
320
  host 'wonderland.lit' do
262
- storage(:fs) { dir '.' }
321
+ storage(:fs) { dir Dir.tmpdir }
263
322
  end
264
323
  component
265
324
  end
@@ -277,7 +336,7 @@ class ConfigTest < MiniTest::Unit::TestCase
277
336
  def test_configured_component
278
337
  config = Vines::Config.new do
279
338
  host 'wonderland.lit' do
280
- storage(:fs) { dir '.' }
339
+ storage(:fs) { dir Dir.tmpdir }
281
340
  end
282
341
  component '0.0.0.1', 42 do
283
342
  max_stanza_size 60_000
@@ -299,7 +358,7 @@ class ConfigTest < MiniTest::Unit::TestCase
299
358
  config = Vines::Config.new do
300
359
  log 'bogus'
301
360
  host 'wonderland.lit' do
302
- storage(:fs) { dir '.' }
361
+ storage(:fs) { dir Dir.tmpdir }
303
362
  end
304
363
  end
305
364
  end
@@ -309,20 +368,30 @@ class ConfigTest < MiniTest::Unit::TestCase
309
368
  config = Vines::Config.new do
310
369
  log :error
311
370
  host 'wonderland.lit' do
312
- storage(:fs) { dir '.' }
371
+ storage(:fs) { dir Dir.tmpdir }
313
372
  end
314
373
  end
315
374
  assert_equal Logger::ERROR, Class.new.extend(Vines::Log).log.level
316
375
  end
317
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
+
318
387
  def test_cross_domain_messages
319
388
  config = Vines::Config.new do
320
389
  host 'wonderland.lit' do
321
- storage(:fs) { dir '.' }
390
+ storage(:fs) { dir Dir.tmpdir }
322
391
  end
323
392
  host 'verona.lit' do
324
393
  cross_domain_messages true
325
- storage(:fs) { dir '.' }
394
+ storage(:fs) { dir Dir.tmpdir }
326
395
  end
327
396
  end
328
397
  refute config.vhosts['wonderland.lit'].cross_domain_messages?
@@ -332,12 +401,14 @@ class ConfigTest < MiniTest::Unit::TestCase
332
401
  def test_local_jid?
333
402
  config = Vines::Config.new do
334
403
  host 'wonderland.lit', 'verona.lit' do
335
- storage(:fs) { dir '.' }
404
+ storage(:fs) { dir Dir.tmpdir }
336
405
  end
337
406
  end
338
407
  refute config.local_jid?(nil)
339
408
  refute config.local_jid?('alice@wonderland.lit', nil)
340
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'))
341
412
  assert config.local_jid?('alice@wonderland.lit', 'romeo@verona.lit')
342
413
  refute config.local_jid?('alice@wonderland.lit', 'romeo@bogus.lit')
343
414
  refute config.local_jid?('alice@tea.wonderland.lit')
@@ -347,7 +418,7 @@ class ConfigTest < MiniTest::Unit::TestCase
347
418
  def test_missing_addresses_not_allowed
348
419
  config = Vines::Config.new do
349
420
  host 'wonderland.lit', 'verona.lit' do
350
- storage(:fs) { dir '.' }
421
+ storage(:fs) { dir Dir.tmpdir }
351
422
  end
352
423
  end
353
424
  refute config.allowed?(nil, nil)
@@ -357,19 +428,21 @@ class ConfigTest < MiniTest::Unit::TestCase
357
428
  def test_same_domain_allowed
358
429
  config = Vines::Config.new do
359
430
  host 'wonderland.lit', 'verona.lit' do
360
- storage(:fs) { dir '.' }
431
+ storage(:fs) { dir Dir.tmpdir }
361
432
  end
362
433
  end
363
434
  alice = Vines::JID.new('alice@wonderland.lit')
364
435
  hatter = Vines::JID.new('hatter@wonderland.lit')
365
436
  assert config.allowed?(alice, hatter)
437
+ assert config.allowed?(hatter, alice)
438
+ assert config.allowed?('wonderland.lit', alice)
366
439
  end
367
440
 
368
441
  def test_both_vhosts_with_cross_domain_allowed
369
442
  config = Vines::Config.new do
370
443
  host 'wonderland.lit', 'verona.lit' do
371
444
  cross_domain_messages true
372
- storage(:fs) { dir '.' }
445
+ storage(:fs) { dir Dir.tmpdir }
373
446
  end
374
447
  end
375
448
  alice = Vines::JID.new('alice@wonderland.lit')
@@ -382,11 +455,11 @@ class ConfigTest < MiniTest::Unit::TestCase
382
455
  config = Vines::Config.new do
383
456
  host 'wonderland.lit' do
384
457
  cross_domain_messages true
385
- storage(:fs) { dir '.' }
458
+ storage(:fs) { dir Dir.tmpdir }
386
459
  end
387
460
  host 'verona.lit' do
388
461
  cross_domain_messages false
389
- storage(:fs) { dir '.' }
462
+ storage(:fs) { dir Dir.tmpdir }
390
463
  end
391
464
  end
392
465
  alice = Vines::JID.new('alice@wonderland.lit')
@@ -395,11 +468,70 @@ class ConfigTest < MiniTest::Unit::TestCase
395
468
  refute config.allowed?(romeo, alice)
396
469
  end
397
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
+
398
530
  def test_same_domain_component_to_component_allowed
399
531
  config = Vines::Config.new do
400
532
  host 'wonderland.lit' do
401
533
  cross_domain_messages false
402
- storage(:fs) { dir '.' }
534
+ storage(:fs) { dir Dir.tmpdir }
403
535
  components 'tea' => 'secr3t', cake: 'passw0rd'
404
536
  end
405
537
  end
@@ -414,7 +546,7 @@ class ConfigTest < MiniTest::Unit::TestCase
414
546
  config = Vines::Config.new do
415
547
  host 'wonderland.lit', 'verona.lit' do
416
548
  cross_domain_messages true
417
- storage(:fs) { dir '.' }
549
+ storage(:fs) { dir Dir.tmpdir }
418
550
  components 'tea' => 'secr3t', cake: 'passw0rd'
419
551
  end
420
552
  end
@@ -428,14 +560,12 @@ class ConfigTest < MiniTest::Unit::TestCase
428
560
  config = Vines::Config.new do
429
561
  host 'wonderland.lit' do
430
562
  cross_domain_messages true
431
- storage(:fs) { dir '.' }
563
+ storage(:fs) { dir Dir.tmpdir }
432
564
  components 'tea' => 'secr3t', cake: 'passw0rd'
433
565
  end
434
- end
435
- config = Vines::Config.new do
436
566
  host 'verona.lit' do
437
567
  cross_domain_messages false
438
- storage(:fs) { dir '.' }
568
+ storage(:fs) { dir Dir.tmpdir }
439
569
  components 'party' => 'secr3t'
440
570
  end
441
571
  end
@@ -449,7 +579,7 @@ class ConfigTest < MiniTest::Unit::TestCase
449
579
  config = Vines::Config.new do
450
580
  host 'wonderland.lit' do
451
581
  cross_domain_messages false
452
- storage(:fs) { dir '.' }
582
+ storage(:fs) { dir Dir.tmpdir }
453
583
  components 'tea' => 'secr3t', cake: 'passw0rd'
454
584
  end
455
585
  end
@@ -463,7 +593,7 @@ class ConfigTest < MiniTest::Unit::TestCase
463
593
  config = Vines::Config.new do
464
594
  host 'wonderland.lit', 'verona.lit' do
465
595
  cross_domain_messages true
466
- storage(:fs) { dir '.' }
596
+ storage(:fs) { dir Dir.tmpdir }
467
597
  components 'tea' => 'secr3t', cake: 'passw0rd'
468
598
  end
469
599
  end
@@ -477,14 +607,12 @@ class ConfigTest < MiniTest::Unit::TestCase
477
607
  config = Vines::Config.new do
478
608
  host 'wonderland.lit' do
479
609
  cross_domain_messages true
480
- storage(:fs) { dir '.' }
610
+ storage(:fs) { dir Dir.tmpdir }
481
611
  components 'tea' => 'secr3t', cake: 'passw0rd'
482
612
  end
483
- end
484
- config = Vines::Config.new do
485
613
  host 'verona.lit' do
486
614
  cross_domain_messages false
487
- storage(:fs) { dir '.' }
615
+ storage(:fs) { dir Dir.tmpdir }
488
616
  end
489
617
  end
490
618
  alice = Vines::JID.new('alice@tea.wonderland.lit')
@@ -497,12 +625,12 @@ class ConfigTest < MiniTest::Unit::TestCase
497
625
  config = Vines::Config.new do
498
626
  host 'wonderland.lit' do
499
627
  cross_domain_messages true
500
- storage(:fs) { dir '.' }
628
+ storage(:fs) { dir Dir.tmpdir }
501
629
  components 'tea' => 'secr3t', cake: 'passw0rd'
502
630
  end
503
631
  host 'verona.lit' do
504
632
  cross_domain_messages false
505
- storage(:fs) { dir '.' }
633
+ storage(:fs) { dir Dir.tmpdir }
506
634
  components 'tea' => 'secr3t', cake: 'passw0rd'
507
635
  end
508
636
  end
@@ -515,15 +643,69 @@ class ConfigTest < MiniTest::Unit::TestCase
515
643
  refute config.allowed?(hamlet, romeo)
516
644
  end
517
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
+
518
700
  def test_remote_user_to_local_user_allowed
519
701
  config = Vines::Config.new do
520
702
  host 'wonderland.lit' do
521
703
  cross_domain_messages true
522
- storage(:fs) { dir '.' }
704
+ storage(:fs) { dir Dir.tmpdir }
523
705
  end
524
706
  host 'verona.lit' do
525
707
  cross_domain_messages false
526
- storage(:fs) { dir '.' }
708
+ storage(:fs) { dir Dir.tmpdir }
527
709
  end
528
710
  end
529
711
  alice = Vines::JID.new('alice@wonderland.lit')
@@ -539,7 +721,7 @@ class ConfigTest < MiniTest::Unit::TestCase
539
721
  config = Vines::Config.new do
540
722
  host 'wonderland.lit' do
541
723
  cross_domain_messages true
542
- storage(:fs) { dir '.' }
724
+ storage(:fs) { dir Dir.tmpdir }
543
725
  end
544
726
  end
545
727
  romeo = Vines::JID.new('romeo@verona.lit')
data/test/jid_test.rb CHANGED
@@ -14,6 +14,7 @@ class JidTest < MiniTest::Unit::TestCase
14
14
  assert_equal '', jid.to_s
15
15
  assert_equal '', jid.bare.to_s
16
16
  assert jid.empty?
17
+ refute jid.domain?
17
18
  end
18
19
  end
19
20
 
@@ -32,6 +33,7 @@ class JidTest < MiniTest::Unit::TestCase
32
33
  assert_nil jid.node
33
34
  assert_nil jid.resource
34
35
  assert_equal jid, jid.bare
36
+ assert jid.domain?
35
37
  refute jid.empty?
36
38
  end
37
39
 
@@ -42,6 +44,7 @@ class JidTest < MiniTest::Unit::TestCase
42
44
  assert_equal 'alice', jid.node
43
45
  assert_nil jid.resource
44
46
  assert_equal jid, jid.bare
47
+ refute jid.domain?
45
48
  refute jid.empty?
46
49
  end
47
50
 
@@ -52,6 +55,7 @@ class JidTest < MiniTest::Unit::TestCase
52
55
  assert_equal 'alice', jid.node
53
56
  assert_nil jid.resource
54
57
  assert_equal jid, jid.bare
58
+ refute jid.domain?
55
59
  refute jid.empty?
56
60
  end
57
61
 
@@ -62,6 +66,7 @@ class JidTest < MiniTest::Unit::TestCase
62
66
  assert_equal 'alice', jid.node
63
67
  assert_equal 'tea', jid.resource
64
68
  refute_equal jid, jid.bare
69
+ refute jid.domain?
65
70
  refute jid.empty?
66
71
  end
67
72
 
@@ -72,6 +77,7 @@ class JidTest < MiniTest::Unit::TestCase
72
77
  assert_equal 'alice', jid.node
73
78
  assert_equal 'tea', jid.resource
74
79
  refute_equal jid, jid.bare
80
+ refute jid.domain?
75
81
  refute jid.empty?
76
82
  end
77
83
 
@@ -87,6 +93,7 @@ class JidTest < MiniTest::Unit::TestCase
87
93
  assert_nil jid.node
88
94
  assert_equal 'wonderland.lit', jid.domain
89
95
  assert_equal 'foo/bar@blarg', jid.resource
96
+ refute jid.domain?
90
97
  end
91
98
 
92
99
  def test_empty_part_raises