mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-15 02:43:09 -06:00
127 lines
3 KiB
Go
127 lines
3 KiB
Go
package macaroon
|
|
|
|
import (
|
|
jc "github.com/juju/testing/checkers"
|
|
gc "gopkg.in/check.v1"
|
|
)
|
|
|
|
type packetV2Suite struct{}
|
|
|
|
var _ = gc.Suite(&packetV2Suite{})
|
|
|
|
var parsePacketV2Tests = []struct {
|
|
about string
|
|
data string
|
|
expectPacket packetV2
|
|
expectData string
|
|
expectError string
|
|
}{{
|
|
about: "EOS packet",
|
|
data: "\x00",
|
|
expectPacket: packetV2{
|
|
fieldType: fieldEOS,
|
|
},
|
|
}, {
|
|
about: "simple field",
|
|
data: "\x02\x03xyz",
|
|
expectPacket: packetV2{
|
|
fieldType: 2,
|
|
data: []byte("xyz"),
|
|
},
|
|
}, {
|
|
about: "empty buffer",
|
|
data: "",
|
|
expectError: "varint value extends past end of buffer",
|
|
}, {
|
|
about: "varint out of range",
|
|
data: "\xff\xff\xff\xff\xff\xff\x7f",
|
|
expectError: "varint value out of range",
|
|
}, {
|
|
about: "varint way out of range",
|
|
data: "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f",
|
|
expectError: "varint value out of range",
|
|
}, {
|
|
about: "unterminated varint",
|
|
data: "\x80",
|
|
expectError: "varint value extends past end of buffer",
|
|
}, {
|
|
about: "field data too long",
|
|
data: "\x01\x02a",
|
|
expectError: "field data extends past end of buffer",
|
|
}, {
|
|
about: "bad data length varint",
|
|
data: "\x01\xff",
|
|
expectError: "varint value extends past end of buffer",
|
|
}}
|
|
|
|
func (*packetV2Suite) TestParsePacketV2(c *gc.C) {
|
|
for i, test := range parsePacketV2Tests {
|
|
c.Logf("test %d: %v", i, test.about)
|
|
data, p, err := parsePacketV2([]byte(test.data))
|
|
if test.expectError != "" {
|
|
c.Assert(err, gc.ErrorMatches, test.expectError)
|
|
c.Assert(data, gc.IsNil)
|
|
c.Assert(p, gc.DeepEquals, packetV2{})
|
|
} else {
|
|
c.Assert(err, gc.IsNil)
|
|
c.Assert(p, jc.DeepEquals, test.expectPacket)
|
|
}
|
|
}
|
|
}
|
|
|
|
var parseSectionV2Tests = []struct {
|
|
about string
|
|
data string
|
|
|
|
expectData string
|
|
expectPackets []packetV2
|
|
expectError string
|
|
}{{
|
|
about: "no packets",
|
|
data: "\x00",
|
|
}, {
|
|
about: "one packet",
|
|
data: "\x02\x03xyz\x00",
|
|
expectPackets: []packetV2{{
|
|
fieldType: 2,
|
|
data: []byte("xyz"),
|
|
}},
|
|
}, {
|
|
about: "two packets",
|
|
data: "\x02\x03xyz\x07\x05abcde\x00",
|
|
expectPackets: []packetV2{{
|
|
fieldType: 2,
|
|
data: []byte("xyz"),
|
|
}, {
|
|
fieldType: 7,
|
|
data: []byte("abcde"),
|
|
}},
|
|
}, {
|
|
about: "unterminated section",
|
|
data: "\x02\x03xyz\x07\x05abcde",
|
|
expectError: "section extends past end of buffer",
|
|
}, {
|
|
about: "out of order fields",
|
|
data: "\x07\x05abcde\x02\x03xyz\x00",
|
|
expectError: "fields out of order",
|
|
}, {
|
|
about: "bad packet",
|
|
data: "\x07\x05abcde\xff",
|
|
expectError: "varint value extends past end of buffer",
|
|
}}
|
|
|
|
func (*packetV2Suite) TestParseSectionV2(c *gc.C) {
|
|
for i, test := range parseSectionV2Tests {
|
|
c.Logf("test %d: %v", i, test.about)
|
|
data, ps, err := parseSectionV2([]byte(test.data))
|
|
if test.expectError != "" {
|
|
c.Assert(err, gc.ErrorMatches, test.expectError)
|
|
c.Assert(data, gc.IsNil)
|
|
c.Assert(ps, gc.IsNil)
|
|
} else {
|
|
c.Assert(err, gc.IsNil)
|
|
c.Assert(ps, jc.DeepEquals, test.expectPackets)
|
|
}
|
|
}
|
|
}
|