jabber4r-revive 0.9.0 → 0.10.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/.gitignore +5 -4
- data/.rspec +3 -3
- data/.travis.yml +7 -7
- data/CHANGELOG +11 -1
- data/Gemfile +3 -3
- data/README.md +29 -29
- data/Rakefile +70 -70
- data/jabber4r-revive.gemspec +25 -25
- data/lib/jabber4r.rb +38 -33
- data/lib/jabber4r/bosh.rb +21 -0
- data/lib/jabber4r/bosh/authentication.rb +13 -0
- data/lib/jabber4r/bosh/authentication/non_sasl.rb +219 -0
- data/lib/jabber4r/bosh/authentication/sasl.rb +239 -0
- data/lib/jabber4r/bosh/session.rb +144 -0
- data/lib/jabber4r/connection.rb +259 -258
- data/lib/jabber4r/debugger.rb +60 -60
- data/lib/jabber4r/jid.rb +20 -19
- data/lib/jabber4r/protocol.rb +249 -257
- data/lib/jabber4r/protocol/authentication.rb +14 -0
- data/lib/jabber4r/protocol/authentication/non_sasl.rb +138 -0
- data/lib/jabber4r/protocol/authentication/sasl.rb +88 -0
- data/lib/jabber4r/protocol/iq.rb +259 -259
- data/lib/jabber4r/protocol/message.rb +245 -245
- data/lib/jabber4r/protocol/parsed_xml_element.rb +207 -207
- data/lib/jabber4r/protocol/presence.rb +160 -160
- data/lib/jabber4r/protocol/xml_element.rb +143 -143
- data/lib/jabber4r/rexml_1.8_patch.rb +15 -15
- data/lib/jabber4r/roster.rb +38 -38
- data/lib/jabber4r/session.rb +615 -615
- data/lib/jabber4r/version.rb +10 -3
- data/spec/lib/jabber4r/bosh/authentication/non_sasl_spec.rb +79 -0
- data/spec/lib/jabber4r/bosh/authentication/sasl_spec.rb +42 -0
- data/spec/lib/jabber4r/bosh/session_spec.rb +406 -0
- data/spec/lib/jabber4r/bosh_spec.rb +0 -0
- data/spec/lib/jabber4r/connection_spec.rb +174 -174
- data/spec/lib/jabber4r/debugger_spec.rb +35 -35
- data/spec/lib/jabber4r/jid_spec.rb +197 -197
- data/spec/lib/jabber4r/protocol/authentication/non_sasl_spec.rb +79 -0
- data/spec/lib/jabber4r/protocol/authentication/sasl_spec.rb +42 -0
- data/spec/spec_helper.rb +11 -11
- data/spec/support/mocks/tcp_socket_mock.rb +8 -8
- metadata +61 -45
- data/Gemfile.lock +0 -45
- data/lib/jabber4r/bosh_session.rb +0 -224
- data/spec/lib/jabber4r/bosh_session_spec.rb +0 -150
@@ -1,150 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
|
4
|
-
describe Jabber::BoshSession do
|
5
|
-
let(:successful_login) { '<body xmlns="http://jabber.org/protocol/httpbind"><iq type="result" xmlns="jabber:client" id="2034"/></body>' }
|
6
|
-
let(:successful_open_stream) do
|
7
|
-
[
|
8
|
-
'<body xmlns="http://jabber.org/protocol/httpbind" xmlns:xmpp="urn:xmpp:xbosh" xmlns:stream="http://etherx.jabber.org/streams"',
|
9
|
-
'authid="3780309894" sid="ce21410" from="localhost"',
|
10
|
-
'wait="60" requests="2" inactivity="30" maxpause="120" polling="2" ver="1.8" secure="true" />'
|
11
|
-
].join " "
|
12
|
-
end
|
13
|
-
let(:is_open_stream?) { ->(data) { x = Ox.parse(data); ["1", "localhost"] == [x[:rid], x[:to]] } }
|
14
|
-
let(:is_login?) { ->(data) { x = Ox.parse(data); ["1", "ce21410"] == [x[:rid], x[:sid]] } }
|
15
|
-
let(:bosh_session) { described_class.bind("strech@localhost/resource", "password") }
|
16
|
-
|
17
|
-
before { Jabber::BoshSession.any_instance.stub(:generate_next_rid).and_return "1" }
|
18
|
-
|
19
|
-
describe "#bind" do
|
20
|
-
context "when session successfuly binded" do
|
21
|
-
before do
|
22
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
23
|
-
.with(body: is_open_stream?)
|
24
|
-
.to_return(body: successful_open_stream)
|
25
|
-
|
26
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
27
|
-
.with(body: is_login?)
|
28
|
-
.to_return(body: successful_login)
|
29
|
-
end
|
30
|
-
|
31
|
-
it { expect(bosh_session).to be_alive }
|
32
|
-
end
|
33
|
-
|
34
|
-
context "when couldn't open stream" do
|
35
|
-
context "when response body missed authid attribute" do
|
36
|
-
let(:malformed_body) { '<body xmlns="http://jabber.org/protocol/httpbind" sid="ce21410" />' }
|
37
|
-
|
38
|
-
before do
|
39
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
40
|
-
.with(body: is_open_stream?)
|
41
|
-
.to_return(body: malformed_body)
|
42
|
-
|
43
|
-
WebMock.should_not have_requested(:post, "http://localhost:5280/http-bind")
|
44
|
-
.with(body: is_login?)
|
45
|
-
end
|
46
|
-
|
47
|
-
it { expect { bosh_session }.to raise_error Jabber::XMLMalformedError, "Couldn't find <body /> attribute [authid]" }
|
48
|
-
end
|
49
|
-
|
50
|
-
context "when response body missed sid attribute" do
|
51
|
-
let(:malformed_body) { '<body xmlns="http://jabber.org/protocol/httpbind" authid="3780309894" />' }
|
52
|
-
|
53
|
-
before do
|
54
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
55
|
-
.with(body: is_open_stream?)
|
56
|
-
.to_return(body: malformed_body)
|
57
|
-
|
58
|
-
WebMock.should_not have_requested(:post, "http://localhost:5280/http-bind")
|
59
|
-
.with(body: is_login?)
|
60
|
-
end
|
61
|
-
|
62
|
-
it { expect { bosh_session }.to raise_error Jabber::XMLMalformedError, "Couldn't find <body /> attribute [sid]" }
|
63
|
-
end
|
64
|
-
|
65
|
-
context "when response was not 200 OK" do
|
66
|
-
before do
|
67
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
68
|
-
.with(body: is_open_stream?)
|
69
|
-
.to_return(body: "Foo", status: 401)
|
70
|
-
|
71
|
-
WebMock.should_not have_requested(:post, "http://localhost:5280/http-bind")
|
72
|
-
.with(body: is_login?)
|
73
|
-
end
|
74
|
-
|
75
|
-
it { expect { bosh_session }.to raise_error Net::HTTPBadResponse }
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context "when couldn't login in opened stream" do
|
80
|
-
context "when response is a malformed xml without IQ tag" do
|
81
|
-
let(:malformed_body) { '<body xmlns="http://jabber.org/protocol/httpbind"></body>' }
|
82
|
-
|
83
|
-
before do
|
84
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
85
|
-
.with(body: is_open_stream?)
|
86
|
-
.to_return(body: successful_open_stream)
|
87
|
-
|
88
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
89
|
-
.with(body: is_login?)
|
90
|
-
.to_return(body: malformed_body)
|
91
|
-
end
|
92
|
-
|
93
|
-
it { expect { bosh_session }.to raise_error Jabber::XMLMalformedError, "Couldn't find xml tag <iq/>" }
|
94
|
-
end
|
95
|
-
|
96
|
-
context "when response has type not equal 'result'" do
|
97
|
-
let(:malformed_body) { '<body xmlns="http://jabber.org/protocol/httpbind"><iq type="error" xmlns="jabber:client" id="2034"/></body>' }
|
98
|
-
|
99
|
-
before do
|
100
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
101
|
-
.with(body: is_open_stream?)
|
102
|
-
.to_return(body: successful_open_stream)
|
103
|
-
|
104
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
105
|
-
.with(body: is_login?)
|
106
|
-
.to_return(body: malformed_body)
|
107
|
-
end
|
108
|
-
|
109
|
-
it { expect { bosh_session }.to raise_error Jabber::AuthenticationError, "Failed to login" }
|
110
|
-
end
|
111
|
-
|
112
|
-
context "when response was not 200 OK" do
|
113
|
-
before do
|
114
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
115
|
-
.with(body: is_open_stream?)
|
116
|
-
.to_return(body: successful_open_stream)
|
117
|
-
|
118
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
119
|
-
.with(body: is_login?)
|
120
|
-
.to_return(body: "Foo", status: 401)
|
121
|
-
end
|
122
|
-
|
123
|
-
it { expect { bosh_session }.to raise_error Net::HTTPBadResponse }
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe "#to_json" do
|
129
|
-
let(:json) { JSON.parse(bosh_session.to_json) }
|
130
|
-
|
131
|
-
before do
|
132
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
133
|
-
.with(body: is_open_stream?)
|
134
|
-
.to_return(body: successful_open_stream)
|
135
|
-
|
136
|
-
|
137
|
-
stub_request(:post, "http://localhost:5280/http-bind")
|
138
|
-
.with(body: is_login?)
|
139
|
-
.to_return(body: successful_login)
|
140
|
-
end
|
141
|
-
|
142
|
-
it { expect(json).to have_key "jid" }
|
143
|
-
it { expect(json).to have_key "rid" }
|
144
|
-
it { expect(json).to have_key "sid" }
|
145
|
-
|
146
|
-
it { expect(json["jid"]).to eq "strech@localhost/resource"}
|
147
|
-
it { expect(json["rid"]).to eq "1"}
|
148
|
-
it { expect(json["sid"]).to eq "ce21410"}
|
149
|
-
end
|
150
|
-
end
|