diaspora-vines 0.2.0.develop.2 → 0.2.0.develop.3

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.
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'test_helper'
3
+ require "test_helper"
4
4
 
5
5
  describe Vines::Stream::Server::Auth do
6
6
  # disable logging for tests
@@ -13,49 +13,58 @@ describe Vines::Stream::Server::Auth do
13
13
  class << stream
14
14
  attr_accessor :remote_domain
15
15
  end
16
- stream.remote_domain = 'wonderland.lit'
16
+ stream.remote_domain = "wonderland.lit"
17
17
  end
18
18
 
19
- describe 'when given a valid authzid' do
19
+ describe "when given a valid authzid" do
20
20
  before do
21
- stream.expect :cert_domain_matches?, true, ['wonderland.lit']
22
- stream.expect :write, nil, ['<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>']
21
+ stream.expect :cert_domain_matches?, true, ["wonderland.lit"]
22
+ stream.expect :write, nil, [%(<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>)]
23
23
  stream.expect :advance, nil, [Vines::Stream::Server::FinalRestart]
24
24
  stream.expect :reset, nil
25
- stream.expect :authentication_mechanisms, ['EXTERNAL']
25
+ stream.expect :authentication_mechanisms, ["EXTERNAL"]
26
26
  end
27
27
 
28
- it 'passes external auth with empty authzid' do
29
- node = external('=')
30
- subject.node(node)
31
- stream.verify
28
+ it "passes external auth with empty authzid" do
29
+ EM.run {
30
+ node = external("=")
31
+ subject.node(node)
32
+ stream.verify
33
+ EM.stop
34
+ }
32
35
  end
33
36
 
34
- it 'passes external auth with authzid matching from domain' do
35
- node = external(Base64.strict_encode64('wonderland.lit'))
36
- subject.node(node)
37
- stream.verify
37
+ it "passes external auth with authzid matching from domain" do
38
+ EM.run {
39
+ node = external(Base64.strict_encode64("wonderland.lit"))
40
+ subject.node(node)
41
+ stream.verify
42
+ EM.stop
43
+ }
38
44
  end
39
45
  end
40
46
 
41
- describe 'when given an invalid authzid' do
47
+ describe "when given an invalid authzid" do
42
48
  before do
43
- stream.expect :write, nil, ['</stream:stream>']
49
+ stream.expect :write, nil, ["</stream:stream>"]
44
50
  stream.expect :close_connection_after_writing, nil
45
51
  stream.expect :error, nil, [Vines::SaslErrors::InvalidAuthzid]
46
- stream.expect :authentication_mechanisms, ['EXTERNAL']
52
+ stream.expect :authentication_mechanisms, ["EXTERNAL"]
47
53
  end
48
54
 
49
- it 'fails external auth with mismatched from domain' do
50
- node = external(Base64.strict_encode64('verona.lit'))
51
- subject.node(node)
52
- stream.verify
55
+ it "fails external auth with mismatched from domain" do
56
+ EM.run {
57
+ node = external(Base64.strict_encode64("verona.lit"))
58
+ subject.node(node)
59
+ stream.verify
60
+ EM.stop
61
+ }
53
62
  end
54
63
  end
55
64
 
56
65
  private
57
66
 
58
67
  def external(authzid)
