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:
Marten Seemann
2024-08-04 15:42:56 -07:00
committed by GitHub
parent d1f9af4cc6
commit af9fa7a555
20 changed files with 526 additions and 553 deletions

View File

@@ -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()