uquic/streams_map_outgoing_generic_test.go
2018-02-06 07:49:10 +08:00

78 lines
2.1 KiB
Go

package quic
import (
"errors"
"github.com/lucas-clemente/quic-go/internal/protocol"
"github.com/lucas-clemente/quic-go/qerr"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Streams Map (outgoing)", func() {
const firstNewStream protocol.StreamID = 10
var (
m *outgoingItemsMap
newItem func(id protocol.StreamID) item
)
BeforeEach(func() {
newItem = func(id protocol.StreamID) item {
return id
}
m = newOutgoingItemsMap(firstNewStream, newItem)
})
It("opens streams", func() {
str, err := m.OpenStream()
Expect(err).ToNot(HaveOccurred())
Expect(str).To(Equal(firstNewStream))
str, err = m.OpenStream()
Expect(err).ToNot(HaveOccurred())
Expect(str).To(Equal(firstNewStream + 4))
})
It("doesn't open streams after it has been closed", func() {
testErr := errors.New("close")
m.CloseWithError(testErr)
_, err := m.OpenStream()
Expect(err).To(MatchError(testErr))
})
It("gets streams", func() {
_, err := m.OpenStream()
Expect(err).ToNot(HaveOccurred())
str, err := m.GetStream(firstNewStream)
Expect(err).ToNot(HaveOccurred())
Expect(str).To(Equal(firstNewStream))
})
It("errors when trying to get a stream that has not yet been opened", func() {
_, err := m.GetStream(10)
Expect(err).To(MatchError(qerr.Error(qerr.InvalidStreamID, "peer attempted to open stream 10")))
})
It("deletes streams", func() {
_, err := m.OpenStream() // opens stream 10
Expect(err).ToNot(HaveOccurred())
err = m.DeleteStream(10)
Expect(err).ToNot(HaveOccurred())
str, err := m.GetStream(10)
Expect(err).ToNot(HaveOccurred())
Expect(str).To(BeNil())
})
It("errors when deleting a non-existing stream", func() {
err := m.DeleteStream(1337)
Expect(err).To(MatchError("Tried to delete unknown stream 1337"))
})
It("errors when deleting a stream twice", func() {
_, err := m.OpenStream() // opens stream 10
Expect(err).ToNot(HaveOccurred())
err = m.DeleteStream(10)
Expect(err).ToNot(HaveOccurred())
err = m.DeleteStream(10)
Expect(err).To(MatchError("Tried to delete unknown stream 10"))
})
})