diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2021-07-07 01:49:33 +0200 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2021-09-16 13:09:26 +0200 |
commit | 563fc272a36c8be317fbe95c8308ca2dfa29c3aa (patch) | |
tree | 0b6f9a6a15516e7234fc928ecbebbd32d3154074 /goldap/bytes_test.go | |
parent | aa912b5ceb24cb8772709171ea9589b0771bbe54 (diff) | |
download | bottin-563fc272a36c8be317fbe95c8308ca2dfa29c3aa.tar.gz bottin-563fc272a36c8be317fbe95c8308ca2dfa29c3aa.zip |
Vendor goldap, fix ASN.1 BER integer and length encoding
- Add tests for goldap to prevent regressions
- Disable reconnection for our functional tests
Diffstat (limited to 'goldap/bytes_test.go')
-rw-r--r-- | goldap/bytes_test.go | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/goldap/bytes_test.go b/goldap/bytes_test.go new file mode 100644 index 0000000..c56489d --- /dev/null +++ b/goldap/bytes_test.go @@ -0,0 +1,172 @@ +package message + +import ( + "reflect" + "testing" +) + +func TestReadPrimitiveSubBytesTestData(t *testing.T) { + for i, test := range PrimitiveSubBytesTestData() { + value, err := test.bytes.ReadPrimitiveSubBytes(test.class, test.tag, test.typeTag) + if err != nil { + t.Errorf("#%d failed: %s", i+1, err) + } else if !reflect.DeepEqual(test.value, value) { + t.Errorf("#%d: Wrong value %#v, got %#v", i+1, test.value, value) + } else if test.offset != test.bytes.offset { + t.Errorf("#%d: Wrong Offset, value %#v, got %#v", i+1, test.offset, test.bytes.offset) + } + } +} + +func TestSizePrimitiveSubBytesTestData(t *testing.T) { + for i, test := range PrimitiveSubBytesTestData() { + value, err := test.bytes.ReadPrimitiveSubBytes(test.class, test.tag, test.typeTag) + if err != nil { + t.Errorf("#%d failed: %s", i+1, err) + } else if !reflect.DeepEqual(test.value, value) { + t.Errorf("#%d: Wrong value %#v, got %#v", i+1, test.value, value) + } else if test.offset != test.bytes.offset { + t.Errorf("#%d: Wrong Offset, value %#v, got %#v", i+1, test.offset, test.bytes.offset) + } + } +} + +func NewInt(value int) (ret *int) { + ret = &value + return +} + +type PrimitiveSubBytesTestSingleData struct { + bytes Bytes // Input + class int // Expected class + tag int // Expected tag + typeTag int // Expected type + value interface{} // Expected output + offset int // Expected offset after processing +} + +func PrimitiveSubBytesTestData() []PrimitiveSubBytesTestSingleData { + + return []PrimitiveSubBytesTestSingleData{ + // Test 1 + { + bytes: Bytes{ + offset: 0, + bytes: []byte{0x02, 0x01, 0x09}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x09), + offset: 3, + }, + // Test 2 + { + bytes: Bytes{ + offset: 0, + bytes: []byte{0x02, 0x02, 0x09, 0x87}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x0987), + offset: 4, + }, + // Test 3 + { + bytes: Bytes{ + offset: 0, + bytes: []byte{0x02, 0x03, 0x09, 0x87, 0x65}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x098765), + offset: 5, + }, + // Test 4 + { + bytes: Bytes{ + offset: 0, + bytes: []byte{0x02, 0x04, 0x09, 0x87, 0x65, 0x43}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x09876543), + offset: 6, + }, + // Test 5 + { + bytes: Bytes{ + offset: 2, + bytes: []byte{0x30, 0x03, 0x02, 0x01, 0x0f}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x0f), + offset: 5, + }, + // Test 6 + { + bytes: Bytes{ + offset: 2, + bytes: []byte{0x30, 0x16, 0x02, 0x01, 0x0f, 0x60, 0x11, 0x02, 0x01, 0x03, 0x04, 0x00, 0xa3, 0x0a, 0x04, 0x08, 0x43, 0x52, 0x41, 0x4d, 0x2d, 0x4d, 0x44, 0x35}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x0f), + offset: 5, + }, + // Test 7 + { + bytes: Bytes{ + offset: 2, + bytes: []byte{0x30, 0x19, 0x02, 0x04, 0x7f, 0xff, 0xff, 0xff, 0x60, 0x11, 0x02, 0x01, 0x03, 0x04, 0x00, 0xa3, 0x0a, 0x04, 0x08, 0x43, 0x52, 0x41, 0x4d, 0x2d, 0x4d, 0x44, 0x35}, + }, + class: classUniversal, + tag: tagInteger, + typeTag: tagInteger, + value: int32(0x07fffffff), + offset: 8, + }, + // Test 8 + { + bytes: Bytes{ + offset: 0, + bytes: []byte{0x04, 0x08, 0x43, 0x52, 0x41, 0x4d, 0x2d, 0x4d, 0x44, 0x35}, + }, + class: classUniversal, + tag: tagOctetString, + typeTag: tagOctetString, + value: []byte("CRAM-MD5"), + offset: 10, + }, + // Test 9 + { + bytes: Bytes{ + offset: 0, + bytes: []byte{0x04, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0xe4, 0xb8, 0x96, 0xe7, 0x95, 0x8c}, + }, + class: classUniversal, + tag: tagOctetString, + typeTag: tagOctetString, + value: []byte("Hello, 世界"), + offset: 15, + }, + // Test 10 + { + bytes: Bytes{ + offset: 10, + bytes: []byte{0x30, 0x1d, 0x02, 0x01, 0x05, 0x60, 0x18, 0x02, 0x01, 0x03, 0x04, 0x07, 0x6d, 0x79, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x80, 0x0a, 0x6d, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64}, + }, + class: classUniversal, + tag: tagOctetString, + typeTag: tagOctetString, + value: []byte("myLogin"), + offset: 19, + }, + } +} |