refactor stream to remove a couple of race conditions

fixes #42
This commit is contained in:
Lucas Clemente
2016-05-11 22:30:14 +02:00
parent 8b1009d482
commit 060df6be7d
5 changed files with 193 additions and 208 deletions

View File

@@ -0,0 +1,49 @@
package quic
import (
"github.com/lucas-clemente/quic-go/frames"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("StreamFrame sorter", func() {
var (
s streamFrameSorter
)
BeforeEach(func() {
s = streamFrameSorter{}
})
It("head returns nil when empty", func() {
Expect(s.Head()).To(BeNil())
})
It("inserts and pops a single frame", func() {
f := &frames.StreamFrame{}
s.Push(f)
Expect(s.Head()).To(Equal(f))
Expect(s.Pop()).To(Equal(f))
Expect(s.Head()).To(BeNil())
})
It("inserts two frames in order", func() {
f1 := &frames.StreamFrame{Offset: 1}
f2 := &frames.StreamFrame{Offset: 2}
s.Push(f1)
s.Push(f2)
Expect(s.Pop()).To(Equal(f1))
Expect(s.Pop()).To(Equal(f2))
Expect(s.Head()).To(BeNil())
})
It("inserts two frames out of order", func() {
f1 := &frames.StreamFrame{Offset: 1}
f2 := &frames.StreamFrame{Offset: 2}
s.Push(f2)
s.Push(f1)
Expect(s.Pop()).To(Equal(f1))
Expect(s.Pop()).To(Equal(f2))
Expect(s.Head()).To(BeNil())
})
})