websocket 1.0.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 +3 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +5 -0
- data/README.md +117 -0
- data/Rakefile +23 -0
- data/autobahn-client.json +11 -0
- data/autobahn-server.json +10 -0
- data/examples/base.rb +162 -0
- data/examples/client.rb +70 -0
- data/examples/server.rb +56 -0
- data/examples/tests/autobahn_client.rb +52 -0
- data/examples/tests/echo_client.rb +42 -0
- data/examples/tests/echo_server.rb +45 -0
- data/lib/websocket.rb +16 -0
- data/lib/websocket/frame.rb +11 -0
- data/lib/websocket/frame/base.rb +45 -0
- data/lib/websocket/frame/data.rb +52 -0
- data/lib/websocket/frame/handler.rb +15 -0
- data/lib/websocket/frame/handler/base.rb +41 -0
- data/lib/websocket/frame/handler/handler03.rb +162 -0
- data/lib/websocket/frame/handler/handler04.rb +19 -0
- data/lib/websocket/frame/handler/handler05.rb +17 -0
- data/lib/websocket/frame/handler/handler07.rb +34 -0
- data/lib/websocket/frame/handler/handler75.rb +79 -0
- data/lib/websocket/frame/incoming.rb +43 -0
- data/lib/websocket/frame/incoming/client.rb +9 -0
- data/lib/websocket/frame/incoming/server.rb +9 -0
- data/lib/websocket/frame/outgoing.rb +28 -0
- data/lib/websocket/frame/outgoing/client.rb +9 -0
- data/lib/websocket/frame/outgoing/server.rb +9 -0
- data/lib/websocket/handshake.rb +10 -0
- data/lib/websocket/handshake/base.rb +67 -0
- data/lib/websocket/handshake/client.rb +80 -0
- data/lib/websocket/handshake/handler.rb +20 -0
- data/lib/websocket/handshake/handler/base.rb +25 -0
- data/lib/websocket/handshake/handler/client.rb +19 -0
- data/lib/websocket/handshake/handler/client01.rb +19 -0
- data/lib/websocket/handshake/handler/client04.rb +47 -0
- data/lib/websocket/handshake/handler/client75.rb +25 -0
- data/lib/websocket/handshake/handler/client76.rb +85 -0
- data/lib/websocket/handshake/handler/server.rb +30 -0
- data/lib/websocket/handshake/handler/server04.rb +38 -0
- data/lib/websocket/handshake/handler/server75.rb +26 -0
- data/lib/websocket/handshake/handler/server76.rb +71 -0
- data/lib/websocket/handshake/server.rb +56 -0
- data/lib/websocket/version.rb +3 -0
- data/spec/frame/incoming_03_spec.rb +117 -0
- data/spec/frame/incoming_04_spec.rb +117 -0
- data/spec/frame/incoming_05_spec.rb +133 -0
- data/spec/frame/incoming_07_spec.rb +133 -0
- data/spec/frame/incoming_75_spec.rb +59 -0
- data/spec/frame/incoming_common_spec.rb +22 -0
- data/spec/frame/outgoing_03_spec.rb +77 -0
- data/spec/frame/outgoing_04_spec.rb +77 -0
- data/spec/frame/outgoing_05_spec.rb +77 -0
- data/spec/frame/outgoing_07_spec.rb +77 -0
- data/spec/frame/outgoing_75_spec.rb +41 -0
- data/spec/frame/outgoing_common_spec.rb +15 -0
- data/spec/handshake/client_04_spec.rb +20 -0
- data/spec/handshake/client_75_spec.rb +11 -0
- data/spec/handshake/client_76_spec.rb +20 -0
- data/spec/handshake/server_04_spec.rb +18 -0
- data/spec/handshake/server_75_spec.rb +11 -0
- data/spec/handshake/server_76_spec.rb +46 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/all_client_drafts.rb +77 -0
- data/spec/support/all_server_drafts.rb +86 -0
- data/spec/support/handshake_requests.rb +72 -0
- data/spec/support/incoming_frames.rb +30 -0
- data/spec/support/outgoing_frames.rb +14 -0
- data/websocket.gemspec +21 -0
- metadata +163 -0
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Incoming frame draft 75' do
|
4
|
+
let(:version) { 75 }
|
5
|
+
let(:frame) { WebSocket::Frame::Incoming.new(:version => version, :data => encoded_text) }
|
6
|
+
let(:encoded_text) { nil }
|
7
|
+
let(:decoded_text) { nil }
|
8
|
+
let(:frame_type) { nil }
|
9
|
+
let(:error) { nil }
|
10
|
+
subject { frame }
|
11
|
+
|
12
|
+
it_should_behave_like 'valid_incoming_frame'
|
13
|
+
|
14
|
+
context "with valid text frame" do
|
15
|
+
let(:encoded_text) { "\x00abc\xFF" }
|
16
|
+
let(:decoded_text) { "abc" }
|
17
|
+
let(:frame_type) { :text }
|
18
|
+
|
19
|
+
it_should_behave_like 'valid_incoming_frame'
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with two frames" do
|
23
|
+
let(:encoded_text) { "\x00abc\xFF\x00def\xFF" }
|
24
|
+
let(:decoded_text) { ["abc", "def"] }
|
25
|
+
let(:frame_type) { [:text, :text] }
|
26
|
+
|
27
|
+
it_should_behave_like 'valid_incoming_frame'
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with close frame" do
|
31
|
+
let(:encoded_text) { "\xFF\x00" }
|
32
|
+
let(:decoded_text) { "" }
|
33
|
+
let(:frame_type) { :close }
|
34
|
+
|
35
|
+
it_should_behave_like 'valid_incoming_frame'
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with incomplete frame" do
|
39
|
+
let(:encoded_text) { "\x00test" }
|
40
|
+
let(:decoded_text) { nil }
|
41
|
+
|
42
|
+
it_should_behave_like 'valid_incoming_frame'
|
43
|
+
end
|
44
|
+
|
45
|
+
context "with invalid frame" do
|
46
|
+
let(:encoded_text) { "invalid" }
|
47
|
+
let(:error) { :invalid_frame }
|
48
|
+
|
49
|
+
it_should_behave_like 'valid_incoming_frame'
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with too long frame" do
|
53
|
+
let(:encoded_text) { "\x00" + "a" * WebSocket::Frame::Handler::Base::MAX_FRAME_SIZE + "\xFF" }
|
54
|
+
let(:error) { :frame_too_long }
|
55
|
+
|
56
|
+
it_should_behave_like('valid_incoming_frame') unless RUBY_PLATFORM == "java"
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Incoming common frame' do
|
4
|
+
subject { WebSocket::Frame::Incoming.new }
|
5
|
+
|
6
|
+
its(:version) { should eql(13) }
|
7
|
+
its(:decoded?) { should be_false }
|
8
|
+
# Not implemented yet
|
9
|
+
# its(:error?) { should be_false }
|
10
|
+
|
11
|
+
it "should allow adding data via <<" do
|
12
|
+
subject.data.should eql("")
|
13
|
+
subject << "test"
|
14
|
+
subject.data.should eql("test")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise error on invalid version" do
|
18
|
+
subject = WebSocket::Frame::Incoming.new(:version => 70)
|
19
|
+
subject.error?.should be_true
|
20
|
+
subject.error.should eql(:unknown_protocol_version)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Outgoing frame draft 03' do
|
4
|
+
let(:version) { 03 }
|
5
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(:version => version, :data => decoded_text, :type => frame_type) }
|
6
|
+
let(:decoded_text) { "" }
|
7
|
+
let(:encoded_text) { "\x04\x00" }
|
8
|
+
let(:frame_type) { :text }
|
9
|
+
let(:require_sending) { true }
|
10
|
+
let(:error) { nil }
|
11
|
+
subject { frame }
|
12
|
+
|
13
|
+
it_should_behave_like 'valid_outgoing_frame'
|
14
|
+
|
15
|
+
context "should properly encode close frame" do
|
16
|
+
let(:frame_type) { :close }
|
17
|
+
let(:decoded_text) { "Hello" }
|
18
|
+
let(:encoded_text) { "\x01\x05" + decoded_text }
|
19
|
+
let(:require_sending) { true }
|
20
|
+
|
21
|
+
it_should_behave_like 'valid_outgoing_frame'
|
22
|
+
end
|
23
|
+
|
24
|
+
context "should properly encode ping frame" do
|
25
|
+
let(:frame_type) { :ping }
|
26
|
+
let(:decoded_text) { "Hello" }
|
27
|
+
let(:encoded_text) { "\x02\x05" + decoded_text }
|
28
|
+
let(:require_sending) { true }
|
29
|
+
|
30
|
+
it_should_behave_like 'valid_outgoing_frame'
|
31
|
+
end
|
32
|
+
|
33
|
+
context "should properly encode pong frame" do
|
34
|
+
let(:frame_type) { :pong }
|
35
|
+
let(:decoded_text) { "Hello" }
|
36
|
+
let(:encoded_text) { "\x03\x05" + decoded_text }
|
37
|
+
let(:require_sending) { true }
|
38
|
+
|
39
|
+
it_should_behave_like 'valid_outgoing_frame'
|
40
|
+
end
|
41
|
+
|
42
|
+
context "should properly encode text frame" do
|
43
|
+
let(:decoded_text) { "Hello" }
|
44
|
+
let(:encoded_text) { "\x04\x05" + decoded_text }
|
45
|
+
let(:require_sending) { true }
|
46
|
+
|
47
|
+
it_should_behave_like 'valid_outgoing_frame'
|
48
|
+
end
|
49
|
+
|
50
|
+
context "should properly encode 256 bytes binary frame" do
|
51
|
+
let(:frame_type) { :binary }
|
52
|
+
let(:decoded_text) { "a" * 256 }
|
53
|
+
let(:encoded_text) { "\x05\x7E\x01\x00" + decoded_text }
|
54
|
+
let(:require_sending) { true }
|
55
|
+
|
56
|
+
it_should_behave_like 'valid_outgoing_frame'
|
57
|
+
end
|
58
|
+
|
59
|
+
context "should properly encode 64KiB binary frame" do
|
60
|
+
let(:frame_type) { :binary }
|
61
|
+
let(:decoded_text) { "a" * 65536 }
|
62
|
+
let(:encoded_text) { "\x05\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
63
|
+
let(:require_sending) { true }
|
64
|
+
|
65
|
+
it_should_behave_like 'valid_outgoing_frame'
|
66
|
+
end
|
67
|
+
|
68
|
+
context "should return error for unknown frame type" do
|
69
|
+
let(:frame_type) { :unknown }
|
70
|
+
let(:decoded_text) { "Hello" }
|
71
|
+
let(:encoded_text) { nil }
|
72
|
+
let(:error) { :unknown_frame_type }
|
73
|
+
let(:require_sending) { false }
|
74
|
+
|
75
|
+
it_should_behave_like 'valid_outgoing_frame'
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Outgoing frame draft 04' do
|
4
|
+
let(:version) { 04 }
|
5
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(:version => version, :data => decoded_text, :type => frame_type) }
|
6
|
+
let(:decoded_text) { "" }
|
7
|
+
let(:encoded_text) { "\x84\x00" }
|
8
|
+
let(:frame_type) { :text }
|
9
|
+
let(:require_sending) { true }
|
10
|
+
let(:error) { nil }
|
11
|
+
subject { frame }
|
12
|
+
|
13
|
+
it_should_behave_like 'valid_outgoing_frame'
|
14
|
+
|
15
|
+
context "should properly encode close frame" do
|
16
|
+
let(:frame_type) { :close }
|
17
|
+
let(:decoded_text) { "Hello" }
|
18
|
+
let(:encoded_text) { "\x81\x05" + decoded_text }
|
19
|
+
let(:require_sending) { true }
|
20
|
+
|
21
|
+
it_should_behave_like 'valid_outgoing_frame'
|
22
|
+
end
|
23
|
+
|
24
|
+
context "should properly encode ping frame" do
|
25
|
+
let(:frame_type) { :ping }
|
26
|
+
let(:decoded_text) { "Hello" }
|
27
|
+
let(:encoded_text) { "\x82\x05" + decoded_text }
|
28
|
+
let(:require_sending) { true }
|
29
|
+
|
30
|
+
it_should_behave_like 'valid_outgoing_frame'
|
31
|
+
end
|
32
|
+
|
33
|
+
context "should properly encode pong frame" do
|
34
|
+
let(:frame_type) { :pong }
|
35
|
+
let(:decoded_text) { "Hello" }
|
36
|
+
let(:encoded_text) { "\x83\x05" + decoded_text }
|
37
|
+
let(:require_sending) { true }
|
38
|
+
|
39
|
+
it_should_behave_like 'valid_outgoing_frame'
|
40
|
+
end
|
41
|
+
|
42
|
+
context "should properly encode text frame" do
|
43
|
+
let(:decoded_text) { "Hello" }
|
44
|
+
let(:encoded_text) { "\x84\x05" + decoded_text }
|
45
|
+
let(:require_sending) { true }
|
46
|
+
|
47
|
+
it_should_behave_like 'valid_outgoing_frame'
|
48
|
+
end
|
49
|
+
|
50
|
+
context "should properly encode 256 bytes binary frame" do
|
51
|
+
let(:frame_type) { :binary }
|
52
|
+
let(:decoded_text) { "a" * 256 }
|
53
|
+
let(:encoded_text) { "\x85\x7E\x01\x00" + decoded_text }
|
54
|
+
let(:require_sending) { true }
|
55
|
+
|
56
|
+
it_should_behave_like 'valid_outgoing_frame'
|
57
|
+
end
|
58
|
+
|
59
|
+
context "should properly encode 64KiB binary frame" do
|
60
|
+
let(:frame_type) { :binary }
|
61
|
+
let(:decoded_text) { "a" * 65536 }
|
62
|
+
let(:encoded_text) { "\x85\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
63
|
+
let(:require_sending) { true }
|
64
|
+
|
65
|
+
it_should_behave_like 'valid_outgoing_frame'
|
66
|
+
end
|
67
|
+
|
68
|
+
context "should return error for unknown frame type" do
|
69
|
+
let(:frame_type) { :unknown }
|
70
|
+
let(:decoded_text) { "Hello" }
|
71
|
+
let(:encoded_text) { nil }
|
72
|
+
let(:error) { :unknown_frame_type }
|
73
|
+
let(:require_sending) { false }
|
74
|
+
|
75
|
+
it_should_behave_like 'valid_outgoing_frame'
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Outgoing frame draft 05' do
|
4
|
+
let(:version) { 5 }
|
5
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(:version => version, :data => decoded_text, :type => frame_type) }
|
6
|
+
let(:decoded_text) { "" }
|
7
|
+
let(:encoded_text) { "\x84\x00" }
|
8
|
+
let(:frame_type) { :text }
|
9
|
+
let(:require_sending) { true }
|
10
|
+
let(:error) { nil }
|
11
|
+
subject { frame }
|
12
|
+
|
13
|
+
it_should_behave_like 'valid_outgoing_frame'
|
14
|
+
|
15
|
+
context "should properly encode close frame" do
|
16
|
+
let(:frame_type) { :close }
|
17
|
+
let(:decoded_text) { "Hello" }
|
18
|
+
let(:encoded_text) { "\x81\x05" + decoded_text }
|
19
|
+
let(:require_sending) { true }
|
20
|
+
|
21
|
+
it_should_behave_like 'valid_outgoing_frame'
|
22
|
+
end
|
23
|
+
|
24
|
+
context "should properly encode ping frame" do
|
25
|
+
let(:frame_type) { :ping }
|
26
|
+
let(:decoded_text) { "Hello" }
|
27
|
+
let(:encoded_text) { "\x82\x05" + decoded_text }
|
28
|
+
let(:require_sending) { true }
|
29
|
+
|
30
|
+
it_should_behave_like 'valid_outgoing_frame'
|
31
|
+
end
|
32
|
+
|
33
|
+
context "should properly encode pong frame" do
|
34
|
+
let(:frame_type) { :pong }
|
35
|
+
let(:decoded_text) { "Hello" }
|
36
|
+
let(:encoded_text) { "\x83\x05" + decoded_text }
|
37
|
+
let(:require_sending) { true }
|
38
|
+
|
39
|
+
it_should_behave_like 'valid_outgoing_frame'
|
40
|
+
end
|
41
|
+
|
42
|
+
context "should properly encode text frame" do
|
43
|
+
let(:decoded_text) { "Hello" }
|
44
|
+
let(:encoded_text) { "\x84\x05" + decoded_text }
|
45
|
+
let(:require_sending) { true }
|
46
|
+
|
47
|
+
it_should_behave_like 'valid_outgoing_frame'
|
48
|
+
end
|
49
|
+
|
50
|
+
context "should properly encode 256 bytes binary frame" do
|
51
|
+
let(:frame_type) { :binary }
|
52
|
+
let(:decoded_text) { "a" * 256 }
|
53
|
+
let(:encoded_text) { "\x85\x7E\x01\x00" + decoded_text }
|
54
|
+
let(:require_sending) { true }
|
55
|
+
|
56
|
+
it_should_behave_like 'valid_outgoing_frame'
|
57
|
+
end
|
58
|
+
|
59
|
+
context "should properly encode 64KiB binary frame" do
|
60
|
+
let(:frame_type) { :binary }
|
61
|
+
let(:decoded_text) { "a" * 65536 }
|
62
|
+
let(:encoded_text) { "\x85\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
63
|
+
let(:require_sending) { true }
|
64
|
+
|
65
|
+
it_should_behave_like 'valid_outgoing_frame'
|
66
|
+
end
|
67
|
+
|
68
|
+
context "should return error for unknown frame type" do
|
69
|
+
let(:frame_type) { :unknown }
|
70
|
+
let(:decoded_text) { "Hello" }
|
71
|
+
let(:encoded_text) { nil }
|
72
|
+
let(:error) { :unknown_frame_type }
|
73
|
+
let(:require_sending) { false }
|
74
|
+
|
75
|
+
it_should_behave_like 'valid_outgoing_frame'
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Outgoing frame draft 07' do
|
4
|
+
let(:version) { 7 }
|
5
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(:version => version, :data => decoded_text, :type => frame_type) }
|
6
|
+
let(:decoded_text) { "" }
|
7
|
+
let(:encoded_text) { "\x81\x00" }
|
8
|
+
let(:frame_type) { :text }
|
9
|
+
let(:require_sending) { true }
|
10
|
+
let(:error) { nil }
|
11
|
+
subject { frame }
|
12
|
+
|
13
|
+
it_should_behave_like 'valid_outgoing_frame'
|
14
|
+
|
15
|
+
context "should properly encode close frame" do
|
16
|
+
let(:frame_type) { :close }
|
17
|
+
let(:decoded_text) { "Hello" }
|
18
|
+
let(:encoded_text) { "\x88\x05" + decoded_text }
|
19
|
+
let(:require_sending) { true }
|
20
|
+
|
21
|
+
it_should_behave_like 'valid_outgoing_frame'
|
22
|
+
end
|
23
|
+
|
24
|
+
context "should properly encode ping frame" do
|
25
|
+
let(:frame_type) { :ping }
|
26
|
+
let(:decoded_text) { "Hello" }
|
27
|
+
let(:encoded_text) { "\x89\x05" + decoded_text }
|
28
|
+
let(:require_sending) { true }
|
29
|
+
|
30
|
+
it_should_behave_like 'valid_outgoing_frame'
|
31
|
+
end
|
32
|
+
|
33
|
+
context "should properly encode pong frame" do
|
34
|
+
let(:frame_type) { :pong }
|
35
|
+
let(:decoded_text) { "Hello" }
|
36
|
+
let(:encoded_text) { "\x8a\x05" + decoded_text }
|
37
|
+
let(:require_sending) { true }
|
38
|
+
|
39
|
+
it_should_behave_like 'valid_outgoing_frame'
|
40
|
+
end
|
41
|
+
|
42
|
+
context "should properly encode text frame" do
|
43
|
+
let(:decoded_text) { "Hello" }
|
44
|
+
let(:encoded_text) { "\x81\x05" + decoded_text }
|
45
|
+
let(:require_sending) { true }
|
46
|
+
|
47
|
+
it_should_behave_like 'valid_outgoing_frame'
|
48
|
+
end
|
49
|
+
|
50
|
+
context "should properly encode 256 bytes binary frame" do
|
51
|
+
let(:frame_type) { :binary }
|
52
|
+
let(:decoded_text) { "a" * 256 }
|
53
|
+
let(:encoded_text) { "\x82\x7E\x01\x00" + decoded_text }
|
54
|
+
let(:require_sending) { true }
|
55
|
+
|
56
|
+
it_should_behave_like 'valid_outgoing_frame'
|
57
|
+
end
|
58
|
+
|
59
|
+
context "should properly encode 64KiB binary frame" do
|
60
|
+
let(:frame_type) { :binary }
|
61
|
+
let(:decoded_text) { "a" * 65536 }
|
62
|
+
let(:encoded_text) { "\x82\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
63
|
+
let(:require_sending) { true }
|
64
|
+
|
65
|
+
it_should_behave_like 'valid_outgoing_frame'
|
66
|
+
end
|
67
|
+
|
68
|
+
context "should return error for unknown frame type" do
|
69
|
+
let(:frame_type) { :unknown }
|
70
|
+
let(:decoded_text) { "Hello" }
|
71
|
+
let(:encoded_text) { nil }
|
72
|
+
let(:error) { :unknown_frame_type }
|
73
|
+
let(:require_sending) { false }
|
74
|
+
|
75
|
+
it_should_behave_like 'valid_outgoing_frame'
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Outgoing frame draft 75' do
|
4
|
+
let(:version) { 75 }
|
5
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(:version => version, :data => decoded_text, :type => frame_type) }
|
6
|
+
let(:decoded_text) { "" }
|
7
|
+
let(:encoded_text) { "\x00\xFF" }
|
8
|
+
let(:frame_type) { :text }
|
9
|
+
let(:require_sending) { true }
|
10
|
+
let(:error) { nil }
|
11
|
+
subject { frame }
|
12
|
+
|
13
|
+
it_should_behave_like 'valid_outgoing_frame'
|
14
|
+
|
15
|
+
context "should properly encode text frame" do
|
16
|
+
let(:decoded_text) { "abc" }
|
17
|
+
let(:encoded_text) { "\x00abc\xFF" }
|
18
|
+
let(:require_sending) { true }
|
19
|
+
|
20
|
+
it_should_behave_like 'valid_outgoing_frame'
|
21
|
+
end
|
22
|
+
|
23
|
+
context "should properly encode close frame" do
|
24
|
+
let(:frame_type) { :close }
|
25
|
+
let(:decoded_text) { "abc" }
|
26
|
+
let(:encoded_text) { "\xFF\x00" }
|
27
|
+
let(:require_sending) { true }
|
28
|
+
|
29
|
+
it_should_behave_like 'valid_outgoing_frame'
|
30
|
+
end
|
31
|
+
|
32
|
+
context "should return error for unknown frame type" do
|
33
|
+
let(:frame_type) { :unknown }
|
34
|
+
let(:decoded_text) { "Hello" }
|
35
|
+
let(:encoded_text) { nil }
|
36
|
+
let(:error) { :unknown_frame_type }
|
37
|
+
let(:require_sending) { false }
|
38
|
+
|
39
|
+
it_should_behave_like 'valid_outgoing_frame'
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Outgoing common frame' do
|
4
|
+
subject { WebSocket::Frame::Outgoing.new }
|
5
|
+
|
6
|
+
its(:version) { should eql(13) }
|
7
|
+
# Not implemented yet
|
8
|
+
# its(:error?) { should be_false }
|
9
|
+
|
10
|
+
it "should raise error on invalid version" do
|
11
|
+
subject = WebSocket::Frame::Incoming.new(:version => 70)
|
12
|
+
subject.error?.should be_true
|
13
|
+
subject.error.should eql(:unknown_protocol_version)
|
14
|
+
end
|
15
|
+
end
|