1010package proto
1111
1212import (
13+ "testing"
14+
15+ "github.com/XeLabs/go-mysqlstack/common"
1316 "github.com/XeLabs/go-mysqlstack/consts"
1417 "github.com/stretchr/testify/assert"
15- "testing"
1618)
1719
1820func TestAuth (t * testing.T ) {
@@ -85,15 +87,16 @@ func TestAuthUnPack(t *testing.T) {
8587 want := NewAuth ()
8688 want .charset = 0x02
8789 want .authResponseLen = 20
88- want .clientFlags = DefaultCapability
90+ want .clientFlags = DefaultClientCapability
91+ want .clientFlags |= consts .CLIENT_CONNECT_WITH_DB
8992 want .authResponse = nativePassword ("sbtest" , DefaultSalt )
9093 want .database = "sbtest"
9194 want .user = "sbtest"
9295 want .pluginName = DefaultAuthPluginName
9396
9497 got := NewAuth ()
9598 err := got .UnPack (want .Pack (
96- DefaultCapability ,
99+ DefaultClientCapability ,
97100 0x02 ,
98101 "sbtest" ,
99102 "sbtest" ,
@@ -108,15 +111,16 @@ func TestAuthWithoutPWD(t *testing.T) {
108111 want := NewAuth ()
109112 want .charset = 0x02
110113 want .authResponseLen = 1
111- want .clientFlags = DefaultCapability
114+ want .clientFlags = DefaultClientCapability
115+ want .clientFlags |= consts .CLIENT_CONNECT_WITH_DB
112116 want .authResponse = nativePassword ("" , DefaultSalt )
113117 want .database = "sbtest"
114118 want .user = "sbtest"
115119 want .pluginName = DefaultAuthPluginName
116120
117121 got := NewAuth ()
118122 err := got .UnPack (want .Pack (
119- DefaultCapability ,
123+ DefaultClientCapability ,
120124 0x02 ,
121125 "sbtest" ,
122126 "" ,
@@ -131,14 +135,14 @@ func TestAuthWithoutDB(t *testing.T) {
131135 want := NewAuth ()
132136 want .charset = 0x02
133137 want .authResponseLen = 20
134- want .clientFlags = DefaultCapability &^ consts . CLIENT_CONNECT_WITH_DB
138+ want .clientFlags = DefaultClientCapability
135139 want .authResponse = nativePassword ("sbtest" , DefaultSalt )
136140 want .user = "sbtest"
137141 want .pluginName = DefaultAuthPluginName
138142
139143 got := NewAuth ()
140144 err := got .UnPack (want .Pack (
141- DefaultCapability ,
145+ DefaultClientCapability ,
142146 0x02 ,
143147 "sbtest" ,
144148 "sbtest" ,
@@ -153,15 +157,16 @@ func TestAuthWithoutSecure(t *testing.T) {
153157 want := NewAuth ()
154158 want .charset = 0x02
155159 want .authResponseLen = 20
156- want .clientFlags = DefaultCapability &^ consts .CLIENT_SECURE_CONNECTION &^ consts .CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
160+ want .clientFlags = DefaultClientCapability &^ consts .CLIENT_SECURE_CONNECTION &^ consts .CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
161+ want .clientFlags |= consts .CLIENT_CONNECT_WITH_DB
157162 want .authResponse = nativePassword ("sbtest" , DefaultSalt )
158163 want .user = "sbtest"
159164 want .database = "sbtest"
160165 want .pluginName = DefaultAuthPluginName
161166
162167 got := NewAuth ()
163168 err := got .UnPack (want .Pack (
164- DefaultCapability &^consts .CLIENT_SECURE_CONNECTION ,
169+ DefaultClientCapability &^consts .CLIENT_SECURE_CONNECTION ,
165170 0x02 ,
166171 "sbtest" ,
167172 "sbtest" ,
@@ -172,3 +177,67 @@ func TestAuthWithoutSecure(t *testing.T) {
172177 assert .Nil (t , err )
173178 assert .Equal (t , want , got )
174179}
180+
181+ func TestAuthUnPackError (t * testing.T ) {
182+ capabilityFlags := DefaultClientCapability
183+ capabilityFlags |= consts .CLIENT_PROTOCOL_41
184+ capabilityFlags |= consts .CLIENT_CONNECT_WITH_DB
185+
186+ // NULL
187+ f0 := func (buff * common.Buffer ) {
188+ }
189+
190+ // Write clientFlags.
191+ f1 := func (buff * common.Buffer ) {
192+ buff .WriteU32 (capabilityFlags )
193+ }
194+
195+ // Write maxPacketSize.
196+ f2 := func (buff * common.Buffer ) {
197+ buff .WriteU32 (uint32 (16777216 ))
198+ }
199+
200+ // Write charset.
201+ f3 := func (buff * common.Buffer ) {
202+ buff .WriteU8 (0x01 )
203+ }
204+
205+ // Write 23 NULLs.
206+ f4 := func (buff * common.Buffer ) {
207+ buff .WriteZero (23 )
208+ }
209+
210+ // Write username.
211+ f5 := func (buff * common.Buffer ) {
212+ buff .WriteString ("mock" )
213+ buff .WriteZero (1 )
214+ }
215+
216+ // Write auth-response.
217+ f6 := func (buff * common.Buffer ) {
218+ authRsp := make ([]byte , 8 )
219+ buff .WriteU8 (8 )
220+ buff .WriteBytes (authRsp )
221+ }
222+
223+ // Write database.
224+ f7 := func (buff * common.Buffer ) {
225+ buff .WriteString ("db1" )
226+ buff .WriteZero (1 )
227+ }
228+
229+ buff := common .NewBuffer (32 )
230+ fs := []func (buff * common.Buffer ){f0 , f1 , f2 , f3 , f4 , f5 , f6 , f7 }
231+ for i := 0 ; i < len (fs ); i ++ {
232+ auth := NewAuth ()
233+ err := auth .UnPack (buff .Datas ())
234+ assert .NotNil (t , err )
235+ fs [i ](buff )
236+ }
237+
238+ {
239+ auth := NewAuth ()
240+ err := auth .UnPack (buff .Datas ())
241+ assert .NotNil (t , err )
242+ }
243+ }
0 commit comments