forked from Deuxfleurs/bottin
85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package message
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestSizeLDAPMessage(t *testing.T) {
|
|
|
|
var testData = getLDAPMessageTestData()
|
|
for i, test := range testData {
|
|
message, err := ReadLDAPMessage(&test.bytes)
|
|
if err != nil {
|
|
t.Errorf("#%d error at offset %d (%s): %s", i, test.bytes.offset, test.bytes.DumpCurrentBytes(), err)
|
|
}
|
|
size := message.size()
|
|
expected := len(test.bytes.bytes)
|
|
if size != expected {
|
|
t.Errorf("#%d: wrong size, GOT: %d, EXPECTED: %d", i, size, expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
type tagAndLengthTestData struct {
|
|
tag int
|
|
length int
|
|
expectedSize int
|
|
}
|
|
|
|
func getSizeTagAndLengthTestData() (ret []tagAndLengthTestData) {
|
|
return []tagAndLengthTestData{
|
|
// Length between 0 and 127 are encoded on one byte
|
|
{
|
|
tag: tagSequence,
|
|
length: 0,
|
|
expectedSize: 2,
|
|
},
|
|
{
|
|
tag: tagSequence,
|
|
length: 127,
|
|
expectedSize: 2,
|
|
},
|
|
// Length between 128 and 255 are encoded on two bytes
|
|
{
|
|
tag: tagSequence,
|
|
length: 128,
|
|
expectedSize: 3,
|
|
},
|
|
{
|
|
tag: tagSequence,
|
|
length: 255,
|
|
expectedSize: 3,
|
|
},
|
|
// Length between 256 (2^8) and 65535 (2^16-1) are encoded on three bytes
|
|
{
|
|
tag: tagSequence,
|
|
length: 256,
|
|
expectedSize: 4,
|
|
},
|
|
{
|
|
tag: tagSequence,
|
|
length: 65535,
|
|
expectedSize: 4,
|
|
},
|
|
// Length between 65536 (2^16) and 16777215 (2^24-1) are encoded on four bytes
|
|
{
|
|
tag: tagSequence,
|
|
length: 65536,
|
|
expectedSize: 5,
|
|
},
|
|
{
|
|
tag: tagSequence,
|
|
length: 16777215,
|
|
expectedSize: 5,
|
|
},
|
|
}
|
|
}
|
|
func TestSizeTagAndLength(t *testing.T) {
|
|
for i, test := range getSizeTagAndLengthTestData() {
|
|
size := sizeTagAndLength(test.tag, test.length)
|
|
if test.expectedSize != size {
|
|
t.Errorf("#%d: wrong size, GOT: %d, EXPECTED: %d", i, size, test.expectedSize)
|
|
}
|
|
}
|
|
|
|
}
|