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/router_test.rb CHANGED
@@ -1,30 +1,202 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'minitest/autorun'
5
6
 
6
7
  class RouterTest < MiniTest::Unit::TestCase
7
8
  def setup
8
9
  @alice = Vines::JID.new('alice@wonderland.lit/tea')
9
- @stream = MiniTest::Mock.new
10
- @router = Vines::Router.new
11
10
  @config = Vines::Config.new do
12
11
  host 'wonderland.lit' do
13
- storage(:fs) { dir '.' }
12
+ storage(:fs) { dir Dir.tmpdir }
13
+ components 'tea' => 'secr3t'
14
14
  end
15
15
  end
16
+ @router = Vines::Router.new(@config)
16
17
  end
17
18
 
18
19
  def test_connected_resources
20
+ cake = 'alice@wonderland.lit/cake'
19
21
  assert_equal 0, @router.connected_resources(@alice, @alice).size
22
+ assert_equal 0, @router.connected_resources(cake, @alice).size
23
+ assert_equal 0, @router.size
20
24
 
21
- @stream.expect(:config, @config)
22
- @stream.expect(:stream_type, :client)
23
- @stream.expect(:connected?, true)
24
- @stream.expect(:user, Vines::User.new(jid: @alice))
25
- @router << @stream
25
+ stream1, stream2 = stream(@alice), stream(cake)
26
+ @router << stream1
27
+ @router << stream2
26
28
 
27
29
  assert_equal 1, @router.connected_resources(@alice, @alice).size
