forked from quic-go/quic-go
queue stream-related control frames in the respective stream (#4610)
* use a separate method for queueing control frames from the streams map * queue stream-related control frames in the respective stream
This commit is contained in:
@@ -14,7 +14,6 @@ import (
|
||||
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
"go.uber.org/mock/gomock"
|
||||
)
|
||||
|
||||
func (e streamError) TestError() error {
|
||||
@@ -72,8 +71,9 @@ var _ = Describe("Streams Map", func() {
|
||||
|
||||
Context(perspective.String(), func() {
|
||||
var (
|
||||
m *streamsMap
|
||||
mockSender *MockStreamSender
|
||||
m *streamsMap
|
||||
mockSender *MockStreamSender
|
||||
queuedControlFrames []wire.Frame
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -89,8 +89,17 @@ var _ = Describe("Streams Map", func() {
|
||||
}
|
||||
|
||||
BeforeEach(func() {
|
||||
queuedControlFrames = []wire.Frame{}
|
||||
mockSender = NewMockStreamSender(mockCtrl)
|
||||
m = newStreamsMap(context.Background(), mockSender, newFlowController, MaxBidiStreamNum, MaxUniStreamNum, perspective).(*streamsMap)
|
||||
m = newStreamsMap(
|
||||
context.Background(),
|
||||
mockSender,
|
||||
func(f wire.Frame) { queuedControlFrames = append(queuedControlFrames, f) },
|
||||
newFlowController,
|
||||
MaxBidiStreamNum,
|
||||
MaxUniStreamNum,
|
||||
perspective,
|
||||
)
|
||||
})
|
||||
|
||||
Context("opening", func() {
|
||||
@@ -140,10 +149,7 @@ var _ = Describe("Streams Map", func() {
|
||||
})
|
||||
|
||||
Context("deleting", func() {
|
||||
BeforeEach(func() {
|
||||
mockSender.EXPECT().queueControlFrame(gomock.Any()).AnyTimes()
|
||||
allowUnlimitedStreams()
|
||||
})
|
||||
BeforeEach(func() { allowUnlimitedStreams() })
|
||||
|
||||
It("deletes outgoing bidirectional streams", func() {
|
||||
id := ids.firstOutgoingBidiStream
|
||||
@@ -339,7 +345,6 @@ var _ = Describe("Streams Map", func() {
|
||||
})
|
||||
|
||||
It("processes the parameter for outgoing streams", func() {
|
||||
mockSender.EXPECT().queueControlFrame(gomock.Any())
|
||||
_, err := m.OpenStream()
|
||||
expectTooManyStreamsError(err)
|
||||
m.UpdateLimits(&wire.TransportParameters{
|
||||
@@ -347,7 +352,6 @@ var _ = Describe("Streams Map", func() {
|
||||
MaxUniStreamNum: 8,
|
||||
})
|
||||
|
||||
mockSender.EXPECT().queueControlFrame(gomock.Any()).Times(2)
|
||||
// test we can only 5 bidirectional streams
|
||||
for i := 0; i < 5; i++ {
|
||||
str, err := m.OpenStream()
|
||||
@@ -364,6 +368,7 @@ var _ = Describe("Streams Map", func() {
|
||||
}
|
||||
_, err = m.OpenUniStream()
|
||||
expectTooManyStreamsError(err)
|
||||
Expect(queuedControlFrames).To(HaveLen(3))
|
||||
})
|
||||
|
||||
if perspective == protocol.PerspectiveClient {
|
||||
@@ -399,10 +404,6 @@ var _ = Describe("Streams Map", func() {
|
||||
}
|
||||
|
||||
Context("handling MAX_STREAMS frames", func() {
|
||||
BeforeEach(func() {
|
||||
mockSender.EXPECT().queueControlFrame(gomock.Any()).AnyTimes()
|
||||
})
|
||||
|
||||
It("processes IDs for outgoing bidirectional streams", func() {
|
||||
_, err := m.OpenStream()
|
||||
expectTooManyStreamsError(err)
|
||||
@@ -438,11 +439,13 @@ var _ = Describe("Streams Map", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = m.AcceptStream(context.Background())
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
mockSender.EXPECT().queueControlFrame(&wire.MaxStreamsFrame{
|
||||
Type: protocol.StreamTypeBidi,
|
||||
MaxStreamNum: MaxBidiStreamNum + 1,
|
||||
})
|
||||
Expect(m.DeleteStream(ids.firstIncomingBidiStream)).To(Succeed())
|
||||
Expect(queuedControlFrames).To(Equal([]wire.Frame{
|
||||
&wire.MaxStreamsFrame{
|
||||
Type: protocol.StreamTypeBidi,
|
||||
MaxStreamNum: MaxBidiStreamNum + 1,
|
||||
},
|
||||
}))
|
||||
})
|
||||
|
||||
It("sends a MAX_STREAMS frame for unidirectional streams", func() {
|
||||
@@ -450,11 +453,13 @@ var _ = Describe("Streams Map", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = m.AcceptUniStream(context.Background())
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
mockSender.EXPECT().queueControlFrame(&wire.MaxStreamsFrame{
|
||||
Type: protocol.StreamTypeUni,
|
||||
MaxStreamNum: MaxUniStreamNum + 1,
|
||||
})
|
||||
Expect(m.DeleteStream(ids.firstIncomingUniStream)).To(Succeed())
|
||||
Expect(queuedControlFrames).To(Equal([]wire.Frame{
|
||||
&wire.MaxStreamsFrame{
|
||||
Type: protocol.StreamTypeUni,
|
||||
MaxStreamNum: MaxUniStreamNum + 1,
|
||||
},
|
||||
}))
|
||||
})
|
||||
})
|
||||
|
||||
@@ -477,7 +482,6 @@ var _ = Describe("Streams Map", func() {
|
||||
|
||||
if perspective == protocol.PerspectiveClient {
|
||||
It("resets for 0-RTT", func() {
|
||||
mockSender.EXPECT().queueControlFrame(gomock.Any()).AnyTimes()
|
||||
m.ResetFor0RTT()
|
||||
// make sure that calls to open / accept streams fail
|
||||
_, err := m.OpenStream()
|
||||
|
||||
Reference in New Issue
Block a user