From 38ee83e45b4de7edf89bf9f0ef629eb4c6ad0fa8 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Thu, 12 May 2016 23:56:07 -0400 Subject: Moving to glide --- vendor/gopkg.in/asn1-ber.v1/header_test.go | 135 +++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 vendor/gopkg.in/asn1-ber.v1/header_test.go (limited to 'vendor/gopkg.in/asn1-ber.v1/header_test.go') diff --git a/vendor/gopkg.in/asn1-ber.v1/header_test.go b/vendor/gopkg.in/asn1-ber.v1/header_test.go new file mode 100644 index 000000000..cac1e2e2b --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/header_test.go @@ -0,0 +1,135 @@ +package ber + +import ( + "bytes" + "io" + "testing" +) + +func TestReadHeader(t *testing.T) { + testcases := map[string]struct { + Data []byte + ExpectedIdentifier Identifier + ExpectedLength int + ExpectedBytesRead int + ExpectedError string + }{ + "empty": { + Data: []byte{}, + ExpectedIdentifier: Identifier{}, + ExpectedLength: 0, + ExpectedBytesRead: 0, + ExpectedError: io.ErrUnexpectedEOF.Error(), + }, + + "valid short form": { + Data: []byte{ + byte(ClassUniversal) | byte(TypePrimitive) | byte(TagCharacterString), + 127, + }, + ExpectedIdentifier: Identifier{ + ClassType: ClassUniversal, + TagType: TypePrimitive, + Tag: TagCharacterString, + }, + ExpectedLength: 127, + ExpectedBytesRead: 2, + ExpectedError: "", + }, + + "valid long form": { + Data: []byte{ + // 2-byte encoding of tag + byte(ClassUniversal) | byte(TypePrimitive) | byte(HighTag), + byte(TagCharacterString), + + // 2-byte encoding of length + LengthLongFormBitmask | 1, + 127, + }, + ExpectedIdentifier: Identifier{ + ClassType: ClassUniversal, + TagType: TypePrimitive, + Tag: TagCharacterString, + }, + ExpectedLength: 127, + ExpectedBytesRead: 4, + ExpectedError: "", + }, + + "valid indefinite length": { + Data: []byte{ + byte(ClassUniversal) | byte(TypeConstructed) | byte(TagCharacterString), + LengthLongFormBitmask, + }, + ExpectedIdentifier: Identifier{ + ClassType: ClassUniversal, + TagType: TypeConstructed, + Tag: TagCharacterString, + }, + ExpectedLength: LengthIndefinite, + ExpectedBytesRead: 2, + ExpectedError: "", + }, + + "invalid indefinite length": { + Data: []byte{ + byte(ClassUniversal) | byte(TypePrimitive) | byte(TagCharacterString), + LengthLongFormBitmask, + }, + ExpectedIdentifier: Identifier{}, + ExpectedLength: 0, + ExpectedBytesRead: 2, + ExpectedError: "indefinite length used with primitive type", + }, + } + + for k, tc := range testcases { + reader := bytes.NewBuffer(tc.Data) + identifier, length, read, err := readHeader(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 identifier.ClassType != tc.ExpectedIdentifier.ClassType { + t.Errorf("%s: expected class type %d (%s), got %d (%s)", k, + tc.ExpectedIdentifier.ClassType, + ClassMap[tc.ExpectedIdentifier.ClassType], + identifier.ClassType, + ClassMap[identifier.ClassType], + ) + } + if identifier.TagType != tc.ExpectedIdentifier.TagType { + t.Errorf("%s: expected tag type %d (%s), got %d (%s)", k, + tc.ExpectedIdentifier.TagType, + TypeMap[tc.ExpectedIdentifier.TagType], + identifier.TagType, + TypeMap[identifier.TagType], + ) + } + if identifier.Tag != tc.ExpectedIdentifier.Tag { + t.Errorf("%s: expected tag %d (%s), got %d (%s)", k, + tc.ExpectedIdentifier.Tag, + tagMap[tc.ExpectedIdentifier.Tag], + identifier.Tag, + tagMap[identifier.Tag], + ) + } + + if length != tc.ExpectedLength { + t.Errorf("%s: expected length %d, got %d", k, tc.ExpectedLength, length) + } + } +} -- cgit v1.2.3-1-g7c22