28
- assert @stream.verify
30
+ assert_equal @alice, @router.connected_resources(@alice, @alice)[0].user.jid
31
+
32
+ assert_equal 1, @router.connected_resources(cake, @alice).size
33
+ assert_equal cake, @router.connected_resources(cake, @alice)[0].user.jid.to_s
34
+
35
+ assert_equal 2, @router.connected_resources(@alice.bare, @alice).size
36
+ assert_equal 2, @router.size
37
+ assert stream1.verify
38
+ assert stream2.verify
39
+ end
40
+
41
+ def test_connected_resources_checks_allowed
42
+ romeo = 'romeo@verona.lit/party'
43
+ stream1, stream2 = stream(@alice), stream(romeo)
44
+ @router << stream1
45
+ @router << stream2
46
+
47
+ assert_equal 2, @router.size
48
+ assert_equal 0, @router.connected_resources(@alice, romeo).size
49
+ @config.vhosts['wonderland.lit'].cross_domain_messages true
50
+ assert_equal 1, @router.connected_resources(@alice, romeo).size
51
+
52
+ assert stream1.verify
53
+ assert stream2.verify
54
+ end
55
+
56
+ def test_available_resources
57
+ cake = 'alice@wonderland.lit/cake'
58
+ assert_equal 0, @router.available_resources(@alice, @alice).size
59
+ assert_equal 0, @router.available_resources(cake, @alice).size
60
+ assert_equal 0, @router.size
61
+
62
+ stream1, stream2 = stream(@alice), stream(cake)
63
+ stream1.expect(:available?, true)
64
+ stream2.expect(:available?, false)
65
+ @router << stream1
66
+ @router << stream2
67
+
68
+ assert_equal 1, @router.available_resources(@alice, @alice).size
69
+ assert_equal @alice, @router.available_resources(@alice, @alice)[0].user.jid
70
+
71
+ assert_equal 1, @router.available_resources(cake, @alice).size
72
+ assert_equal @alice, @router.available_resources(cake, @alice)[0].user.jid
73
+
74
+ assert_equal 1, @router.available_resources(@alice.bare, @alice).size
75
+ assert_equal @alice, @router.available_resources(@alice.bare, @alice)[0].user.jid
76
+
77
+ assert_equal 2, @router.size
78
+ assert stream1.verify
79
+ assert stream2.verify
80
+ end
81
+
82
+ def test_interested_resources
83
+ hatter = 'hatter@wonderland.lit/cake'
84
+ assert_equal 0, @router.interested_resources(@alice, @alice).size
85
+ assert_equal 0, @router.interested_resources(hatter, @alice).size
86
+ assert_equal 0, @router.interested_resources(@alice, hatter, @alice).size
87
+ assert_equal 0, @router.size
88
+
89
+ stream1, stream2 = stream(@alice), stream(hatter)
90
+ stream1.expect(:interested?, true)
91
+ stream2.expect(:interested?, false)
92
+ @router << stream1
93
+ @router << stream2
94
+
95
+ assert_equal 0, @router.interested_resources('bogus@wonderland.lit', @alice).size
96
+
97
+ assert_equal 1, @router.interested_resources(@alice, hatter, @alice).size
98
+ assert_equal 1, @router.interested_resources([@alice, hatter], @alice).size
99
+ assert_equal @alice, @router.interested_resources(@alice, hatter, @alice)[0].user.jid
100
+
101
+ assert_equal 0, @router.interested_resources(hatter, @alice).size
102
+ assert_equal 0, @router.interested_resources([hatter], @alice).size
103
+
104
+ assert_equal 1, @router.interested_resources(@alice.bare, @alice).size
105
+ assert_equal @alice, @router.interested_resources(@alice.bare, @alice)[0].user.jid
106
+
107
+ assert_equal 2, @router.size
108
+ assert stream1.verify
109
+ assert stream2.verify
110
+ end
111
+
112
+ def test_delete
113
+ hatter = 'hatter@wonderland.lit/cake'
114
+ assert_equal 0, @router.size
115
+
116
+ stream1, stream2 = stream(@alice), stream(hatter)
117
+ @router << stream1
118
+ @router << stream2
119
+
120
+ assert_equal 2, @router.size
121
+
122
+ @router.delete(stream2)
123
+ assert_equal 1, @router.size
124
+
125
+ @router.delete(stream2)
126
+ assert_equal 1, @router.size
127
+
128
+ @router.delete(stream1)
129
+ assert_equal 0, @router.size
130
+
131
+ assert stream1.verify
132
+ assert stream2.verify
133
+ end
134
+
135
+ def test_multiple_component_streams_are_load_balanced
136
+ stream1 = component('tea.wonderland.lit')
137
+ stream2 = component('tea.wonderland.lit')
138
+ @router << stream1
139
+ @router << stream2
140
+ stanza = Nokogiri::XML('<message from="alice@wonderland.lit" to="tea.wonderland.lit">test</message>').root
141
+ 100.times { @router.route(stanza) }
142
+
143
+ assert_equal 100, stream1.count + stream2.count
144
+ assert stream1.count > 33
145
+ assert stream2.count > 33
146
+ assert stream1.verify
147
+ assert stream2.verify
148
+ end
149
+
150
+ def test_multiple_s2s_streams_are_load_balanced
151
+ @config.vhosts['wonderland.lit'].cross_domain_messages true
152
+ stream1 = s2s('wonderland.lit', 'verona.lit')
153
+ stream2 = s2s('wonderland.lit', 'verona.lit')
154
+ @router << stream1
155
+ @router << stream2
156
+ stanza = Nokogiri::XML('<message from="alice@wonderland.lit" to="romeo@verona.lit">test</message>').root
157
+ 100.times { @router.route(stanza) }
158
+
159
+ assert_equal 100, stream1.count + stream2.count
160
+ assert stream1.count > 33
161
+ assert stream2.count > 33
162
+ assert stream1.verify
163
+ assert stream2.verify
164
+ end
165
+
166
+ private
167
+
168
+ def stream(jid)
169
+ MiniTest::Mock.new.tap do |stream|
170
+ stream.expect(:connected?, true)
171
+ stream.expect(:stream_type, :client)
172
+ stream.expect(:user, Vines::User.new(jid: jid))
173
+ end
174
+ end
175
+
176
+ def component(jid)
177
+ stream = MiniTest::Mock.new
178
+ stream.expect(:stream_type, :component)
179
+ stream.expect(:remote_domain, jid)
180
+ stream.expect(:ready?, true)
181
+ def stream.count; @count || 0; end
182
+ def stream.write(stanza)
183
+ @count ||= 0
184
+ @count += 1
185
+ end
186
+ stream
187
+ end
188
+
189
+ def s2s(domain, remote_domain)
190
+ stream = MiniTest::Mock.new
191
+ stream.expect(:stream_type, :server)
192
+ stream.expect(:domain, domain)
193
+ stream.expect(:remote_domain, remote_domain)
194
+ stream.expect(:ready?, true)
195
+ def stream.count; @count || 0; end
196
+ def stream.write(stanza)
197
+ @count ||= 0
198
+ @count += 1
199
+ end
200
+ stream
29
201
  end
