From 86d5044eec4a4f68d358aeb9ebe9d62e19df4b71 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sat, 3 Aug 2024 16:57:03 -0700 Subject: [PATCH] remove trivial mock implementation of the cryptoStream interface (#4620) * remove trivial mock implementation of the cryptoStream interface No functional change expected. * fix tests --- crypto_stream_manager_test.go | 38 ++--- mock_crypto_stream_test.go | 270 ---------------------------------- mockgen.go | 3 - packet_packer_test.go | 98 +++--------- 4 files changed, 36 insertions(+), 373 deletions(-) delete mode 100644 mock_crypto_stream_test.go diff --git a/crypto_stream_manager_test.go b/crypto_stream_manager_test.go index 5d32d016..0fba7e8a 100644 --- a/crypto_stream_manager_test.go +++ b/crypto_stream_manager_test.go @@ -12,49 +12,39 @@ var _ = Describe("Crypto Stream Manager", func() { var ( csm *cryptoStreamManager - initialStream *MockCryptoStream - handshakeStream *MockCryptoStream - oneRTTStream *MockCryptoStream + initialStream cryptoStream + handshakeStream cryptoStream + oneRTTStream cryptoStream ) BeforeEach(func() { - initialStream = NewMockCryptoStream(mockCtrl) - handshakeStream = NewMockCryptoStream(mockCtrl) - oneRTTStream = NewMockCryptoStream(mockCtrl) + initialStream = newCryptoStream() + handshakeStream = newCryptoStream() + oneRTTStream = newCryptoStream() csm = newCryptoStreamManager(initialStream, handshakeStream, oneRTTStream) }) It("passes messages to the initial stream", func() { cf := &wire.CryptoFrame{Data: []byte("foobar")} - initialStream.EXPECT().HandleCryptoFrame(cf) - initialStream.EXPECT().GetCryptoData().Return([]byte("foobar")) Expect(csm.HandleCryptoFrame(cf, protocol.EncryptionInitial)).To(Succeed()) Expect(csm.GetCryptoData(protocol.EncryptionInitial)).To(Equal([]byte("foobar"))) }) It("passes messages to the handshake stream", func() { cf := &wire.CryptoFrame{Data: []byte("foobar")} - handshakeStream.EXPECT().HandleCryptoFrame(cf) - handshakeStream.EXPECT().GetCryptoData().Return([]byte("foobar")) Expect(csm.HandleCryptoFrame(cf, protocol.EncryptionHandshake)).To(Succeed()) Expect(csm.GetCryptoData(protocol.EncryptionHandshake)).To(Equal([]byte("foobar"))) }) It("passes messages to the 1-RTT stream", func() { cf := &wire.CryptoFrame{Data: []byte("foobar")} - oneRTTStream.EXPECT().HandleCryptoFrame(cf) - oneRTTStream.EXPECT().GetCryptoData().Return([]byte("foobar")) Expect(csm.HandleCryptoFrame(cf, protocol.Encryption1RTT)).To(Succeed()) Expect(csm.GetCryptoData(protocol.Encryption1RTT)).To(Equal([]byte("foobar"))) }) It("processes all messages", func() { - cf := &wire.CryptoFrame{Data: []byte("foobar")} - handshakeStream.EXPECT().HandleCryptoFrame(cf) - handshakeStream.EXPECT().GetCryptoData().Return([]byte("foo")) - handshakeStream.EXPECT().GetCryptoData().Return([]byte("bar")) - handshakeStream.EXPECT().GetCryptoData() - Expect(csm.HandleCryptoFrame(cf, protocol.EncryptionHandshake)).To(Succeed()) + Expect(csm.HandleCryptoFrame(&wire.CryptoFrame{Data: []byte("bar"), Offset: 3}, protocol.EncryptionHandshake)).To(Succeed()) + Expect(csm.HandleCryptoFrame(&wire.CryptoFrame{Data: []byte("foo")}, protocol.EncryptionHandshake)).To(Succeed()) var data []byte for { b := csm.GetCryptoData(protocol.EncryptionHandshake) @@ -73,12 +63,16 @@ var _ = Describe("Crypto Stream Manager", func() { }) It("drops Initial", func() { - initialStream.EXPECT().Finish() - Expect(csm.Drop(protocol.EncryptionInitial)).To(Succeed()) + Expect(initialStream.HandleCryptoFrame(&wire.CryptoFrame{Data: []byte("foo")})).To(Succeed()) + err := csm.Drop(protocol.EncryptionInitial) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("encryption level changed, but crypto stream has more data to read")) }) It("drops Handshake", func() { - handshakeStream.EXPECT().Finish() - Expect(csm.Drop(protocol.EncryptionHandshake)).To(Succeed()) + Expect(handshakeStream.HandleCryptoFrame(&wire.CryptoFrame{Data: []byte("foo")})).To(Succeed()) + err := csm.Drop(protocol.EncryptionHandshake) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("encryption level changed, but crypto stream has more data to read")) }) }) diff --git a/mock_crypto_stream_test.go b/mock_crypto_stream_test.go deleted file mode 100644 index bd762d64..00000000 --- a/mock_crypto_stream_test.go +++ /dev/null @@ -1,270 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/quic-go/quic-go (interfaces: CryptoStream) -// -// Generated by this command: -// -// mockgen -typed -build_flags=-tags=gomock -package quic -self_package github.com/quic-go/quic-go -destination mock_crypto_stream_test.go github.com/quic-go/quic-go CryptoStream -// - -// Package quic is a generated GoMock package. -package quic - -import ( - reflect "reflect" - - protocol "github.com/quic-go/quic-go/internal/protocol" - wire "github.com/quic-go/quic-go/internal/wire" - gomock "go.uber.org/mock/gomock" -) - -// MockCryptoStream is a mock of CryptoStream interface. -type MockCryptoStream struct { - ctrl *gomock.Controller - recorder *MockCryptoStreamMockRecorder -} - -// MockCryptoStreamMockRecorder is the mock recorder for MockCryptoStream. -type MockCryptoStreamMockRecorder struct { - mock *MockCryptoStream -} - -// NewMockCryptoStream creates a new mock instance. -func NewMockCryptoStream(ctrl *gomock.Controller) *MockCryptoStream { - mock := &MockCryptoStream{ctrl: ctrl} - mock.recorder = &MockCryptoStreamMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockCryptoStream) EXPECT() *MockCryptoStreamMockRecorder { - return m.recorder -} - -// Finish mocks base method. -func (m *MockCryptoStream) Finish() error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Finish") - ret0, _ := ret[0].(error) - return ret0 -} - -// Finish indicates an expected call of Finish. -func (mr *MockCryptoStreamMockRecorder) Finish() *MockCryptoStreamFinishCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Finish", reflect.TypeOf((*MockCryptoStream)(nil).Finish)) - return &MockCryptoStreamFinishCall{Call: call} -} - -// MockCryptoStreamFinishCall wrap *gomock.Call -type MockCryptoStreamFinishCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockCryptoStreamFinishCall) Return(arg0 error) *MockCryptoStreamFinishCall { - c.Call = c.Call.Return(arg0) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockCryptoStreamFinishCall) Do(f func() error) *MockCryptoStreamFinishCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockCryptoStreamFinishCall) DoAndReturn(f func() error) *MockCryptoStreamFinishCall { - c.Call = c.Call.DoAndReturn(f) - return c -} - -// GetCryptoData mocks base method. -func (m *MockCryptoStream) GetCryptoData() []byte { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCryptoData") - ret0, _ := ret[0].([]byte) - return ret0 -} - -// GetCryptoData indicates an expected call of GetCryptoData. -func (mr *MockCryptoStreamMockRecorder) GetCryptoData() *MockCryptoStreamGetCryptoDataCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCryptoData", reflect.TypeOf((*MockCryptoStream)(nil).GetCryptoData)) - return &MockCryptoStreamGetCryptoDataCall{Call: call} -} - -// MockCryptoStreamGetCryptoDataCall wrap *gomock.Call -type MockCryptoStreamGetCryptoDataCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockCryptoStreamGetCryptoDataCall) Return(arg0 []byte) *MockCryptoStreamGetCryptoDataCall { - c.Call = c.Call.Return(arg0) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockCryptoStreamGetCryptoDataCall) Do(f func() []byte) *MockCryptoStreamGetCryptoDataCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockCryptoStreamGetCryptoDataCall) DoAndReturn(f func() []byte) *MockCryptoStreamGetCryptoDataCall { - c.Call = c.Call.DoAndReturn(f) - return c -} - -// HandleCryptoFrame mocks base method. -func (m *MockCryptoStream) HandleCryptoFrame(arg0 *wire.CryptoFrame) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "HandleCryptoFrame", arg0) - ret0, _ := ret[0].(error) - return ret0 -} - -// HandleCryptoFrame indicates an expected call of HandleCryptoFrame. -func (mr *MockCryptoStreamMockRecorder) HandleCryptoFrame(arg0 any) *MockCryptoStreamHandleCryptoFrameCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HandleCryptoFrame", reflect.TypeOf((*MockCryptoStream)(nil).HandleCryptoFrame), arg0) - return &MockCryptoStreamHandleCryptoFrameCall{Call: call} -} - -// MockCryptoStreamHandleCryptoFrameCall wrap *gomock.Call -type MockCryptoStreamHandleCryptoFrameCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockCryptoStreamHandleCryptoFrameCall) Return(arg0 error) *MockCryptoStreamHandleCryptoFrameCall { - c.Call = c.Call.Return(arg0) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockCryptoStreamHandleCryptoFrameCall) Do(f func(*wire.CryptoFrame) error) *MockCryptoStreamHandleCryptoFrameCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockCryptoStreamHandleCryptoFrameCall) DoAndReturn(f func(*wire.CryptoFrame) error) *MockCryptoStreamHandleCryptoFrameCall { - c.Call = c.Call.DoAndReturn(f) - return c -} - -// HasData mocks base method. -func (m *MockCryptoStream) HasData() bool { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "HasData") - ret0, _ := ret[0].(bool) - return ret0 -} - -// HasData indicates an expected call of HasData. -func (mr *MockCryptoStreamMockRecorder) HasData() *MockCryptoStreamHasDataCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasData", reflect.TypeOf((*MockCryptoStream)(nil).HasData)) - return &MockCryptoStreamHasDataCall{Call: call} -} - -// MockCryptoStreamHasDataCall wrap *gomock.Call -type MockCryptoStreamHasDataCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockCryptoStreamHasDataCall) Return(arg0 bool) *MockCryptoStreamHasDataCall { - c.Call = c.Call.Return(arg0) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockCryptoStreamHasDataCall) Do(f func() bool) *MockCryptoStreamHasDataCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockCryptoStreamHasDataCall) DoAndReturn(f func() bool) *MockCryptoStreamHasDataCall { - c.Call = c.Call.DoAndReturn(f) - return c -} - -// PopCryptoFrame mocks base method. -func (m *MockCryptoStream) PopCryptoFrame(arg0 protocol.ByteCount) *wire.CryptoFrame { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PopCryptoFrame", arg0) - ret0, _ := ret[0].(*wire.CryptoFrame) - return ret0 -} - -// PopCryptoFrame indicates an expected call of PopCryptoFrame. -func (mr *MockCryptoStreamMockRecorder) PopCryptoFrame(arg0 any) *MockCryptoStreamPopCryptoFrameCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PopCryptoFrame", reflect.TypeOf((*MockCryptoStream)(nil).PopCryptoFrame), arg0) - return &MockCryptoStreamPopCryptoFrameCall{Call: call} -} - -// MockCryptoStreamPopCryptoFrameCall wrap *gomock.Call -type MockCryptoStreamPopCryptoFrameCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockCryptoStreamPopCryptoFrameCall) Return(arg0 *wire.CryptoFrame) *MockCryptoStreamPopCryptoFrameCall { - c.Call = c.Call.Return(arg0) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockCryptoStreamPopCryptoFrameCall) Do(f func(protocol.ByteCount) *wire.CryptoFrame) *MockCryptoStreamPopCryptoFrameCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockCryptoStreamPopCryptoFrameCall) DoAndReturn(f func(protocol.ByteCount) *wire.CryptoFrame) *MockCryptoStreamPopCryptoFrameCall { - c.Call = c.Call.DoAndReturn(f) - return c -} - -// Write mocks base method. -func (m *MockCryptoStream) Write(arg0 []byte) (int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Write", arg0) - ret0, _ := ret[0].(int) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Write indicates an expected call of Write. -func (mr *MockCryptoStreamMockRecorder) Write(arg0 any) *MockCryptoStreamWriteCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Write", reflect.TypeOf((*MockCryptoStream)(nil).Write), arg0) - return &MockCryptoStreamWriteCall{Call: call} -} - -// MockCryptoStreamWriteCall wrap *gomock.Call -type MockCryptoStreamWriteCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockCryptoStreamWriteCall) Return(arg0 int, arg1 error) *MockCryptoStreamWriteCall { - c.Call = c.Call.Return(arg0, arg1) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockCryptoStreamWriteCall) Do(f func([]byte) (int, error)) *MockCryptoStreamWriteCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockCryptoStreamWriteCall) DoAndReturn(f func([]byte) (int, error)) *MockCryptoStreamWriteCall { - c.Call = c.Call.DoAndReturn(f) - return c -} diff --git a/mockgen.go b/mockgen.go index 1a0c2905..cf0d6ad2 100644 --- a/mockgen.go +++ b/mockgen.go @@ -14,9 +14,6 @@ type Sender = sender //go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_internal_test.go github.com/quic-go/quic-go StreamI" type StreamI = streamI -//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_crypto_stream_test.go github.com/quic-go/quic-go CryptoStream" -type CryptoStream = cryptoStream - //go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_receive_stream_internal_test.go github.com/quic-go/quic-go ReceiveStreamI" type ReceiveStreamI = receiveStreamI diff --git a/packet_packer_test.go b/packet_packer_test.go index 7fbf1b37..54c4b3b2 100644 --- a/packet_packer_test.go +++ b/packet_packer_test.go @@ -31,8 +31,8 @@ var _ = Describe("Packet packer", func() { datagramQueue *datagramQueue framer *MockFrameSource ackFramer *MockAckFrameSource - initialStream *MockCryptoStream - handshakeStream *MockCryptoStream + initialStream cryptoStream + handshakeStream cryptoStream sealingManager *MockSealingManager pnManager *mockackhandler.MockSentPacketHandler ) @@ -86,8 +86,8 @@ var _ = Describe("Packet packer", func() { retransmissionQueue = newRetransmissionQueue() mockSender := NewMockStreamSender(mockCtrl) mockSender.EXPECT().onHasStreamData(gomock.Any(), gomock.Any()).AnyTimes() - initialStream = NewMockCryptoStream(mockCtrl) - handshakeStream = NewMockCryptoStream(mockCtrl) + initialStream = newCryptoStream() + handshakeStream = newCryptoStream() framer = NewMockFrameSource(mockCtrl) ackFramer = NewMockAckFrameSource(mockCtrl) sealingManager = NewMockSealingManager(mockCtrl) @@ -268,9 +268,7 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetInitialSealer().Return(nil, nil).AnyTimes() sealingManager.EXPECT().GetHandshakeSealer().Return(nil, nil).AnyTimes() sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable).AnyTimes() - initialStream.EXPECT().HasData().AnyTimes() ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, true).AnyTimes() - handshakeStream.EXPECT().HasData().AnyTimes() ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, true).AnyTimes() ackFramer.EXPECT().GetAckFrame(protocol.Encryption1RTT, true).AnyTimes() }) @@ -682,7 +680,6 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetHandshakeSealer().Return(sealer, nil) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) packer.retransmissionQueue.addHandshake(&wire.PingFrame{}) - handshakeStream.EXPECT().HasData() ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) packet, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) @@ -887,13 +884,8 @@ var _ = Describe("Packet packer", func() { It("sets the length", func() { pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42)) - f := &wire.CryptoFrame{ - Offset: 0x1337, - Data: []byte("foobar"), - } ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) - handshakeStream.EXPECT().HasData().Return(true).AnyTimes() - handshakeStream.EXPECT().PopCryptoFrame(gomock.Any()).Return(f) + handshakeStream.Write([]byte("foobar")) sealingManager.EXPECT().GetInitialSealer().Return(nil, handshake.ErrKeysDropped) sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) @@ -913,10 +905,7 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().Get0RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x42, Data: []byte("initial")} - }) + initialStream.Write([]byte("initial")) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) Expect(p.buffer.Len()).To(BeNumerically(">=", protocol.MinInitialPacketSize)) @@ -932,21 +921,13 @@ var _ = Describe("Packet packer", func() { }) It("packs a maximum size Handshake packet", func() { - var f *wire.CryptoFrame pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42)) sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, true) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) - initialStream.EXPECT().HasData() - handshakeStream.EXPECT().HasData().Return(true).Times(2) - handshakeStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - f = &wire.CryptoFrame{Offset: 0x1337} - f.Data = bytes.Repeat([]byte{'f'}, int(size-f.Length(protocol.Version1)-1)) - Expect(f.Length(protocol.Version1)).To(Equal(size)) - return f - }) + handshakeStream.Write(bytes.Repeat([]byte{'f'}, 2000)) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) Expect(p.longHdrPackets).To(HaveLen(1)) @@ -965,14 +946,8 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) // don't EXPECT any calls for a Handshake ACK frame - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x42, Data: []byte("initial")} - }) - handshakeStream.EXPECT().HasData().Return(true).Times(2) - handshakeStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x1337, Data: []byte("handshake")} - }) + initialStream.Write([]byte("initial")) + handshakeStream.Write([]byte("handshake")) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) Expect(p.buffer.Len()).To(BeEquivalentTo(maxPacketSize)) @@ -1001,11 +976,7 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) // don't EXPECT any calls for a Handshake ACK frame - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x42, Data: []byte("initial")} - }) - handshakeStream.EXPECT().HasData() + initialStream.Write([]byte("initial")) packer.retransmissionQueue.addHandshake(&wire.PingFrame{}) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) @@ -1034,8 +1005,6 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, gomock.Any()) - initialStream.EXPECT().HasData() - handshakeStream.EXPECT().HasData() packer.retransmissionQueue.addInitial(&wire.PingFrame{}) packer.retransmissionQueue.addHandshake(&wire.PingFrame{}) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) @@ -1064,10 +1033,7 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetHandshakeSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(getSealer(), nil) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x42, Data: []byte("initial")} - }) + initialStream.Write([]byte("initial")) expectAppendControlFrames() expectAppendStreamFrames() framer.EXPECT().HasData().Return(true) @@ -1103,10 +1069,7 @@ var _ = Describe("Packet packer", func() { framer.EXPECT().HasData().Return(true) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) // don't EXPECT any calls for a Handshake ACK frame - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x42, Data: []byte("initial")} - }) + initialStream.Write([]byte("initial")) expectAppendControlFrames() expectAppendStreamFrames(ackhandler.StreamFrame{Frame: &wire.StreamFrame{Data: []byte("foobar")}}) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) @@ -1140,10 +1103,7 @@ var _ = Describe("Packet packer", func() { framer.EXPECT().HasData().Return(true) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) // don't EXPECT any calls for a 1-RTT ACK frame - handshakeStream.EXPECT().HasData().Return(true).Times(2) - handshakeStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - return &wire.CryptoFrame{Offset: 0x1337, Data: []byte("handshake")} - }) + handshakeStream.Write([]byte("handshake")) expectAppendControlFrames() expectAppendStreamFrames(ackhandler.StreamFrame{Frame: &wire.StreamFrame{Data: []byte("foobar")}}) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) @@ -1171,20 +1131,16 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) // don't EXPECT any calls to GetHandshakeSealer and Get1RTTSealer ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) - handshakeStream.EXPECT().HasData().Return(true).Times(2) - handshakeStream.EXPECT().PopCryptoFrame(gomock.Any()).DoAndReturn(func(size protocol.ByteCount) *wire.CryptoFrame { - s := size - protocol.MinCoalescedPacketSize - f := &wire.CryptoFrame{Offset: 0x1337} - f.Data = bytes.Repeat([]byte{'f'}, int(s-f.Length(protocol.Version1)-1)) - Expect(f.Length(protocol.Version1)).To(Equal(s)) - return f - }) + handshakeStream.Write(bytes.Repeat([]byte{'f'}, int(maxPacketSize-protocol.MinCoalescedPacketSize-(&wire.CryptoFrame{}).Length(protocol.Version1)))) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) Expect(p.longHdrPackets).To(HaveLen(1)) Expect(p.shortHdrPacket).To(BeNil()) Expect(p.longHdrPackets[0].EncryptionLevel()).To(Equal(protocol.EncryptionHandshake)) - Expect(len(p.buffer.Data)).To(BeEquivalentTo(maxPacketSize - protocol.MinCoalescedPacketSize)) + Expect(len(p.buffer.Data)).To(And( + BeNumerically("<", maxPacketSize), + BeNumerically(">", maxPacketSize-protocol.MinCoalescedPacketSize), + )) parsePacket(p.buffer.Data) }) @@ -1196,7 +1152,6 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetHandshakeSealer().Return(sealer, nil) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) packer.retransmissionQueue.addHandshake(&wire.PingFrame{}) - handshakeStream.EXPECT().HasData() ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) packet, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) @@ -1235,7 +1190,6 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetHandshakeSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) - initialStream.EXPECT().HasData() p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) Expect(p.longHdrPackets).To(HaveLen(1)) @@ -1248,7 +1202,6 @@ var _ = Describe("Packet packer", func() { It("sends an Initial packet containing only an ACK", func() { ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 10, Largest: 20}}} ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, true).Return(ack) - initialStream.EXPECT().HasData().Times(2) sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) sealingManager.EXPECT().GetHandshakeSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) @@ -1264,7 +1217,6 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) sealingManager.EXPECT().GetHandshakeSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) - initialStream.EXPECT().HasData() ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, true) p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) @@ -1275,8 +1227,6 @@ var _ = Describe("Packet packer", func() { ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 10, Largest: 20}}} ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, true) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, true).Return(ack) - initialStream.EXPECT().HasData() - handshakeStream.EXPECT().HasData().Times(2) sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) @@ -1294,7 +1244,6 @@ var _ = Describe("Packet packer", func() { It(fmt.Sprintf("pads Initial packets to the required minimum packet size, for the %s", perspective), func() { token := []byte("initial token") packer.SetToken(token) - f := &wire.CryptoFrame{Data: []byte("foobar")} pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42)) sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) @@ -1302,8 +1251,7 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().Get0RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).Return(f) + initialStream.Write([]byte("foobar")) packer.perspective = protocol.PerspectiveClient p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) @@ -1318,7 +1266,6 @@ var _ = Describe("Packet packer", func() { } It("adds an ACK frame", func() { - f := &wire.CryptoFrame{Data: []byte("foobar")} ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 42, Largest: 1337}}} pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42)) @@ -1327,8 +1274,7 @@ var _ = Describe("Packet packer", func() { sealingManager.EXPECT().Get0RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) sealingManager.EXPECT().Get1RTTSealer().Return(nil, handshake.ErrKeysNotYetAvailable) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false).Return(ack) - initialStream.EXPECT().HasData().Return(true).Times(2) - initialStream.EXPECT().PopCryptoFrame(gomock.Any()).Return(f) + initialStream.Write([]byte("foobar")) packer.perspective = protocol.PerspectiveClient p, err := packer.PackCoalescedPacket(false, maxPacketSize, protocol.Version1) Expect(err).ToNot(HaveOccurred()) @@ -1349,7 +1295,6 @@ var _ = Describe("Packet packer", func() { retransmissionQueue.addInitial(f) sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) - initialStream.EXPECT().HasData() pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42)) @@ -1371,7 +1316,6 @@ var _ = Describe("Packet packer", func() { retransmissionQueue.addInitial(&wire.PingFrame{}) sealingManager.EXPECT().GetInitialSealer().Return(getSealer(), nil) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionInitial, false) - initialStream.EXPECT().HasData() pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen1) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionInitial).Return(protocol.PacketNumber(0x42)) @@ -1395,7 +1339,6 @@ var _ = Describe("Packet packer", func() { retransmissionQueue.addHandshake(f) sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) - handshakeStream.EXPECT().HasData() pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42)) @@ -1416,7 +1359,6 @@ var _ = Describe("Packet packer", func() { retransmissionQueue.addHandshake(f) sealingManager.EXPECT().GetHandshakeSealer().Return(getSealer(), nil) ackFramer.EXPECT().GetAckFrame(protocol.EncryptionHandshake, false) - handshakeStream.EXPECT().HasData() pnManager.EXPECT().PeekPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2) pnManager.EXPECT().PopPacketNumber(protocol.EncryptionHandshake).Return(protocol.PacketNumber(0x42))