websocket 1.1.4 → 1.2.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/.travis.yml +2 -6
- data/CHANGELOG.md +7 -0
- data/Gemfile +2 -1
- data/README.md +10 -6
- data/Rakefile +1 -1
- data/lib/websocket.rb +1 -1
- data/lib/websocket/exception_handler.rb +6 -0
- data/lib/websocket/frame/base.rb +1 -1
- data/lib/websocket/frame/data.rb +11 -9
- data/lib/websocket/frame/handler.rb +1 -1
- data/lib/websocket/frame/handler/handler03.rb +17 -17
- data/lib/websocket/frame/handler/handler07.rb +8 -8
- data/lib/websocket/frame/handler/handler75.rb +8 -7
- data/lib/websocket/frame/incoming.rb +1 -1
- data/lib/websocket/frame/outgoing.rb +1 -1
- data/lib/websocket/handshake/base.rb +7 -7
- data/lib/websocket/handshake/client.rb +5 -3
- data/lib/websocket/handshake/handler/base.rb +5 -5
- data/lib/websocket/handshake/handler/client.rb +6 -1
- data/lib/websocket/handshake/handler/client04.rb +7 -6
- data/lib/websocket/handshake/handler/client75.rb +5 -4
- data/lib/websocket/handshake/handler/client76.rb +5 -5
- data/lib/websocket/handshake/handler/server04.rb +11 -6
- data/lib/websocket/handshake/handler/server75.rb +5 -5
- data/lib/websocket/handshake/handler/server76.rb +9 -9
- data/lib/websocket/handshake/server.rb +25 -24
- data/lib/websocket/version.rb +1 -1
- data/spec/frame/incoming_03_spec.rb +25 -25
- data/spec/frame/incoming_04_spec.rb +25 -25
- data/spec/frame/incoming_05_spec.rb +29 -29
- data/spec/frame/incoming_07_spec.rb +31 -31
- data/spec/frame/incoming_75_spec.rb +13 -13
- data/spec/frame/incoming_common_spec.rb +12 -13
- data/spec/frame/masking_spec.rb +10 -10
- data/spec/frame/outgoing_03_spec.rb +17 -17
- data/spec/frame/outgoing_04_spec.rb +17 -17
- data/spec/frame/outgoing_05_spec.rb +17 -17
- data/spec/frame/outgoing_07_spec.rb +19 -19
- data/spec/frame/outgoing_75_spec.rb +9 -9
- data/spec/frame/outgoing_common_spec.rb +7 -8
- data/spec/handshake/client_04_spec.rb +9 -9
- data/spec/handshake/client_75_spec.rb +2 -2
- data/spec/handshake/client_76_spec.rb +9 -9
- data/spec/handshake/server_04_spec.rb +5 -5
- data/spec/handshake/server_75_spec.rb +1 -1
- data/spec/handshake/server_76_spec.rb +21 -21
- data/spec/spec_helper.rb +4 -1
- data/spec/support/all_client_drafts.rb +62 -52
- data/spec/support/all_server_drafts.rb +49 -49
- data/spec/support/handshake_requests.rb +16 -16
- data/spec/support/incoming_frames.rb +28 -28
- data/spec/support/outgoing_frames.rb +10 -10
- data/websocket.gemspec +1 -1
- metadata +42 -22
- checksums.yaml +0 -7
@@ -1,9 +1,9 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Incoming frame draft 75' do
|
4
|
+
RSpec.describe 'Incoming frame draft 75' do
|
5
5
|
let(:version) { 75 }
|
6
|
-
let(:frame) { WebSocket::Frame::Incoming.new(:
|
6
|
+
let(:frame) { WebSocket::Frame::Incoming.new(version: version, data: encoded_text) }
|
7
7
|
let(:encoded_text) { nil }
|
8
8
|
let(:decoded_text) { nil }
|
9
9
|
let(:frame_type) { nil }
|
@@ -12,46 +12,46 @@ describe 'Incoming frame draft 75' do
|
|
12
12
|
|
13
13
|
it_should_behave_like 'valid_incoming_frame'
|
14
14
|
|
15
|
-
context
|
15
|
+
context 'with valid text frame' do
|
16
16
|
let(:encoded_text) { "\x00abc\xFF" }
|
17
|
-
let(:decoded_text) {
|
17
|
+
let(:decoded_text) { 'abc' }
|
18
18
|
let(:frame_type) { :text }
|
19
19
|
|
20
20
|
it_should_behave_like 'valid_incoming_frame'
|
21
21
|
end
|
22
22
|
|
23
|
-
context
|
23
|
+
context 'with two frames' do
|
24
24
|
let(:encoded_text) { "\x00abc\xFF\x00def\xFF" }
|
25
|
-
let(:decoded_text) { [
|
25
|
+
let(:decoded_text) { ['abc', 'def'] }
|
26
26
|
let(:frame_type) { [:text, :text] }
|
27
27
|
|
28
28
|
it_should_behave_like 'valid_incoming_frame'
|
29
29
|
end
|
30
30
|
|
31
|
-
context
|
31
|
+
context 'with close frame' do
|
32
32
|
let(:encoded_text) { "\xFF\x00" }
|
33
|
-
let(:decoded_text) {
|
33
|
+
let(:decoded_text) { '' }
|
34
34
|
let(:frame_type) { :close }
|
35
35
|
|
36
36
|
it_should_behave_like 'valid_incoming_frame'
|
37
37
|
end
|
38
38
|
|
39
|
-
context
|
39
|
+
context 'with incomplete frame' do
|
40
40
|
let(:encoded_text) { "\x00test" }
|
41
41
|
let(:decoded_text) { nil }
|
42
42
|
|
43
43
|
it_should_behave_like 'valid_incoming_frame'
|
44
44
|
end
|
45
45
|
|
46
|
-
context
|
47
|
-
let(:encoded_text) {
|
46
|
+
context 'with invalid frame' do
|
47
|
+
let(:encoded_text) { 'invalid' }
|
48
48
|
let(:error) { WebSocket::Error::Frame::Invalid }
|
49
49
|
|
50
50
|
it_should_behave_like 'valid_incoming_frame'
|
51
51
|
end
|
52
52
|
|
53
|
-
context
|
54
|
-
let(:encoded_text) { "\x00" +
|
53
|
+
context 'with too long frame' do
|
54
|
+
let(:encoded_text) { "\x00" + 'a' * WebSocket.max_frame_size + "\xFF" }
|
55
55
|
let(:error) { WebSocket::Error::Frame::TooLong }
|
56
56
|
|
57
57
|
it_should_behave_like 'valid_incoming_frame'
|
@@ -1,23 +1,22 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Incoming common frame' do
|
4
|
+
RSpec.describe 'Incoming common frame' do
|
5
5
|
subject { WebSocket::Frame::Incoming.new }
|
6
6
|
|
7
|
-
its(:version) {
|
8
|
-
its(:decoded?) {
|
9
|
-
|
10
|
-
# its(:error?) { should be_false }
|
7
|
+
its(:version) { is_expected.to eql(13) }
|
8
|
+
its(:decoded?) { is_expected.to be false }
|
9
|
+
its(:error?) { is_expected.to be false }
|
11
10
|
|
12
|
-
it
|
13
|
-
subject.data.
|
14
|
-
subject <<
|
15
|
-
subject.data.
|
11
|
+
it 'should allow adding data via <<' do
|
12
|
+
expect(subject.data).to eql('')
|
13
|
+
subject << 'test'
|
14
|
+
expect(subject.data).to eql('test')
|
16
15
|
end
|
17
16
|
|
18
|
-
it
|
19
|
-
subject = WebSocket::Frame::Incoming.new(:
|
20
|
-
subject.error
|
21
|
-
subject.error.
|
17
|
+
it 'should raise error on invalid version' do
|
18
|
+
subject = WebSocket::Frame::Incoming.new(version: 70)
|
19
|
+
expect(subject.error?).to be true
|
20
|
+
expect(subject.error).to eql(:unknown_protocol_version)
|
22
21
|
end
|
23
22
|
end
|
data/spec/frame/masking_spec.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Masking frame draft 07' do
|
5
|
-
it
|
6
|
-
outgoing_frame = WebSocket::Frame::Outgoing::Client.new(:
|
4
|
+
RSpec.describe 'Masking frame draft 07' do
|
5
|
+
it 'should encode and decode masked frame correctly' do
|
6
|
+
outgoing_frame = WebSocket::Frame::Outgoing::Client.new(data: 'Hello World', type: 'text')
|
7
7
|
outgoing_frame.to_s
|
8
|
-
outgoing_frame.error.
|
9
|
-
incoming_frame = WebSocket::Frame::Incoming::Server.new(:
|
10
|
-
incoming_frame.
|
11
|
-
incoming_frame.class.
|
12
|
-
incoming_frame.error.
|
13
|
-
incoming_frame.decoded
|
14
|
-
incoming_frame.to_s.
|
8
|
+
expect(outgoing_frame.error).to be_nil
|
9
|
+
incoming_frame = WebSocket::Frame::Incoming::Server.new(data: outgoing_frame.to_s).next
|
10
|
+
expect(incoming_frame).not_to be_nil
|
11
|
+
expect(incoming_frame.class).to eql(WebSocket::Frame::Incoming::Server)
|
12
|
+
expect(incoming_frame.error).to be_nil
|
13
|
+
expect(incoming_frame.decoded?).to be true
|
14
|
+
expect(incoming_frame.to_s).to eql('Hello World')
|
15
15
|
end
|
16
16
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Outgoing frame draft 03' do
|
4
|
+
RSpec.describe 'Outgoing frame draft 03' do
|
5
5
|
let(:version) { 03 }
|
6
|
-
let(:frame) { WebSocket::Frame::Outgoing.new(:
|
7
|
-
let(:decoded_text) {
|
6
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(version: version, data: decoded_text, type: frame_type) }
|
7
|
+
let(:decoded_text) { '' }
|
8
8
|
let(:encoded_text) { "\x04\x00" }
|
9
9
|
let(:frame_type) { :text }
|
10
10
|
let(:require_sending) { true }
|
@@ -13,62 +13,62 @@ describe 'Outgoing frame draft 03' do
|
|
13
13
|
|
14
14
|
it_should_behave_like 'valid_outgoing_frame'
|
15
15
|
|
16
|
-
context
|
16
|
+
context 'should properly encode close frame' do
|
17
17
|
let(:frame_type) { :close }
|
18
|
-
let(:decoded_text) {
|
18
|
+
let(:decoded_text) { 'Hello' }
|
19
19
|
let(:encoded_text) { "\x01\x05" + decoded_text }
|
20
20
|
let(:require_sending) { true }
|
21
21
|
|
22
22
|
it_should_behave_like 'valid_outgoing_frame'
|
23
23
|
end
|
24
24
|
|
25
|
-
context
|
25
|
+
context 'should properly encode ping frame' do
|
26
26
|
let(:frame_type) { :ping }
|
27
|
-
let(:decoded_text) {
|
27
|
+
let(:decoded_text) { 'Hello' }
|
28
28
|
let(:encoded_text) { "\x02\x05" + decoded_text }
|
29
29
|
let(:require_sending) { true }
|
30
30
|
|
31
31
|
it_should_behave_like 'valid_outgoing_frame'
|
32
32
|
end
|
33
33
|
|
34
|
-
context
|
34
|
+
context 'should properly encode pong frame' do
|
35
35
|
let(:frame_type) { :pong }
|
36
|
-
let(:decoded_text) {
|
36
|
+
let(:decoded_text) { 'Hello' }
|
37
37
|
let(:encoded_text) { "\x03\x05" + decoded_text }
|
38
38
|
let(:require_sending) { true }
|
39
39
|
|
40
40
|
it_should_behave_like 'valid_outgoing_frame'
|
41
41
|
end
|
42
42
|
|
43
|
-
context
|
44
|
-
let(:decoded_text) {
|
43
|
+
context 'should properly encode text frame' do
|
44
|
+
let(:decoded_text) { 'Hello' }
|
45
45
|
let(:encoded_text) { "\x04\x05" + decoded_text }
|
46
46
|
let(:require_sending) { true }
|
47
47
|
|
48
48
|
it_should_behave_like 'valid_outgoing_frame'
|
49
49
|
end
|
50
50
|
|
51
|
-
context
|
51
|
+
context 'should properly encode 256 bytes binary frame' do
|
52
52
|
let(:frame_type) { :binary }
|
53
|
-
let(:decoded_text) {
|
53
|
+
let(:decoded_text) { 'a' * 256 }
|
54
54
|
let(:encoded_text) { "\x05\x7E\x01\x00" + decoded_text }
|
55
55
|
let(:require_sending) { true }
|
56
56
|
|
57
57
|
it_should_behave_like 'valid_outgoing_frame'
|
58
58
|
end
|
59
59
|
|
60
|
-
context
|
60
|
+
context 'should properly encode 64KiB binary frame' do
|
61
61
|
let(:frame_type) { :binary }
|
62
|
-
let(:decoded_text) {
|
62
|
+
let(:decoded_text) { 'a' * 65_536 }
|
63
63
|
let(:encoded_text) { "\x05\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
64
64
|
let(:require_sending) { true }
|
65
65
|
|
66
66
|
it_should_behave_like 'valid_outgoing_frame'
|
67
67
|
end
|
68
68
|
|
69
|
-
context
|
69
|
+
context 'should return error for unknown frame type' do
|
70
70
|
let(:frame_type) { :unknown }
|
71
|
-
let(:decoded_text) {
|
71
|
+
let(:decoded_text) { 'Hello' }
|
72
72
|
let(:encoded_text) { nil }
|
73
73
|
let(:error) { :unknown_frame_type }
|
74
74
|
let(:require_sending) { false }
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Outgoing frame draft 04' do
|
4
|
+
RSpec.describe 'Outgoing frame draft 04' do
|
5
5
|
let(:version) { 04 }
|
6
|
-
let(:frame) { WebSocket::Frame::Outgoing.new(:
|
7
|
-
let(:decoded_text) {
|
6
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(version: version, data: decoded_text, type: frame_type) }
|
7
|
+
let(:decoded_text) { '' }
|
8
8
|
let(:encoded_text) { "\x84\x00" }
|
9
9
|
let(:frame_type) { :text }
|
10
10
|
let(:require_sending) { true }
|
@@ -13,62 +13,62 @@ describe 'Outgoing frame draft 04' do
|
|
13
13
|
|
14
14
|
it_should_behave_like 'valid_outgoing_frame'
|
15
15
|
|
16
|
-
context
|
16
|
+
context 'should properly encode close frame' do
|
17
17
|
let(:frame_type) { :close }
|
18
|
-
let(:decoded_text) {
|
18
|
+
let(:decoded_text) { 'Hello' }
|
19
19
|
let(:encoded_text) { "\x81\x05" + decoded_text }
|
20
20
|
let(:require_sending) { true }
|
21
21
|
|
22
22
|
it_should_behave_like 'valid_outgoing_frame'
|
23
23
|
end
|
24
24
|
|
25
|
-
context
|
25
|
+
context 'should properly encode ping frame' do
|
26
26
|
let(:frame_type) { :ping }
|
27
|
-
let(:decoded_text) {
|
27
|
+
let(:decoded_text) { 'Hello' }
|
28
28
|
let(:encoded_text) { "\x82\x05" + decoded_text }
|
29
29
|
let(:require_sending) { true }
|
30
30
|
|
31
31
|
it_should_behave_like 'valid_outgoing_frame'
|
32
32
|
end
|
33
33
|
|
34
|
-
context
|
34
|
+
context 'should properly encode pong frame' do
|
35
35
|
let(:frame_type) { :pong }
|
36
|
-
let(:decoded_text) {
|
36
|
+
let(:decoded_text) { 'Hello' }
|
37
37
|
let(:encoded_text) { "\x83\x05" + decoded_text }
|
38
38
|
let(:require_sending) { true }
|
39
39
|
|
40
40
|
it_should_behave_like 'valid_outgoing_frame'
|
41
41
|
end
|
42
42
|
|
43
|
-
context
|
44
|
-
let(:decoded_text) {
|
43
|
+
context 'should properly encode text frame' do
|
44
|
+
let(:decoded_text) { 'Hello' }
|
45
45
|
let(:encoded_text) { "\x84\x05" + decoded_text }
|
46
46
|
let(:require_sending) { true }
|
47
47
|
|
48
48
|
it_should_behave_like 'valid_outgoing_frame'
|
49
49
|
end
|
50
50
|
|
51
|
-
context
|
51
|
+
context 'should properly encode 256 bytes binary frame' do
|
52
52
|
let(:frame_type) { :binary }
|
53
|
-
let(:decoded_text) {
|
53
|
+
let(:decoded_text) { 'a' * 256 }
|
54
54
|
let(:encoded_text) { "\x85\x7E\x01\x00" + decoded_text }
|
55
55
|
let(:require_sending) { true }
|
56
56
|
|
57
57
|
it_should_behave_like 'valid_outgoing_frame'
|
58
58
|
end
|
59
59
|
|
60
|
-
context
|
60
|
+
context 'should properly encode 64KiB binary frame' do
|
61
61
|
let(:frame_type) { :binary }
|
62
|
-
let(:decoded_text) {
|
62
|
+
let(:decoded_text) { 'a' * 65_536 }
|
63
63
|
let(:encoded_text) { "\x85\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
64
64
|
let(:require_sending) { true }
|
65
65
|
|
66
66
|
it_should_behave_like 'valid_outgoing_frame'
|
67
67
|
end
|
68
68
|
|
69
|
-
context
|
69
|
+
context 'should return error for unknown frame type' do
|
70
70
|
let(:frame_type) { :unknown }
|
71
|
-
let(:decoded_text) {
|
71
|
+
let(:decoded_text) { 'Hello' }
|
72
72
|
let(:encoded_text) { nil }
|
73
73
|
let(:error) { :unknown_frame_type }
|
74
74
|
let(:require_sending) { false }
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Outgoing frame draft 05' do
|
4
|
+
RSpec.describe 'Outgoing frame draft 05' do
|
5
5
|
let(:version) { 5 }
|
6
|
-
let(:frame) { WebSocket::Frame::Outgoing.new(:
|
7
|
-
let(:decoded_text) {
|
6
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(version: version, data: decoded_text, type: frame_type) }
|
7
|
+
let(:decoded_text) { '' }
|
8
8
|
let(:encoded_text) { "\x84\x00" }
|
9
9
|
let(:frame_type) { :text }
|
10
10
|
let(:require_sending) { true }
|
@@ -13,62 +13,62 @@ describe 'Outgoing frame draft 05' do
|
|
13
13
|
|
14
14
|
it_should_behave_like 'valid_outgoing_frame'
|
15
15
|
|
16
|
-
context
|
16
|
+
context 'should properly encode close frame' do
|
17
17
|
let(:frame_type) { :close }
|
18
|
-
let(:decoded_text) {
|
18
|
+
let(:decoded_text) { 'Hello' }
|
19
19
|
let(:encoded_text) { "\x81\x05" + decoded_text }
|
20
20
|
let(:require_sending) { true }
|
21
21
|
|
22
22
|
it_should_behave_like 'valid_outgoing_frame'
|
23
23
|
end
|
24
24
|
|
25
|
-
context
|
25
|
+
context 'should properly encode ping frame' do
|
26
26
|
let(:frame_type) { :ping }
|
27
|
-
let(:decoded_text) {
|
27
|
+
let(:decoded_text) { 'Hello' }
|
28
28
|
let(:encoded_text) { "\x82\x05" + decoded_text }
|
29
29
|
let(:require_sending) { true }
|
30
30
|
|
31
31
|
it_should_behave_like 'valid_outgoing_frame'
|
32
32
|
end
|
33
33
|
|
34
|
-
context
|
34
|
+
context 'should properly encode pong frame' do
|
35
35
|
let(:frame_type) { :pong }
|
36
|
-
let(:decoded_text) {
|
36
|
+
let(:decoded_text) { 'Hello' }
|
37
37
|
let(:encoded_text) { "\x83\x05" + decoded_text }
|
38
38
|
let(:require_sending) { true }
|
39
39
|
|
40
40
|
it_should_behave_like 'valid_outgoing_frame'
|
41
41
|
end
|
42
42
|
|
43
|
-
context
|
44
|
-
let(:decoded_text) {
|
43
|
+
context 'should properly encode text frame' do
|
44
|
+
let(:decoded_text) { 'Hello' }
|
45
45
|
let(:encoded_text) { "\x84\x05" + decoded_text }
|
46
46
|
let(:require_sending) { true }
|
47
47
|
|
48
48
|
it_should_behave_like 'valid_outgoing_frame'
|
49
49
|
end
|
50
50
|
|
51
|
-
context
|
51
|
+
context 'should properly encode 256 bytes binary frame' do
|
52
52
|
let(:frame_type) { :binary }
|
53
|
-
let(:decoded_text) {
|
53
|
+
let(:decoded_text) { 'a' * 256 }
|
54
54
|
let(:encoded_text) { "\x85\x7E\x01\x00" + decoded_text }
|
55
55
|
let(:require_sending) { true }
|
56
56
|
|
57
57
|
it_should_behave_like 'valid_outgoing_frame'
|
58
58
|
end
|
59
59
|
|
60
|
-
context
|
60
|
+
context 'should properly encode 64KiB binary frame' do
|
61
61
|
let(:frame_type) { :binary }
|
62
|
-
let(:decoded_text) {
|
62
|
+
let(:decoded_text) { 'a' * 65_536 }
|
63
63
|
let(:encoded_text) { "\x85\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
64
64
|
let(:require_sending) { true }
|
65
65
|
|
66
66
|
it_should_behave_like 'valid_outgoing_frame'
|
67
67
|
end
|
68
68
|
|
69
|
-
context
|
69
|
+
context 'should return error for unknown frame type' do
|
70
70
|
let(:frame_type) { :unknown }
|
71
|
-
let(:decoded_text) {
|
71
|
+
let(:decoded_text) { 'Hello' }
|
72
72
|
let(:encoded_text) { nil }
|
73
73
|
let(:error) { :unknown_frame_type }
|
74
74
|
let(:require_sending) { false }
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Outgoing frame draft 07' do
|
4
|
+
RSpec.describe 'Outgoing frame draft 07' do
|
5
5
|
let(:version) { 7 }
|
6
|
-
let(:frame) { WebSocket::Frame::Outgoing.new(:
|
7
|
-
let(:decoded_text) {
|
6
|
+
let(:frame) { WebSocket::Frame::Outgoing.new(version: version, data: decoded_text, type: frame_type, code: close_code) }
|
7
|
+
let(:decoded_text) { '' }
|
8
8
|
let(:close_code) { nil }
|
9
9
|
let(:encoded_text) { "\x81\x00" }
|
10
10
|
let(:frame_type) { :text }
|
@@ -14,18 +14,18 @@ describe 'Outgoing frame draft 07' do
|
|
14
14
|
|
15
15
|
it_should_behave_like 'valid_outgoing_frame'
|
16
16
|
|
17
|
-
context
|
17
|
+
context 'should properly encode close frame without close code' do
|
18
18
|
let(:frame_type) { :close }
|
19
|
-
let(:decoded_text) {
|
19
|
+
let(:decoded_text) { 'Hello' }
|
20
20
|
let(:encoded_text) { "\x88\x07\x03\xE8" + decoded_text }
|
21
21
|
let(:require_sending) { true }
|
22
22
|
|
23
23
|
it_should_behave_like 'valid_outgoing_frame'
|
24
24
|
end
|
25
25
|
|
26
|
-
context
|
26
|
+
context 'should properly encode close frame with close code' do
|
27
27
|
let(:frame_type) { :close }
|
28
|
-
let(:decoded_text) {
|
28
|
+
let(:decoded_text) { 'Hello' }
|
29
29
|
let(:close_code) { 1001 }
|
30
30
|
let(:encoded_text) { "\x88\x07\x03\xE9" + decoded_text }
|
31
31
|
let(:require_sending) { true }
|
@@ -33,53 +33,53 @@ describe 'Outgoing frame draft 07' do
|
|
33
33
|
it_should_behave_like 'valid_outgoing_frame'
|
34
34
|
end
|
35
35
|
|
36
|
-
context
|
36
|
+
context 'should properly encode ping frame' do
|
37
37
|
let(:frame_type) { :ping }
|
38
|
-
let(:decoded_text) {
|
38
|
+
let(:decoded_text) { 'Hello' }
|
39
39
|
let(:encoded_text) { "\x89\x05" + decoded_text }
|
40
40
|
let(:require_sending) { true }
|
41
41
|
|
42
42
|
it_should_behave_like 'valid_outgoing_frame'
|
43
43
|
end
|
44
44
|
|
45
|
-
context
|
45
|
+
context 'should properly encode pong frame' do
|
46
46
|
let(:frame_type) { :pong }
|
47
|
-
let(:decoded_text) {
|
47
|
+
let(:decoded_text) { 'Hello' }
|
48
48
|
let(:encoded_text) { "\x8a\x05" + decoded_text }
|
49
49
|
let(:require_sending) { true }
|
50
50
|
|
51
51
|
it_should_behave_like 'valid_outgoing_frame'
|
52
52
|
end
|
53
53
|
|
54
|
-
context
|
55
|
-
let(:decoded_text) {
|
54
|
+
context 'should properly encode text frame' do
|
55
|
+
let(:decoded_text) { 'Hello' }
|
56
56
|
let(:encoded_text) { "\x81\x05" + decoded_text }
|
57
57
|
let(:require_sending) { true }
|
58
58
|
|
59
59
|
it_should_behave_like 'valid_outgoing_frame'
|
60
60
|
end
|
61
61
|
|
62
|
-
context
|
62
|
+
context 'should properly encode 256 bytes binary frame' do
|
63
63
|
let(:frame_type) { :binary }
|
64
|
-
let(:decoded_text) {
|
64
|
+
let(:decoded_text) { 'a' * 256 }
|
65
65
|
let(:encoded_text) { "\x82\x7E\x01\x00" + decoded_text }
|
66
66
|
let(:require_sending) { true }
|
67
67
|
|
68
68
|
it_should_behave_like 'valid_outgoing_frame'
|
69
69
|
end
|
70
70
|
|
71
|
-
context
|
71
|
+
context 'should properly encode 64KiB binary frame' do
|
72
72
|
let(:frame_type) { :binary }
|
73
|
-
let(:decoded_text) {
|
73
|
+
let(:decoded_text) { 'a' * 65_536 }
|
74
74
|
let(:encoded_text) { "\x82\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
75
75
|
let(:require_sending) { true }
|
76
76
|
|
77
77
|
it_should_behave_like 'valid_outgoing_frame'
|
78
78
|
end
|
79
79
|
|
80
|
-
context
|
80
|
+
context 'should return error for unknown frame type' do
|
81
81
|
let(:frame_type) { :unknown }
|
82
|
-
let(:decoded_text) {
|
82
|
+
let(:decoded_text) { 'Hello' }
|
83
83
|
let(:encoded_text) { nil }
|
84
84
|
let(:error) { :unknown_frame_type }
|
85
85
|
let(:require_sending) { false }
|