30
202
  end
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -8,10 +9,13 @@ class DiscoInfoTest < MiniTest::Unit::TestCase
8
9
  ALICE = Vines::User.new(:jid => 'alice@wonderland.lit/home')
9
10
 
10
11
  def setup
11
- @config = MiniTest::Mock.new
12
+ @config = Vines::Config.new do
13
+ host 'wonderland.lit' do
14
+ storage(:fs) { dir Dir.tmpdir }
15
+ end
16
+ end
12
17
  @stream = MiniTest::Mock.new
13
18
  @stream.expect(:user, ALICE)
14
- @stream.expect(:domain, 'wonderland.lit')
15
19
  @stream.expect(:config, @config)
16
20
  end
17
21
 
@@ -32,13 +36,12 @@ class DiscoInfoTest < MiniTest::Unit::TestCase
32
36
  </iq>
33
37
  }.strip.gsub(/\n|\s{2,}/, ''))
34
38
 
35
- @config.expect(:private_storage?, false, ['wonderland.lit'])
39
+ @config.vhosts['wonderland.lit'].private_storage false
36
40
  @stream.expect(:write, nil, [expected])
37
41
 
38
42
  stanza = Vines::Stanza::Iq::DiscoInfo.new(node, @stream)
39
43
  stanza.process
40
44
  assert @stream.verify
41
- assert @config.verify
42
45
  end
43
46
 
44
47
  def test_private_storage_enabled
@@ -59,13 +62,12 @@ class DiscoInfoTest < MiniTest::Unit::TestCase
59
62
  </iq>
60
63
  }.strip.gsub(/\n|\s{2,}/, ''))
61
64
 
62
- @config.expect(:private_storage?, true, ['wonderland.lit'])
65
+ @config.vhosts['wonderland.lit'].private_storage true
63
66
  @stream.expect(:write, nil, [expected])
64
67
 
65
68
  stanza = Vines::Stanza::Iq::DiscoInfo.new(node, @stream)
66
69
  stanza.process
67
70
  assert @stream.verify
68
- assert @config.verify
69
71
  end
70
72
 
71
73
  private
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -24,15 +25,14 @@ class DiscoItemsTest < MiniTest::Unit::TestCase
24
25
 
25
26
  config = Vines::Config.new do
26
27
  host 'wonderland.lit' do
27
- storage(:fs) { dir '.' }
28
+ storage(:fs) { dir Dir.tmpdir }
28
29
  components 'tea' => 'secr3t', 'cake' => 'passw0rd'
29
30
  end
30
31
  end
31
32
 
32
- @stream.expect(:config, config)
33
33
  @stream.expect(:user, Vines::User.new(:jid => 'alice@wonderland.lit/home'))
34
- @stream.expect(:domain, 'wonderland.lit')
35
34
  @stream.expect(:write, nil, [expected])
35
+ @stream.expect(:config, config)
36
36
 
37
37
  stanza = Vines::Stanza::Iq::DiscoItems.new(node, @stream)
38
38
  stanza.process
@@ -1,27 +1,32 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
6
7
 
7
8
  class PrivateStorageTest < MiniTest::Unit::TestCase
8
9
  def setup
9
- @config = MiniTest::Mock.new
10
10
  @stream = MiniTest::Mock.new
11
+ @config = Vines::Config.new do
12
+ host 'wonderland.lit' do
13
+ storage(:fs) { dir Dir.tmpdir }
14
+ private_storage true
15
+ end
16
+ end
11
17
  end
12
18
 
13
19
  def test_feature_disabled_raises_error
14
20
  query = %q{<query xmlns="jabber:iq:private"><one xmlns="a"/></query>}
