initial commit
This commit is contained in:
158
vendor/gopkg.in/asn1-ber.v1/length_test.go
generated
vendored
Normal file
158
vendor/gopkg.in/asn1-ber.v1/length_test.go
generated
vendored
Normal file
@@ -0,0 +1,158 @@
|
||||
package ber
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"math"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestReadLength(t *testing.T) {
|
||||
testcases := map[string]struct {
|
||||
Data []byte
|
||||
|
||||
ExpectedLength int
|
||||
ExpectedBytesRead int
|
||||
ExpectedError string
|
||||
}{
|
||||
"empty": {
|
||||
Data: []byte{},
|
||||
ExpectedBytesRead: 0,
|
||||
ExpectedError: io.ErrUnexpectedEOF.Error(),
|
||||
},
|
||||
"invalid first byte": {
|
||||
Data: []byte{0xFF},
|
||||
ExpectedBytesRead: 1,
|
||||
ExpectedError: "invalid length byte 0xff",
|
||||
},
|
||||
|
||||
"indefinite form": {
|
||||
Data: []byte{LengthLongFormBitmask},
|
||||
ExpectedLength: LengthIndefinite,
|
||||
ExpectedBytesRead: 1,
|
||||
},
|
||||
|
||||
"short-definite-form zero length": {
|
||||
Data: []byte{0},
|
||||
ExpectedLength: 0,
|
||||
ExpectedBytesRead: 1,
|
||||
},
|
||||
"short-definite-form length 1": {
|
||||
Data: []byte{1},
|
||||
ExpectedLength: 1,
|
||||
ExpectedBytesRead: 1,
|
||||
},
|
||||
"short-definite-form max length": {
|
||||
Data: []byte{127},
|
||||
ExpectedLength: 127,
|
||||
ExpectedBytesRead: 1,
|
||||
},
|
||||
|
||||
"long-definite-form missing bytes": {
|
||||
Data: []byte{LengthLongFormBitmask | 1},
|
||||
ExpectedBytesRead: 1,
|
||||
ExpectedError: io.ErrUnexpectedEOF.Error(),
|
||||
},
|
||||
"long-definite-form overflow": {
|
||||
Data: []byte{LengthLongFormBitmask | 9},
|
||||
ExpectedBytesRead: 1,
|
||||
ExpectedError: "long-form length overflow",
|
||||
},
|
||||
"long-definite-form zero length": {
|
||||
Data: []byte{LengthLongFormBitmask | 1, 0x0},
|
||||
ExpectedLength: 0,
|
||||
ExpectedBytesRead: 2,
|
||||
},
|
||||
"long-definite-form length 127": {
|
||||
Data: []byte{LengthLongFormBitmask | 1, 127},
|
||||
ExpectedLength: 127,
|
||||
ExpectedBytesRead: 2,
|
||||
},
|
||||
"long-definite-form max length": {
|
||||
Data: []byte{
|
||||
LengthLongFormBitmask | 8,
|
||||
0x7F,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
},
|
||||
ExpectedLength: math.MaxInt64,
|
||||
ExpectedBytesRead: 9,
|
||||
},
|
||||
}
|
||||
|
||||
for k, tc := range testcases {
|
||||
reader := bytes.NewBuffer(tc.Data)
|
||||
length, read, err := readLength(reader)
|
||||
|
||||
if err != nil {
|
||||
if tc.ExpectedError == "" {
|
||||
t.Errorf("%s: unexpected error: %v", k, err)
|
||||
} else if err.Error() != tc.ExpectedError {
|
||||
t.Errorf("%s: expected error %v, got %v", k, tc.ExpectedError, err)
|
||||
}
|
||||
} else if tc.ExpectedError != "" {
|
||||
t.Errorf("%s: expected error %v, got none", k, tc.ExpectedError)
|
||||
continue
|
||||
}
|
||||
|
||||
if read != tc.ExpectedBytesRead {
|
||||
t.Errorf("%s: expected read %d, got %d", k, tc.ExpectedBytesRead, read)
|
||||
}
|
||||
|
||||
if length != tc.ExpectedLength {
|
||||
t.Errorf("%s: expected length %d, got %d", k, tc.ExpectedLength, length)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncodeLength(t *testing.T) {
|
||||
testcases := map[string]struct {
|
||||
Length int
|
||||
ExpectedBytes []byte
|
||||
}{
|
||||
"0": {
|
||||
Length: 0,
|
||||
ExpectedBytes: []byte{0},
|
||||
},
|
||||
"1": {
|
||||
Length: 1,
|
||||
ExpectedBytes: []byte{1},
|
||||
},
|
||||
|
||||
"max short-form length": {
|
||||
Length: 127,
|
||||
ExpectedBytes: []byte{127},
|
||||
},
|
||||
"min long-form length": {
|
||||
Length: 128,
|
||||
ExpectedBytes: []byte{LengthLongFormBitmask | 1, 128},
|
||||
},
|
||||
|
||||
"max long-form length": {
|
||||
Length: math.MaxInt64,
|
||||
ExpectedBytes: []byte{
|
||||
LengthLongFormBitmask | 8,
|
||||
0x7F,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
0xFF,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for k, tc := range testcases {
|
||||
b := encodeLength(tc.Length)
|
||||
if bytes.Compare(tc.ExpectedBytes, b) != 0 {
|
||||
t.Errorf("%s: Expected\n\t%#v\ngot\n\t%#v", k, tc.ExpectedBytes, b)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user