better tests for PublicHeader

This commit is contained in:
Marten Seemann
2016-05-06 21:15:57 +07:00
parent a1f6289587
commit 965addac79
2 changed files with 20 additions and 5 deletions

View File

@@ -9,6 +9,12 @@ import (
"github.com/lucas-clemente/quic-go/utils"
)
var (
errResetAndVersionFlagSet = errors.New("PublicHeader: Reset Flag and Version Flag should not be set at the same time")
errReceivedTruncatedConnectionID = errors.New("PublicHeader: Receiving packets with truncated ConnectionID is not supported")
errInvalidConnectionID = errors.New("PublicHeader: connection ID cannot be 0")
)
// The PublicHeader of a QUIC packet
type PublicHeader struct {
Raw []byte
@@ -25,7 +31,7 @@ type PublicHeader struct {
func (h *PublicHeader) WritePublicHeader(b *bytes.Buffer) error {
publicFlagByte := uint8(0x3c)
if h.VersionFlag && h.ResetFlag {
return errors.New("Reset Flag and Version Flag should not be set at the same time")
return errResetAndVersionFlagSet
}
if h.VersionFlag {
publicFlagByte |= 0x01
@@ -58,7 +64,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
// }
if publicFlagByte&0x08 == 0 {
return nil, errors.New("truncating connection ID is not supported")
return nil, errReceivedTruncatedConnectionID
}
switch publicFlagByte & 0x30 {
@@ -79,7 +85,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
}
header.ConnectionID = protocol.ConnectionID(connID)
if header.ConnectionID == 0 {
return nil, errors.New("PublicHeader: connection ID cannot be 0")
return nil, errInvalidConnectionID
}
// Version (optional)
@@ -93,11 +99,11 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
}
// Packet number
pcktNumber, err := utils.ReadUintN(b, header.PacketNumberLen)
packetNumber, err := utils.ReadUintN(b, header.PacketNumberLen)
if err != nil {
return nil, err
}
header.PacketNumber = protocol.PacketNumber(pcktNumber)
header.PacketNumber = protocol.PacketNumber(packetNumber)
return header, nil
}

View File

@@ -26,6 +26,14 @@ var _ = Describe("Public Header", func() {
b := bytes.NewReader([]byte{0x00, 0x01})
_, err := ParsePublicHeader(b)
Expect(err).To(HaveOccurred())
Expect(err).To(Equal(errReceivedTruncatedConnectionID))
})
It("rejects 0 as a connection ID", func() {
b := bytes.NewReader([]byte{0x09, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x51, 0x30, 0x33, 0x30, 0x01})
_, err := ParsePublicHeader(b)
Expect(err).To(HaveOccurred())
Expect(err).To(Equal(errInvalidConnectionID))
})
It("accepts 1-byte packet numbers", func() {
@@ -115,6 +123,7 @@ var _ = Describe("Public Header", func() {
}
err := publicHeader.WritePublicHeader(b)
Expect(err).To(HaveOccurred())
Expect(err).To(Equal(errResetAndVersionFlagSet))
})
})
})