vines 0.2.1 → 0.3.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.
- data/README +1 -1
- data/Rakefile +10 -10
- data/conf/certs/ca-bundle.crt +112 -378
- data/conf/config.rb +18 -9
- data/lib/vines.rb +8 -1
- data/lib/vines/command/cert.rb +2 -1
- data/lib/vines/command/init.rb +11 -0
- data/lib/vines/command/ldap.rb +6 -3
- data/lib/vines/command/schema.rb +1 -1
- data/lib/vines/config.rb +57 -146
- data/lib/vines/config/host.rb +85 -0
- data/lib/vines/config/port.rb +111 -0
- data/lib/vines/contact.rb +1 -1
- data/lib/vines/jid.rb +26 -4
- data/lib/vines/kit.rb +6 -0
- data/lib/vines/log.rb +24 -0
- data/lib/vines/router.rb +70 -38
- data/lib/vines/stanza.rb +45 -8
- data/lib/vines/stanza/iq.rb +3 -3
- data/lib/vines/stanza/iq/disco_info.rb +5 -1
- data/lib/vines/stanza/iq/disco_items.rb +3 -0
- data/lib/vines/stanza/iq/private_storage.rb +9 -5
- data/lib/vines/stanza/iq/roster.rb +11 -12
- data/lib/vines/stanza/iq/vcard.rb +4 -4
- data/lib/vines/stanza/iq/version.rb +25 -0
- data/lib/vines/stanza/message.rb +4 -5
- data/lib/vines/stanza/presence.rb +20 -18
- data/lib/vines/stanza/presence/probe.rb +3 -4
- data/lib/vines/stanza/presence/subscribe.rb +4 -3
- data/lib/vines/stanza/presence/subscribed.rb +6 -5
- data/lib/vines/stanza/presence/unsubscribe.rb +4 -4
- data/lib/vines/stanza/presence/unsubscribed.rb +4 -3
- data/lib/vines/storage/couchdb.rb +3 -3
- data/lib/vines/storage/ldap.rb +19 -8
- data/lib/vines/storage/local.rb +23 -12
- data/lib/vines/storage/redis.rb +3 -3
- data/lib/vines/storage/sql.rb +5 -5
- data/lib/vines/stream.rb +40 -6
- data/lib/vines/stream/client.rb +5 -6
- data/lib/vines/stream/client/auth.rb +3 -2
- data/lib/vines/stream/client/bind.rb +2 -2
- data/lib/vines/stream/client/bind_restart.rb +1 -2
- data/lib/vines/stream/client/ready.rb +2 -0
- data/lib/vines/stream/client/session.rb +13 -4
- data/lib/vines/stream/client/tls.rb +1 -0
- data/lib/vines/stream/component.rb +6 -5
- data/lib/vines/stream/component/ready.rb +5 -6
- data/lib/vines/stream/http.rb +10 -4
- data/lib/vines/stream/http/request.rb +23 -2
- data/lib/vines/stream/server.rb +13 -11
- data/lib/vines/stream/server/outbound/auth_result.rb +1 -0
- data/lib/vines/stream/server/outbound/tls_result.rb +1 -0
- data/lib/vines/stream/server/ready.rb +2 -2
- data/lib/vines/user.rb +2 -1
- data/lib/vines/version.rb +1 -1
- data/test/config/host_test.rb +292 -0
- data/test/config_test.rb +244 -103
- data/test/contact_test.rb +7 -1
- data/test/jid_test.rb +48 -0
- data/test/router_test.rb +16 -47
- data/test/stanza/iq/disco_info_test.rb +76 -0
- data/test/stanza/iq/disco_items_test.rb +47 -0
- data/test/stanza/iq/private_storage_test.rb +33 -10
- data/test/stanza/iq/roster_test.rb +15 -5
- data/test/stanza/iq/vcard_test.rb +8 -25
- data/test/stanza/iq/version_test.rb +62 -0
- data/test/stanza/iq_test.rb +13 -10
- data/test/stanza/message_test.rb +16 -24
- data/test/stanza/presence/probe_test.rb +52 -0
- data/test/stanza/presence/subscribe_test.rb +1 -5
- data/test/stanza_test.rb +77 -0
- data/test/stream/client/auth_test.rb +1 -0
- data/test/stream/client/ready_test.rb +2 -0
- data/test/stream/client/session_test.rb +7 -2
- data/test/stream/component/ready_test.rb +19 -36
- data/test/stream/http/request_test.rb +22 -2
- data/test/stream/server/ready_test.rb +14 -21
- data/web/404.html +9 -3
- data/web/chat/index.html +2 -2
- data/web/chat/javascripts/app.js +1 -1
- data/web/chat/stylesheets/chat.css +4 -9
- data/web/lib/coffeescripts/layout.coffee +2 -2
- data/web/{chat → lib}/coffeescripts/logout.coffee +0 -0
- data/web/lib/coffeescripts/notification.coffee +14 -0
- data/web/lib/coffeescripts/session.coffee +28 -24
- data/web/lib/coffeescripts/transfer.coffee +37 -34
- data/web/lib/javascripts/base.js +8 -8
- data/web/lib/javascripts/icons.js +3 -0
- data/web/lib/javascripts/jquery.js +4 -18
- data/web/lib/javascripts/layout.js +2 -2
- data/web/{chat → lib}/javascripts/logout.js +0 -0
- data/web/lib/javascripts/notification.js +26 -0
- data/web/lib/javascripts/session.js +20 -16
- data/web/lib/javascripts/transfer.js +45 -55
- data/web/lib/stylesheets/base.css +45 -9
- metadata +31 -15
@@ -48,6 +48,20 @@ class RosterTest < MiniTest::Unit::TestCase
|
|
48
48
|
assert @stream.verify
|
49
49
|
end
|
50
50
|
|
51
|
+
def test_roster_get_with_invalid_to_address
|
52
|
+
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
53
|
+
@stream.expect(:user, alice)
|
54
|
+
|
55
|
+
node = node(%q{
|
56
|
+
<iq id="42" type="get" to="romeo@verona.lit">
|
57
|
+
<query xmlns="jabber:iq:roster"/>
|
58
|
+
</iq>}.strip.gsub(/\n|\s{2,}/, ''))
|
59
|
+
|
60
|
+
stanza = Vines::Stanza::Iq::Roster.new(node, @stream)
|
61
|
+
assert_raises(Vines::StanzaErrors::Forbidden) { stanza.process }
|
62
|
+
assert @stream.verify
|
63
|
+
end
|
64
|
+
|
51
65
|
def test_roster_set_with_invalid_to_address
|
52
66
|
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
53
67
|
@stream.expect(:user, alice)
|
@@ -150,12 +164,9 @@ class RosterTest < MiniTest::Unit::TestCase
|
|
150
164
|
@nodes << node
|
151
165
|
end
|
152
166
|
|
153
|
-
router = MiniTest::Mock.new
|
154
|
-
router.expect(:interested_resources, [recipient], [alice.jid])
|
155
|
-
|
156
167
|
@stream.expect(:user, alice)
|
168
|
+
@stream.expect(:interested_resources, [recipient], [alice.jid])
|
157
169
|
@stream.expect(:update_user_streams, nil, [alice])
|
158
|
-
@stream.expect(:router, router)
|
159
170
|
@stream.expect(:domain, 'wonderland.lit')
|
160
171
|
@stream.expect(:storage, storage, ['wonderland.lit'])
|
161
172
|
expected = node(%q{<iq id="42" type="result"/>})
|
@@ -174,7 +185,6 @@ class RosterTest < MiniTest::Unit::TestCase
|
|
174
185
|
stanza.process
|
175
186
|
assert @stream.verify
|
176
187
|
assert storage.verify
|
177
|
-
assert router.verify
|
178
188
|
|
179
189
|
expected = node(%q{
|
180
190
|
<iq to="alice@wonderland.lit/tea" type="set">
|
@@ -7,6 +7,11 @@ require 'minitest/autorun'
|
|
7
7
|
class VcardTest < MiniTest::Unit::TestCase
|
8
8
|
def setup
|
9
9
|
@stream = MiniTest::Mock.new
|
10
|
+
@config = Vines::Config.new do
|
11
|
+
host 'wonderland.lit' do
|
12
|
+
storage(:fs) { dir '.' }
|
13
|
+
end
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
def test_vcard_get_on_remote_jid_routes
|
@@ -14,9 +19,9 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
14
19
|
node = node(%q{<iq id="42" to="romeo@verona.lit" type="get"><vCard xmlns="vcard-temp"/></iq>})
|
15
20
|
|
16
21
|
router = MiniTest::Mock.new
|
17
|
-
router.expect(:local?, false, [node])
|
18
22
|
router.expect(:route, nil, [node])
|
19
23
|
|
24
|
+
@stream.expect(:config, @config)
|
20
25
|
@stream.expect(:user, alice)
|
21
26
|
@stream.expect(:router, router)
|
22
27
|
|
@@ -30,16 +35,12 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
30
35
|
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
31
36
|
node = node(%q{<iq id="42" type="get"><vCard xmlns="vcard-temp"/></iq>})
|
32
37
|
|
33
|
-
router = MiniTest::Mock.new
|
34
|
-
router.expect(:local?, true, [node])
|
35
|
-
|
36
38
|
card = node(%q{<vCard xmlns="vcard-temp"><FN>Alice in Wonderland</FN></vCard>})
|
37
39
|
|
38
40
|
storage = MiniTest::Mock.new
|
39
41
|
storage.expect(:find_vcard, card, [alice.jid.bare])
|
40
42
|
|
41
43
|
@stream.expect(:user, alice)
|
42
|
-
@stream.expect(:router, router)
|
43
44
|
@stream.expect(:domain, 'wonderland.lit')
|
44
45
|
@stream.expect(:storage, storage, ['wonderland.lit'])
|
45
46
|
expected = node(%q{
|
@@ -53,7 +54,6 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
53
54
|
stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
|
54
55
|
stanza.process
|
55
56
|
assert @stream.verify
|
56
|
-
assert router.verify
|
57
57
|
assert storage.verify
|
58
58
|
end
|
59
59
|
|
@@ -61,16 +61,13 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
61
61
|
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
62
62
|
node = node(%q{<iq id="42" to="hatter@wonderland.lit" type="get"><vCard xmlns="vcard-temp"/></iq>})
|
63
63
|
|
64
|
-
router = MiniTest::Mock.new
|
65
|
-
router.expect(:local?, true, [node])
|
66
|
-
|
67
64
|
card = node(%q{<vCard xmlns="vcard-temp"><FN>Mad Hatter</FN></vCard>})
|
68
65
|
|
69
66
|
storage = MiniTest::Mock.new
|
70
67
|
storage.expect(:find_vcard, card, [Vines::JID.new('hatter@wonderland.lit')])
|
71
68
|
|
69
|
+
@stream.expect(:config, @config)
|
72
70
|
@stream.expect(:user, alice)
|
73
|
-
@stream.expect(:router, router)
|
74
71
|
@stream.expect(:domain, 'wonderland.lit')
|
75
72
|
@stream.expect(:storage, storage, ['wonderland.lit'])
|
76
73
|
expected = node(%q{
|
@@ -84,7 +81,6 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
84
81
|
stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
|
85
82
|
stanza.process
|
86
83
|
assert @stream.verify
|
87
|
-
assert router.verify
|
88
84
|
assert storage.verify
|
89
85
|
end
|
90
86
|
|
@@ -92,21 +88,16 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
92
88
|
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
93
89
|
node = node(%q{<iq id="42" type="get"><vCard xmlns="vcard-temp"/></iq>})
|
94
90
|
|
95
|
-
router = MiniTest::Mock.new
|
96
|
-
router.expect(:local?, true, [node])
|
97
|
-
|
98
91
|
storage = MiniTest::Mock.new
|
99
92
|
storage.expect(:find_vcard, nil, [alice.jid.bare])
|
100
93
|
|
101
94
|
@stream.expect(:user, alice)
|
102
|
-
@stream.expect(:router, router)
|
103
95
|
@stream.expect(:domain, 'wonderland.lit')
|
104
96
|
@stream.expect(:storage, storage, ['wonderland.lit'])
|
105
97
|
|
106
98
|
stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
|
107
99
|
assert_raises(Vines::StanzaErrors::ItemNotFound) { stanza.process }
|
108
100
|
assert @stream.verify
|
109
|
-
assert router.verify
|
110
101
|
assert storage.verify
|
111
102
|
end
|
112
103
|
|
@@ -114,11 +105,8 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
114
105
|
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
115
106
|
node = node(%q{<iq id="42" to="hatter@wonderland.lit" type="set"><vCard xmlns="vcard-temp"><FN>Alice</FN></vCard></iq>})
|
116
107
|
|
117
|
-
|
118
|
-
router.expect(:local?, true, [node])
|
119
|
-
|
108
|
+
@stream.expect(:config, @config)
|
120
109
|
@stream.expect(:user, alice)
|
121
|
-
@stream.expect(:router, router)
|
122
110
|
|
123
111
|
stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
|
124
112
|
assert_raises(Vines::StanzaErrors::Forbidden) { stanza.process }
|
@@ -130,14 +118,10 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
130
118
|
node = node(%q{<iq id="42" type="set"><vCard xmlns="vcard-temp"><FN>Alice</FN></vCard></iq>})
|
131
119
|
card = node(%q{<vCard xmlns="vcard-temp"><FN>Alice</FN></vCard>})
|
132
120
|
|
133
|
-
router = MiniTest::Mock.new
|
134
|
-
router.expect(:local?, true, [node])
|
135
|
-
|
136
121
|
storage = MiniTest::Mock.new
|
137
122
|
storage.expect(:save_vcard, nil, [alice.jid, card])
|
138
123
|
|
139
124
|
@stream.expect(:user, alice)
|
140
|
-
@stream.expect(:router, router)
|
141
125
|
@stream.expect(:domain, 'wonderland.lit')
|
142
126
|
@stream.expect(:storage, storage, ['wonderland.lit'])
|
143
127
|
expected = node(%q{<iq id="42" to="alice@wonderland.lit/tea" type="result"/>})
|
@@ -146,7 +130,6 @@ class VcardTest < MiniTest::Unit::TestCase
|
|
146
130
|
stanza = Vines::Stanza::Iq::Vcard.new(node, @stream)
|
147
131
|
stanza.process
|
148
132
|
assert @stream.verify
|
149
|
-
assert router.verify
|
150
133
|
assert storage.verify
|
151
134
|
end
|
152
135
|
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'vines'
|
4
|
+
require 'ext/nokogiri'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
|
7
|
+
class VersionTest < MiniTest::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@stream = MiniTest::Mock.new
|
10
|
+
@config = Vines::Config.new do
|
11
|
+
host 'wonderland.lit' do
|
12
|
+
storage(:fs) { dir '.' }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_to_address_routes
|
18
|
+
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
19
|
+
node = node(%q{<iq id="42" to="romeo@verona.lit" type="get"><query xmlns="jabber:iq:version"/></iq>})
|
20
|
+
|
21
|
+
router = MiniTest::Mock.new
|
22
|
+
router.expect(:route, nil, [node])
|
23
|
+
|
24
|
+
@stream.expect(:domain, 'wonderland.lit')
|
25
|
+
@stream.expect(:config, @config)
|
26
|
+
@stream.expect(:user, alice)
|
27
|
+
@stream.expect(:router, router)
|
28
|
+
|
29
|
+
stanza = Vines::Stanza::Iq::Version.new(node, @stream)
|
30
|
+
stanza.process
|
31
|
+
assert @stream.verify
|
32
|
+
assert router.verify
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_version_get_returns_result
|
36
|
+
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
37
|
+
node = node(%q{<iq id="42" type="get"><query xmlns="jabber:iq:version"/></iq>})
|
38
|
+
|
39
|
+
@stream.expect(:user, alice)
|
40
|
+
@stream.expect(:domain, 'wonderland.lit')
|
41
|
+
|
42
|
+
expected = node(%Q{
|
43
|
+
<iq from="wonderland.lit" id="42" to="alice@wonderland.lit/tea" type="result">
|
44
|
+
<query xmlns="jabber:iq:version">
|
45
|
+
<name>Vines</name>
|
46
|
+
<version>#{Vines::VERSION}</version>
|
47
|
+
</query>
|
48
|
+
</iq>}.strip.gsub(/\n|\s{2,}/, ''))
|
49
|
+
|
50
|
+
@stream.expect(:write, nil, [expected])
|
51
|
+
|
52
|
+
stanza = Vines::Stanza::Iq::Version.new(node, @stream)
|
53
|
+
stanza.process
|
54
|
+
assert @stream.verify
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def node(xml)
|
60
|
+
Nokogiri::XML(xml).root
|
61
|
+
end
|
62
|
+
end
|
data/test/stanza/iq_test.rb
CHANGED
@@ -8,8 +8,13 @@ class IqTest < MiniTest::Unit::TestCase
|
|
8
8
|
def setup
|
9
9
|
@stream = MiniTest::Mock.new
|
10
10
|
@stream.expect(:domain, 'wonderland.lit')
|
11
|
+
@config = Vines::Config.new do
|
12
|
+
host 'wonderland.lit' do
|
13
|
+
storage(:fs) { dir '.' }
|
14
|
+
end
|
15
|
+
end
|
11
16
|
end
|
12
|
-
|
17
|
+
|
13
18
|
def test_allow_other_iq_to_route
|
14
19
|
alice = Vines::User.new(:jid => 'alice@wonderland.lit/tea')
|
15
20
|
hatter = Vines::User.new(:jid => 'hatter@wonderland.lit/crumpets')
|
@@ -30,31 +35,29 @@ class IqTest < MiniTest::Unit::TestCase
|
|
30
35
|
</x>
|
31
36
|
</feature>
|
32
37
|
</si>
|
33
|
-
</iq>
|
38
|
+
</iq>
|
39
|
+
}.strip.gsub(/\n|\s{2,}/, ''))
|
34
40
|
|
35
41
|
recipient = MiniTest::Mock.new
|
36
42
|
recipient.expect(:write, nil, [node])
|
37
43
|
|
38
|
-
|
39
|
-
router.expect(:available_resources, [recipient], [alice.jid])
|
40
|
-
router.expect(:local?, true, [node])
|
41
|
-
|
44
|
+
@stream.expect(:config, @config)
|
42
45
|
@stream.expect(:user, hatter)
|
43
|
-
@stream.expect(:router, router)
|
44
46
|
@stream.expect(:domain, 'wonderland.lit')
|
47
|
+
@stream.expect(:available_resources, [recipient], [alice.jid.to_s])
|
45
48
|
|
46
49
|
stanza = Vines::Stanza::Iq.new(node, @stream)
|
47
50
|
stanza.process
|
48
51
|
assert @stream.verify
|
49
52
|
assert recipient.verify
|
50
53
|
end
|
51
|
-
|
54
|
+
|
52
55
|
def test_feature_not_implemented
|
53
|
-
node = node('<iq type="set" id="42"
|
56
|
+
node = node('<iq type="set" id="42"/>')
|
54
57
|
stanza = Vines::Stanza::Iq.new(node, @stream)
|
55
58
|
assert_raises(Vines::StanzaErrors::FeatureNotImplemented) { stanza.process }
|
56
59
|
end
|
57
|
-
|
60
|
+
|
58
61
|
private
|
59
62
|
|
60
63
|
def node(xml)
|
data/test/stanza/message_test.rb
CHANGED
@@ -7,6 +7,11 @@ require 'minitest/autorun'
|
|
7
7
|
class MessageTest < MiniTest::Unit::TestCase
|
8
8
|
def setup
|
9
9
|
@stream = MiniTest::Mock.new
|
10
|
+
@config = Vines::Config.new do
|
11
|
+
host 'wonderland.lit' do
|
12
|
+
storage(:fs) { dir '.' }
|
13
|
+
end
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
def test_bad_type_returns_error
|
@@ -23,17 +28,12 @@ class MessageTest < MiniTest::Unit::TestCase
|
|
23
28
|
recipient.expect(:user, alice)
|
24
29
|
recipient.expect(:write, nil, [node])
|
25
30
|
|
26
|
-
router = MiniTest::Mock.new
|
27
|
-
router.expect(:local?, true, [node])
|
28
|
-
router.expect(:connected_resources, [recipient], [alice.jid.bare])
|
29
|
-
|
30
|
-
@stream.expect(:router, router)
|
31
31
|
@stream.expect(:user, alice)
|
32
|
+
@stream.expect(:connected_resources, [recipient], [alice.jid.bare])
|
32
33
|
|
33
34
|
stanza = Vines::Stanza::Message.new(node, @stream)
|
34
35
|
stanza.process
|
35
36
|
assert @stream.verify
|
36
|
-
assert router.verify
|
37
37
|
assert recipient.verify
|
38
38
|
end
|
39
39
|
|
@@ -41,20 +41,16 @@ class MessageTest < MiniTest::Unit::TestCase
|
|
41
41
|
bogus = Vines::JID.new('bogus@wonderland.lit/cake')
|
42
42
|
node = node(%Q{<message to="#{bogus}">hello!</message>})
|
43
43
|
|
44
|
-
router = MiniTest::Mock.new
|
45
|
-
router.expect(:local?, true, [node])
|
46
|
-
router.expect(:connected_resources, [], [bogus])
|
47
|
-
|
48
44
|
storage = MiniTest::Mock.new
|
49
45
|
storage.expect(:find_user, nil, [bogus])
|
50
46
|
|
51
|
-
@stream.expect(:
|
47
|
+
@stream.expect(:config, @config)
|
52
48
|
@stream.expect(:storage, storage, [bogus.domain])
|
49
|
+
@stream.expect(:connected_resources, [], [bogus])
|
53
50
|
|
54
51
|
stanza = Vines::Stanza::Message.new(node, @stream)
|
55
52
|
stanza.process
|
56
53
|
assert @stream.verify
|
57
|
-
assert router.verify
|
58
54
|
assert storage.verify
|
59
55
|
end
|
60
56
|
|
@@ -62,20 +58,16 @@ class MessageTest < MiniTest::Unit::TestCase
|
|
62
58
|
hatter = Vines::User.new(:jid => 'hatter@wonderland.lit/cake')
|
63
59
|
node = node(%Q{<message to="#{hatter.jid}">hello!</message>})
|
64
60
|
|
65
|
-
router = MiniTest::Mock.new
|
66
|
-
router.expect(:local?, true, [node])
|
67
|
-
router.expect(:connected_resources, [], [hatter.jid])
|
68
|
-
|
69
61
|
storage = MiniTest::Mock.new
|
70
62
|
storage.expect(:find_user, hatter, [hatter.jid])
|
71
63
|
|
72
|
-
@stream.expect(:
|
64
|
+
@stream.expect(:config, @config)
|
73
65
|
@stream.expect(:storage, storage, [hatter.jid.domain])
|
66
|
+
@stream.expect(:connected_resources, [], [hatter.jid])
|
74
67
|
|
75
68
|
stanza = Vines::Stanza::Message.new(node, @stream)
|
76
69
|
assert_raises(Vines::StanzaErrors::ServiceUnavailable) { stanza.process }
|
77
70
|
assert @stream.verify
|
78
|
-
assert router.verify
|
79
71
|
assert storage.verify
|
80
72
|
end
|
81
73
|
|
@@ -89,17 +81,17 @@ class MessageTest < MiniTest::Unit::TestCase
|
|
89
81
|
recipient.expect(:user, romeo)
|
90
82
|
recipient.expect(:write, nil, [expected])
|
91
83
|
|
92
|
-
|
93
|
-
|
94
|
-
|
84
|
+
@config.host 'verona.lit' do
|
85
|
+
storage(:fs) { dir '.' }
|
86
|
+
end
|
95
87
|
|
96
|
-
@stream.expect(:
|
88
|
+
@stream.expect(:config, @config)
|
97
89
|
@stream.expect(:user, alice)
|
90
|
+
@stream.expect(:connected_resources, [recipient], [romeo.jid])
|
98
91
|
|
99
92
|
stanza = Vines::Stanza::Message.new(node, @stream)
|
100
93
|
stanza.process
|
101
94
|
assert @stream.verify
|
102
|
-
assert router.verify
|
103
95
|
assert recipient.verify
|
104
96
|
end
|
105
97
|
|
@@ -110,7 +102,7 @@ class MessageTest < MiniTest::Unit::TestCase
|
|
110
102
|
expected = node(%Q{<message to="#{romeo.jid}" from="#{alice.jid}">hello!</message>})
|
111
103
|
|
112
104
|
router = MiniTest::Mock.new
|
113
|
-
|
105
|
+
@stream.expect(:config, @config)
|
114
106
|
router.expect(:route, nil, [expected])
|
115
107
|
|
116
108
|
@stream.expect(:router, router)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'vines'
|
4
|
+
require 'ext/nokogiri'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
|
7
|
+
class ProbeTest < MiniTest::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@alice = Vines::JID.new('alice@wonderland.lit/tea')
|
10
|
+
@stream = MiniTest::Mock.new
|
11
|
+
@config = Vines::Config.new do
|
12
|
+
host 'wonderland.lit' do
|
13
|
+
storage(:fs) { dir '.' }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_missing_to_address_raises
|
19
|
+
node = node(%q{<presence id="42" type="probe"/>})
|
20
|
+
stanza = Vines::Stanza::Presence::Probe.new(node, @stream)
|
21
|
+
def stanza.inbound?; false; end
|
22
|
+
|
23
|
+
@stream.expect(:user, Vines::User.new(jid: @alice))
|
24
|
+
|
25
|
+
assert_raises(Vines::StanzaErrors::BadRequest) { stanza.process }
|
26
|
+
assert @stream.verify
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_to_remote_address_routes
|
30
|
+
node = node(%q{<presence id="42" to="romeo@verona.lit" type="probe"/>})
|
31
|
+
stanza = Vines::Stanza::Presence::Probe.new(node, @stream)
|
32
|
+
def stanza.inbound?; false; end
|
33
|
+
|
34
|
+
expected = node(%Q{<presence id="42" to="romeo@verona.lit" type="probe" from="#{@alice}"/>})
|
35
|
+
router = MiniTest::Mock.new
|
36
|
+
router.expect(:route, nil, [expected])
|
37
|
+
|
38
|
+
@stream.expect(:router, router)
|
39
|
+
@stream.expect(:user, Vines::User.new(jid: @alice))
|
40
|
+
@stream.expect(:config, @config)
|
41
|
+
|
42
|
+
stanza.process
|
43
|
+
assert @stream.verify
|
44
|
+
assert router.verify
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def node(xml)
|
50
|
+
Nokogiri::XML(xml).root
|
51
|
+
end
|
52
|
+
end
|