@@ -52,3 +52,58 @@ func TestDecodeFirstPart(t *testing.T) {
52
52
t .Fatalf ("unexpected capability, got %d" , c .capability )
53
53
}
54
54
}
55
+
56
+ func TestReadAttributes (t * testing.T ) {
57
+ var err error
58
+ // example data from
59
+ // https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse41
60
+ data := []byte {
61
+ 0xb2 , 0x00 , 0x00 , 0x01 , 0x85 , 0xa2 , 0x1e , 0x00 , 0x00 , 0x00 ,
62
+ 0x00 , 0x40 , 0x08 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
63
+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
64
+ 0x00 , 0x00 , 0x72 , 0x6f , 0x6f , 0x74 , 0x00 , 0x14 , 0x22 , 0x50 , 0x79 , 0xa2 ,
65
+ 0x12 , 0xd4 , 0xe8 , 0x82 , 0xe5 , 0xb3 , 0xf4 , 0x1a , 0x97 , 0x75 , 0x6b , 0xc8 ,
66
+ 0xbe , 0xdb , 0x9f , 0x80 , 0x6d , 0x79 , 0x73 , 0x71 , 0x6c , 0x5f , 0x6e , 0x61 ,
67
+ 0x74 , 0x69 , 0x76 , 0x65 , 0x5f , 0x70 , 0x61 , 0x73 , 0x73 , 0x77 , 0x6f , 0x72 ,
68
+ 0x64 , 0x00 , 0x61 , 0x03 , 0x5f , 0x6f , 0x73 , 0x09 , 0x64 , 0x65 , 0x62 , 0x69 ,
69
+ 0x61 , 0x6e , 0x36 , 0x2e , 0x30 , 0x0c , 0x5f , 0x63 , 0x6c , 0x69 , 0x65 , 0x6e ,
70
+ 0x74 , 0x5f , 0x6e , 0x61 , 0x6d , 0x65 , 0x08 , 0x6c , 0x69 , 0x62 , 0x6d , 0x79 ,
71
+ 0x73 , 0x71 , 0x6c , 0x04 , 0x5f , 0x70 , 0x69 , 0x64 , 0x05 , 0x32 , 0x32 , 0x33 ,
72
+ 0x34 , 0x34 , 0x0f , 0x5f , 0x63 , 0x6c , 0x69 , 0x65 , 0x6e , 0x74 , 0x5f , 0x76 ,
73
+ 0x65 , 0x72 , 0x73 , 0x69 , 0x6f , 0x6e , 0x08 , 0x35 , 0x2e , 0x36 , 0x2e , 0x36 ,
74
+ 0x2d , 0x6d , 0x39 , 0x09 , 0x5f , 0x70 , 0x6c , 0x61 , 0x74 , 0x66 , 0x6f , 0x72 ,
75
+ 0x6d , 0x06 , 0x78 , 0x38 , 0x36 , 0x5f , 0x36 , 0x34 , 0x03 , 0x66 , 0x6f , 0x6f ,
76
+ 0x03 , 0x62 , 0x61 , 0x72 ,
77
+ }
78
+ pos := 85
79
+
80
+ c := & Conn {}
81
+
82
+ pos , err = c .readAttributes (data , pos )
83
+ if err != nil {
84
+ t .Fatalf ("unexpected error: got %v" , err )
85
+ }
86
+
87
+ if pos != 182 {
88
+ t .Fatalf ("unexpected position: got %d" , pos )
89
+ }
90
+
91
+ if len (c .attributes ) != 6 {
92
+ t .Fatalf ("unexpected attribute length: got %d" , len (c .attributes ))
93
+ }
94
+
95
+ fixture := map [string ]string {
96
+ "_client_name" : "libmysql" ,
97
+ "_client_version" : "5.6.6-m9" ,
98
+ "_os" : "debian6.0" ,
99
+ "_pid" : "22344" ,
100
+ "_platform" : "x86_64" ,
101
+ "foo" : "bar" ,
102
+ }
103
+
104
+ for k , v := range fixture {
105
+ if vv := c .attributes [k ]; vv != v {
106
+ t .Fatalf ("unexpected value for %s, got %s instead of %s" , k , vv , v )
107
+ }
108
+ }
109
+ }
0 commit comments