15
21
  node = node(%Q{<iq id="42" type="get">#{query}</iq>})
16
22
 
17
- @config.expect(:private_storage?, false, ['wonderland.lit'])
23
+ @config.vhosts['wonderland.lit'].private_storage false
18
24
  @stream.expect(:domain, 'wonderland.lit')
19
25
  @stream.expect(:config, @config)
20
26
 
21
27
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
22
28
  assert_raises(Vines::StanzaErrors::ServiceUnavailable) { stanza.process }
23
29
  assert @stream.verify
24
- assert @config.verify
25
30
  end
26
31
 
27
32
  def test_get_another_user_fragment_raises_error
@@ -41,14 +46,12 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
41
46
  query = %q{<query xmlns="jabber:iq:private"></query>}
42
47
  node = node(%Q{<iq id="42" type="get">#{query}</iq>})
43
48
 
44
- @config.expect(:private_storage?, true, ['wonderland.lit'])
45
49
  @stream.expect(:domain, 'wonderland.lit')
46
50
  @stream.expect(:config, @config)
47
51
 
48
52
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
49
53
  assert_raises(Vines::StanzaErrors::NotAcceptable) { stanza.process }
50
54
  assert @stream.verify
51
- assert @config.verify
52
55
  end
53
56
 
54
57
  def test_get_with_two_children_raises_error
@@ -56,14 +59,12 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
56
59
  query = %q{<query xmlns="jabber:iq:private"><one xmlns="a"/><two xmlns="b"/></query>}
57
60
  node = node(%Q{<iq id="42" type="get">#{query}</iq>})
58
61
 
59
- @config.expect(:private_storage?, true, ['wonderland.lit'])
60
62
  @stream.expect(:domain, 'wonderland.lit')
61
63
  @stream.expect(:config, @config)
62
64
 
63
65
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
64
66
  assert_raises(Vines::StanzaErrors::NotAcceptable) { stanza.process }
65
67
  assert @stream.verify
66
- assert @config.verify
67
68
  end
68
69
 
69
70
  def test_set_with_zero_children_raises_error
@@ -71,14 +72,12 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
71
72
  query = %q{<query xmlns="jabber:iq:private"></query>}
72
73
  node = node(%Q{<iq id="42" type="set">#{query}</iq>})
73
74
 
74
- @config.expect(:private_storage?, true, ['wonderland.lit'])
75
75
  @stream.expect(:domain, 'wonderland.lit')
76
76
  @stream.expect(:config, @config)
77
77
 
78
78
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
79
79
  assert_raises(Vines::StanzaErrors::NotAcceptable) { stanza.process }
80
80
  assert @stream.verify
81
- assert @config.verify
82
81
  end
83
82
 
84
83
  def test_get_without_namespace_raises_error
@@ -86,14 +85,12 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
86
85
  query = %q{<query xmlns="jabber:iq:private"><one/></query>}
87
86
  node = node(%Q{<iq id="42" type="get">#{query}</iq>})
88
87
 
89
- @config.expect(:private_storage?, true, ['wonderland.lit'])
90
88
  @stream.expect(:domain, 'wonderland.lit')
91
89
  @stream.expect(:config, @config)
92
90
 
93
91
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
94
92
  assert_raises(Vines::StanzaErrors::NotAcceptable) { stanza.process }
95
93
  assert @stream.verify
96
- assert @config.verify
97
94
  end
98
95
 
99
96
  def test_get_missing_fragment_raises_error
@@ -104,7 +101,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
104
101
  storage = MiniTest::Mock.new
105
102
  storage.expect(:find_fragment, nil, [alice.jid, node.elements[0].elements[0]])
106
103
 
107
- @config.expect(:private_storage?, true, ['wonderland.lit'])
108
104
  @stream.expect(:domain, 'wonderland.lit')
109
105
  @stream.expect(:config, @config)
110
106
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -113,7 +109,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
113
109
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
114
110
  assert_raises(Vines::StanzaErrors::ItemNotFound) { stanza.process }
115
111
  assert @stream.verify
116
- assert @config.verify
117
112
  assert storage.verify
118
113
  end
119
114
 
@@ -129,7 +124,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
129
124
  storage = MiniTest::Mock.new
130
125
  storage.expect(:find_fragment, node(data), [alice.jid, node.elements[0].elements[0]])
131
126
 
132
- @config.expect(:private_storage?, true, ['wonderland.lit'])
133
127
  @stream.expect(:domain, 'wonderland.lit')
134
128
  @stream.expect(:config, @config)
135
129
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -139,7 +133,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
139
133
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
140
134
  stanza.process
141
135
  assert @stream.verify
142
- assert @config.verify
143
136
  assert storage.verify
144
137
  end
145
138
 
@@ -153,7 +146,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
153
146
 
154
147
  expected = node(%Q{<iq from="#{alice.jid}" id="42" to="#{alice.jid}" type="result"/>})
155
148
 
156
- @config.expect(:private_storage?, true, ['wonderland.lit'])
157
149
  @stream.expect(:domain, 'wonderland.lit')
158
150
  @stream.expect(:config, @config)
159
151
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -163,7 +155,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
163
155
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
164
156
  stanza.process
165
157
  assert @stream.verify
166
- assert @config.verify
167
158
  assert storage.verify
168
159
  end
169
160
 
@@ -178,7 +169,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
178
169
 
179
170
  expected = node(%Q{<iq from="#{alice.jid}" id="42" to="#{alice.jid}" type="result"/>})
180
171
 
181
- @config.expect(:private_storage?, true, ['wonderland.lit'])
182
172
  @stream.expect(:domain, 'wonderland.lit')
183
173
  @stream.expect(:config, @config)
184
174
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -188,7 +178,6 @@ class PrivateStorageTest < MiniTest::Unit::TestCase
188
178
  stanza = Vines::Stanza::Iq::PrivateStorage.new(node, @stream)
189
179
  stanza.process
190
180
  assert @stream.verify
191
- assert @config.verify
192
181
  assert storage.verify
193
182
  end
194
183
 
@@ -169,7 +169,7 @@ class RosterTest < MiniTest::Unit::TestCase
169
169
  @stream.expect(:update_user_streams, nil, [alice])
170
170
  @stream.expect(:domain, 'wonderland.lit')
171
171
  @stream.expect(:storage, storage, ['wonderland.lit'])
172
- expected = node(%q{<iq id="42" type="result"/>})
172
+ expected = node(%Q{<iq id="42" to="#{alice.jid}" type="result"/>})
173
173
  @stream.expect(:write, nil, [expected])
174
174
 
175
175
  node = node(%q{
@@ -8,14 +8,11 @@ class SessionTest < MiniTest::Unit::TestCase
8
8
  def test_session
9
9
  stream = MiniTest::Mock.new
10
10
  stream.expect(:domain, 'wonderland.lit')
11
- expected = node(%q{<iq from="wonderland.lit" id="42" type="result"/>})
11
+ stream.expect(:user, Vines::User.new(jid: 'alice@wonderland.lit/tea'))
12
+ expected = node(%q{<iq from="wonderland.lit" id="42" to="alice@wonderland.lit/tea" type="result"/>})
12
13
  stream.expect(:write, nil, [expected])
13
14
 
14
- node = node(
15
- %q{<iq id="42" to="wonderland.lit" type="set">
16
- <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
17
- </iq>})
18
-
15
+ node = node(%q{<iq id="42" type="set"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>})
19
16
  stanza = Vines::Stanza::Iq::Session.new(node, stream)
20
17
  stanza.process
21
18
  assert stream.verify
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -9,7 +10,8 @@ class VcardTest < MiniTest::Unit::TestCase
9
10
  @stream = MiniTest::Mock.new
10
11
  @config = Vines::Config.new do
11
12
  host 'wonderland.lit' do
12
- storage(:fs) { dir '.' }
13
+ cross_domain_messages true
14
+ storage(:fs) { dir Dir.tmpdir }
13
15
  end
14
16
  end
15
17
  end
@@ -40,6 +42,7 @@ class VcardTest < MiniTest::Unit::TestCase
40
42
  storage = MiniTest::Mock.new
41
43
  storage.expect(:find_vcard, card, [alice.jid.bare])
42
44
 
45
+ @stream.expect(:config, @config)
43
46
  @stream.expect(:user, alice)
44
47
  @stream.expect(:domain, 'wonderland.lit')
45
48
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -68,7 +71,6 @@ class VcardTest < MiniTest::Unit::TestCase
68
71
 
69
72
  @stream.expect(:config, @config)
70
73
  @stream.expect(:user, alice)
71
- @stream.expect(:domain, 'wonderland.lit')
72
74
  @stream.expect(:storage, storage, ['wonderland.lit'])
73
75
  expected = node(%q{
74
76
  <iq from="hatter@wonderland.lit" id="42" to="alice@wonderland.lit/tea" type="result">
@@ -91,6 +93,7 @@ class VcardTest < MiniTest::Unit::TestCase
91
93
  storage = MiniTest::Mock.new
92
94
  storage.expect(:find_vcard, nil, [alice.jid.bare])
93
95
 
96
+ @stream.expect(:config, @config)
94
97
  @stream.expect(:user, alice)
95
98
  @stream.expect(:domain, 'wonderland.lit')
96
99
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -121,6 +124,7 @@ class VcardTest < MiniTest::Unit::TestCase
121
124
  storage = MiniTest::Mock.new
122
125
  storage.expect(:save_vcard, nil, [alice.jid, card])
123
126
 
127
+ @stream.expect(:config, @config)
124
128
  @stream.expect(:user, alice)
125
129
  @stream.expect(:domain, 'wonderland.lit')
126
130
  @stream.expect(:storage, storage, ['wonderland.lit'])
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -9,7 +10,7 @@ class VersionTest < MiniTest::Unit::TestCase
9
10
  @stream = MiniTest::Mock.new
10
11
  @config = Vines::Config.new do
11
12
  host 'wonderland.lit' do
12
- storage(:fs) { dir '.' }
13
+ storage(:fs) { dir Dir.tmpdir }
13
14
  end
14
15
  end
15
16
  end
@@ -21,7 +22,6 @@ class VersionTest < MiniTest::Unit::TestCase
21
22
  router = MiniTest::Mock.new
22
23
  router.expect(:route, nil, [node])
23
24
 
24
- @stream.expect(:domain, 'wonderland.lit')
25
25
  @stream.expect(:config, @config)
26
26
  @stream.expect(:user, alice)
27
27
  @stream.expect(:router, router)
@@ -36,6 +36,7 @@ class VersionTest < MiniTest::Unit::TestCase
36
36
  alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
37
37
  node = node(%q{<iq id="42" type="get"><query xmlns="jabber:iq:version"/></iq>})
38
38
 
39
+ @stream.expect(:config, @config)
39
40
  @stream.expect(:user, alice)
40
41
  @stream.expect(:domain, 'wonderland.lit')
41
42
 
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -7,10 +8,9 @@ require 'minitest/autorun'
7
8
  class IqTest < MiniTest::Unit::TestCase
8
9
  def setup
9
10
  @stream = MiniTest::Mock.new
10
- @stream.expect(:domain, 'wonderland.lit')
11
- @config = Vines::Config.new do
11
+ @config = Vines::Config.new do
12
12
  host 'wonderland.lit' do
13
- storage(:fs) { dir '.' }
13
+ storage(:fs) { dir Dir.tmpdir }
14
14
  end
15
15
  end
16
16
  end
@@ -39,12 +39,12 @@ class IqTest < MiniTest::Unit::TestCase
39
39
  }.strip.gsub(/\n|\s{2,}/, ''))
40
40
 
41
41
  recipient = MiniTest::Mock.new
42
+ recipient.expect(:user, alice, [])
42
43
  recipient.expect(:write, nil, [node])
43
44
 
44
45
  @stream.expect(:config, @config)
45
46
  @stream.expect(:user, hatter)
46
- @stream.expect(:domain, 'wonderland.lit')
47
- @stream.expect(:available_resources, [recipient], [alice.jid.to_s])
47
+ @stream.expect(:connected_resources, [recipient], [alice.jid.to_s])
48
48
 
49
49
  stanza = Vines::Stanza::Iq.new(node, @stream)
50
50
  stanza.process
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -9,7 +10,7 @@ class MessageTest < MiniTest::Unit::TestCase
9
10
  @stream = MiniTest::Mock.new
10
11
  @config = Vines::Config.new do
11
12
  host 'wonderland.lit' do
12
- storage(:fs) { dir '.' }
13
+ storage(:fs) { dir Dir.tmpdir }
13
14
  end
14
15
  end
15
16
  end
@@ -82,7 +83,7 @@ class MessageTest < MiniTest::Unit::TestCase
82
83
  recipient.expect(:write, nil, [expected])
83
84
 
84
85
  @config.host 'verona.lit' do
85
- storage(:fs) { dir '.' }
86
+ storage(:fs) { dir Dir.tmpdir }
86
87
  end
87
88
 
88
89
  @stream.expect(:config, @config)
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'tmpdir'
3
4
  require 'vines'
4
5
  require 'ext/nokogiri'
5
6
  require 'minitest/autorun'
@@ -10,7 +11,7 @@ class ProbeTest < MiniTest::Unit::TestCase
10
11
  @stream = MiniTest::Mock.new
11
12
  @config = Vines::Config.new do
12
13
  host 'wonderland.lit' do
13
- storage(:fs) { dir '.' }
14
+ storage(:fs) { dir Dir.tmpdir }
14
15
  end
15
16
  end
16
17
  end