vines 0.3.2 → 0.4.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.
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