aboutsummaryrefslogtreecommitdiff
path: root/goldap/bytes_test.go
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2021-07-07 01:49:33 +0200
committerQuentin Dufour <quentin@deuxfleurs.fr>2021-09-16 13:09:26 +0200
commit563fc272a36c8be317fbe95c8308ca2dfa29c3aa (patch)
tree0b6f9a6a15516e7234fc928ecbebbd32d3154074 /goldap/bytes_test.go
parentaa912b5ceb24cb8772709171ea9589b0771bbe54 (diff)
downloadbottin-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.go172
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,
+ },
+ }
+}