59
- node(%Q{<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="EXTERNAL">#{authzid}</auth>})
68
+ node(%(<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="EXTERNAL">#{authzid}</auth>))
60
69
  end
61
70
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'test_helper'
3
+ require "test_helper"
4
4
 
5
5
  describe Vines::Stream::Server::Outbound::AuthDialbackResult do
6
6
  before do
@@ -9,24 +9,39 @@ describe Vines::Stream::Server::Outbound::AuthDialbackResult do
9
9
  end
10
10
 
11
11
  def test_invalid_stanza
12
- node = node('<message/>')
13
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
14
- assert @stream.verify
12
+ EM.run {
13
+ node = node("<message/>")
14
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
15
+ assert @stream.verify
16
+ EM.stop
17
+ }
15
18
  end
16
19
 
17
20
  def test_invalid_result
18
- node = node(%Q{<db:result xmlns:db="#{Vines::NAMESPACES[:legacy_dialback]}" from="remote.host" to="local.host" type="invalid"/>})
19
- @stream.expect(:close_connection, nil)
20
- @state.node(node)
21
- assert @stream.verify
21
+ EM.run {
22
+ node = node(
23
+ %(<db:result xmlns:db="#{Vines::NAMESPACES[:legacy_dialback]}" ) +
24
+ %(from="remote.host" to="local.host" type="invalid"/>)
25
+ )
26
+ @stream.expect(:close_connection, nil)
27
+ @state.node(node)
28
+ assert @stream.verify
29
+ EM.stop
30
+ }
22
31
  end
23
32
 
24
33
  def test_valid_result
25
- node = node(%Q{<db:result xmlns:db="#{Vines::NAMESPACES[:legacy_dialback]}" from="remote.host" to="local.host" type="valid"/>})
26
- @stream.expect(:advance, nil, [Vines::Stream::Server::Ready])
27
- @stream.expect(:notify_connected, nil)
28
- @state.node(node)
29
- assert @stream.verify
34
+ EM.run {
35
+ node = node(
36
+ %(<db:result xmlns:db="#{Vines::NAMESPACES[:legacy_dialback]}" ) +
37
+ %(from="remote.host" to="local.host" type="valid"/>)
38
+ )
39
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Ready])
40
+ @stream.expect(:notify_connected, nil)
41
+ @state.node(node)
42
+ assert @stream.verify
43
+ EM.stop
44
+ }
30
45
  end
31
46
 
32
47
  private
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'test_helper'
3
+ require "test_helper"
4
4
 
5
5
  describe Vines::Stream::Server::Outbound::AuthExternal do
6
6
  before do
@@ -9,62 +9,92 @@ describe Vines::Stream::Server::Outbound::AuthExternal do
9
9
  end
10
10
 
11
11
  def test_invalid_element
12
- node = node('<message/>')
13
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
12
+ EM.run {
13
+ node = node("<message/>")
14
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
15
+ EM.stop
16
+ }
14
17
  end
15
18
 
16
19
  def test_invalid_sasl_element
17
- node = node(%Q{<message xmlns="#{Vines::NAMESPACES[:sasl]}"/>})
18
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
20
+ EM.run {
21
+ node = node(%(<message xmlns="#{Vines::NAMESPACES[:sasl]}"/>))
22
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
23
+ EM.stop
24
+ }
19
25
  end
20
26
 
21
27
  def test_missing_namespace
22
- node = node('<stream:features/>')
23
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
28
+ EM.run {
29
+ node = node("<stream:features/>")
30
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
31
+ EM.stop
32
+ }
24
33
  end
25
34
 
26
35
  def test_invalid_namespace
27
- node = node('<stream:features xmlns="bogus"/>')
28
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
36
+ EM.run {
37
+ node = node(%(<stream:features xmlns="bogus"/>))
38
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
39
+ EM.stop
40
+ }
29
41
  end
30
42
 
31
43
  def test_missing_mechanisms
32
- node = node(%Q{<stream:features xmlns:stream="http://etherx.jabber.org/streams"/>})
33
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
44
+ EM.run {
45
+ node = node(%(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}"/>))
46
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
47
+ EM.stop
48
+ }
34
49
  end
35
50
 
36
51
  def test_missing_mechanisms_namespace
37
- node = node(%Q{<stream:features xmlns:stream="http://etherx.jabber.org/streams"><mechanisms/></stream:features>})
38
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
52
+ EM.run {
53
+ node = node(%(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}"><mechanisms/></stream:features>))
54
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
55
+ EM.stop
56
+ }
39
57
  end
40
58
 
41
59
  def test_missing_mechanism
42
- mechanisms = %q{<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>}
43
- node = node(%Q{<stream:features xmlns:stream="http://etherx.jabber.org/streams">#{mechanisms}</stream:features>})
44
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
60
+ EM.run {
61
+ mechanisms = %(<mechanisms xmlns="#{Vines::NAMESPACES[:sasl]}"/>)
62
+ node = node(%(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}">#{mechanisms}</stream:features>))
63
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
64
+ EM.stop
65
+ }
45
66
  end
46
67
 
47
68
  def test_missing_mechanism_text
48
- mechanisms = %q{<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism></mechanism></mechanisms>}
49
- node = node(%Q{<stream:features xmlns:stream="http://etherx.jabber.org/streams">#{mechanisms}</stream:features>})
50
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
69
+ EM.run {
70
+ mechanisms = %(<mechanisms xmlns="#{Vines::NAMESPACES[:sasl]}"><mechanism></mechanism></mechanisms>)
71
+ node = node(%(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}">#{mechanisms}</stream:features>))
72
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
73
+ EM.stop
74
+ }
51
75
  end
52
76
 
53
77
  def test_invalid_mechanism_text
54
- mechanisms = %q{<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>BOGUS</mechanism></mechanisms>}
55
- node = node(%Q{<stream:features xmlns:stream="http://etherx.jabber.org/streams">#{mechanisms}</stream:features>})
56
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
78
+ EM.run {
79
+ mechanisms = %(<mechanisms xmlns="#{Vines::NAMESPACES[:sasl]}"><mechanism>BOGUS</mechanism></mechanisms>)
80
+ node = node(%(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}">#{mechanisms}</stream:features>))
81
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
82
+ EM.stop
83
+ }
57
84
  end
58
85
 
59
86
  def test_valid_mechanism
60
- @stream.expect(:domain, 'wonderland.lit')
61
- expected = %Q{<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="EXTERNAL">d29uZGVybGFuZC5saXQ=</auth>}
62
- @stream.expect(:write, nil, [expected])
63
- @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::AuthExternalResult.new(@stream)])
64
- mechanisms = %q{<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>EXTERNAL</mechanism></mechanisms>}
65
- node = node(%Q{<stream:features xmlns:stream="http://etherx.jabber.org/streams">#{mechanisms}</stream:features>})
66
- @state.node(node)
67
- assert @stream.verify
87
+ EM.run {
88
+ @stream.expect(:domain, "wonderland.lit")
89
+ expected = %(<auth xmlns="#{Vines::NAMESPACES[:sasl]}" mechanism="EXTERNAL">d29uZGVybGFuZC5saXQ=</auth>)
90
+ @stream.expect(:write, nil, [expected])
91
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::AuthExternalResult.new(@stream)])
92
+ mechanisms = %(<mechanisms xmlns="#{Vines::NAMESPACES[:sasl]}"><mechanism>EXTERNAL</mechanism></mechanisms>)
93
+ node = node(%(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}">#{mechanisms}</stream:features>))
94
+ @state.node(node)
95
+ assert @stream.verify
96
+ EM.stop
97
+ }
68
98
  end
69
99
 
70
100
  private
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'test_helper'
3
+ require "test_helper"
4
4
 
5
5
  describe Vines::Stream::Server::Outbound::AuthRestart do
6
6
  before do
@@ -9,40 +9,64 @@ describe Vines::Stream::Server::Outbound::AuthRestart do
9
9
  end
10
10
 
11
11
  def test_missing_namespace
12
- node = node('<stream:stream/>')
13
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
14
- assert @stream.verify
12
+ EM.run {
13
+ node = node("<stream:stream/>")
14
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
15
+ assert @stream.verify
16
+ EM.stop
17
+ }
15
18
  end
16
19
 
17
20
  def test_invalid_namespace
18
- node = node(%Q{<stream:stream xmlns="#{Vines::NAMESPACES[:stream]}"/>})
19
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
21
+ EM.run {
22
+ node = node(%(<stream:stream xmlns="#{Vines::NAMESPACES[:stream]}"/>))
23
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
24
+ EM.stop
25
+ }
20
26
  end
21
27
 
22
28
  def test_valid_stream
23
- node = node(%Q{<stream:stream xmlns='jabber:client' xmlns:stream='#{Vines::NAMESPACES[:stream]}' xml:lang='en' id='1234' from='host.com' version='1.0'>})
24
- @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::AuthExternal])
25
- @stream.expect(:dialback_retry?, false)
26
- @state.node(node)
27
- assert @stream.verify
29
+ EM.run {
30
+ node = node(
31
+ %(<stream:stream xmlns="jabber:client" xmlns:stream="#{Vines::NAMESPACES[:stream]}" ) +
32
+ %(xml:lang="en" id="1234" from="host.com" version="1.0">)
33
+ )
34
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::AuthExternal])
35
+ @stream.expect(:dialback_retry?, false)
36
+ @state.node(node)
37
+ assert @stream.verify
38
+ EM.stop
39
+ }
28
40
  end
29
41
 
30
42
  def test_valid_stream_restart
31
- node = node(%Q{<stream:stream xmlns='jabber:client' xmlns:stream='#{Vines::NAMESPACES[:stream]}' xml:lang='en' id='1234' from='host.com' version='1.0'>})
32
- @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::Auth])
33
- @stream.expect(:outbound_tls_required?, false)
34
- @stream.expect(:dialback_retry?, true)
35
- @state.node(node)
36
- assert @stream.verify
43
+ EM.run {
44
+ node = node(
45
+ %(<stream:stream xmlns="jabber:client" xmlns:stream="#{Vines::NAMESPACES[:stream]}" ) +
46
+ %(xml:lang="en" id="1234" from="host.com" version="1.0">)
47
+ )
48
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::Auth])
49
+ @stream.expect(:outbound_tls_required?, false)
50
+ @stream.expect(:dialback_retry?, true)
51
+ @state.node(node)
52
+ assert @stream.verify
53
+ EM.stop
54
+ }
37
55
  end
38
56
 
39
57
  def test_valid_stream_required_tls
40
- node = node(%Q{<stream:stream xmlns='jabber:client' xmlns:stream='#{Vines::NAMESPACES[:stream]}' xml:lang='en' id='1234' from='host.com' version='1.0'>})
41
- @stream.expect(:close_connection, nil)
42
- @stream.expect(:outbound_tls_required?, true)
43
- @stream.expect(:dialback_retry?, true)
44
- @state.node(node)
45
- assert @stream.verify
58
+ EM.run {
59
+ node = node(
60
+ %(<stream:stream xmlns="jabber:client" xmlns:stream="#{Vines::NAMESPACES[:stream]}") +
61
+ %( xml:lang="en" id="1234" from="host.com" version="1.0">)
62
+ )
63
+ @stream.expect(:close_connection, nil)
64
+ @stream.expect(:outbound_tls_required?, true)
65
+ @stream.expect(:dialback_retry?, true)
66
+ @state.node(node)
67
+ assert @stream.verify
68
+ EM.stop
69
+ }
46
70
  end
47
71
 
48
72
  private
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'test_helper'
3
+ require "test_helper"
4
4
 
5
5
  class OperatorWrapper
6
6
  def <<(stream)
@@ -30,57 +30,79 @@ describe Vines::Stream::Server::Outbound::Auth do
30
30
  end
31
31
 
32
32
  def test_missing_children
33
- node = node('<stream:features/>')
34
- @stream.expect(:dialback_verify_key?, false)
35
- @stream.expect(:outbound_tls_required, nil, [Boolean])
36
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
37
- assert @stream.verify
33
+ EM.run {
34
+ node = node("<stream:features/>")
35
+ @stream.expect(:dialback_verify_key?, false)
36
+ @stream.expect(:outbound_tls_required, nil, [Boolean])
37
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
38
+ assert @stream.verify
39
+ EM.stop
40
+ }
38
41
  end
39
42
 
40
43
  def test_invalid_children
41
- node = node(%Q{<stream:features><message/></stream:features>})
42
- @stream.expect(:dialback_verify_key?, false)
43
- @stream.expect(:outbound_tls_required, nil, [Boolean])
44
- assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
45
- assert @stream.verify
44
+ EM.run {
45
+ node = node(%(<stream:features><message/></stream:features>))
46
+ @stream.expect(:dialback_verify_key?, false)
47
+ @stream.expect(:outbound_tls_required, nil, [Boolean])
48
+ assert_raises(Vines::StreamErrors::NotAuthorized) { @state.node(node) }
49
+ assert @stream.verify
50
+ EM.stop
51
+ }
46
52
  end
47
53
 
48
54
  def test_valid_stream_features
49
- node = node(%Q{<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}"><starttls xmlns="#{Vines::NAMESPACES[:tls]}"><required/></starttls><dialback xmlns="#{Vines::NAMESPACES[:dialback]}"/></stream:features>})
50
- starttls = "<starttls xmlns='#{Vines::NAMESPACES[:tls]}'/>"
51
- @stream.expect(:dialback_verify_key?, false)
52
- @stream.expect(:outbound_tls_required, nil, [Boolean])
53
- @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::TLSResult])
54
- @stream.expect(:write, nil, [starttls])
55
- @state.node(node)
56
- assert @stream.verify
55
+ EM.run {
56
+ node = node(
57
+ %(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}">) +
58
+ %(<starttls xmlns="#{Vines::NAMESPACES[:tls]}"><required/></starttls>) +
59
+ %(<dialback xmlns="#{Vines::NAMESPACES[:dialback]}"/></stream:features>)
60
+ )
61
+ starttls = %(<starttls xmlns='#{Vines::NAMESPACES[:tls]}'/>)
62
+ @stream.expect(:dialback_verify_key?, false)
63
+ @stream.expect(:outbound_tls_required, nil, [Boolean])
64
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::TLSResult])
65
+ @stream.expect(:write, nil, [starttls])
66
+ @state.node(node)
67
+ assert @stream.verify
68
+ EM.stop
69
+ }
57
70
  end
58
71
 
59
72
  def test_dialback_feature_only
60
- node = node(%Q{<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}"><dialback xmlns="#{Vines::NAMESPACES[:dialback]}"/></stream:features>})
61
- @stream.expect(:dialback_verify_key?, false)
62
- @stream.expect(:router, OperatorWrapper.new)
63
- @stream.expect(:domain, "local.host")
64
- @stream.expect(:remote_domain, "remote.host")
65
- @stream.expect(:domain, "local.host")
66
- @stream.expect(:remote_domain, "remote.host")
67
- @stream.expect(:id, "1234")
68
- @stream.expect(:write, nil, [String])
69
- @stream.expect(:outbound_tls_required, nil, [Boolean])
70
- @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::AuthDialbackResult])
71
- @stream.expect(:state, StateWrapper.new)
72
- @state.node(node)
73
- assert @stream.verify
73
+ EM.run {
74
+ node = node(
75
+ %(<stream:features xmlns:stream="#{Vines::NAMESPACES[:stream]}">) +
76
+ %(<dialback xmlns="#{Vines::NAMESPACES[:dialback]}"/></stream:features>)
77
+ )
78
+ @stream.expect(:dialback_verify_key?, false)
79
+ @stream.expect(:router, OperatorWrapper.new)
80
+ @stream.expect(:domain, "local.host")
81
+ @stream.expect(:remote_domain, "remote.host")
82
+ @stream.expect(:domain, "local.host")
83
+ @stream.expect(:remote_domain, "remote.host")
84
+ @stream.expect(:id, "1234")
85
+ @stream.expect(:write, nil, [String])
86
+ @stream.expect(:outbound_tls_required, nil, [Boolean])
87
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::AuthDialbackResult])
88
+ @stream.expect(:state, StateWrapper.new)
89
+ @state.node(node)
90
+ assert @stream.verify
91
+ EM.stop
92
+ }
74
93
  end
75
94
 
76
95
  def test_dialback_verify_key
77
- node = node('<stream:stream/>')
78
- @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::Authoritative])
79
- @stream.expect(:dialback_verify_key?, true)
80
- @stream.expect(:callback!, nil)
81
- @stream.expect(:outbound_tls_required, nil, [Boolean])
82
- @state.node(node)
83
- assert @stream.verify
96
+ EM.run {
97
+ node = node("<stream:stream/>")
98
+ @stream.expect(:advance, nil, [Vines::Stream::Server::Outbound::Authoritative])
99
+ @stream.expect(:dialback_verify_key?, true)
100
+ @stream.expect(:callback!, nil)
101
+ @stream.expect(:outbound_tls_required, nil, [Boolean])
102
+ @state.node(node)
103
+ assert @stream.verify
104
+ EM.stop
105
+ }
84
106
  end
85
107
 
86
108
  private