@@ -24,14 +24,27 @@ type server struct {
2424 tune connectionTuneOk
2525}
2626
27- func defaultConfig () Config {
27+ var defaultLogin = "guest"
28+ var defaultPassword = "guest"
29+ var defaultPlainAuth = & PlainAuth {defaultLogin , defaultPassword }
30+ var defaultAMQPlainAuth = & AMQPlainAuth {defaultLogin , defaultPassword }
31+
32+ func defaultConfigWithAuth (auth Authentication ) Config {
2833 return Config {
29- SASL : []Authentication {& PlainAuth { "guest" , "guest" } },
34+ SASL : []Authentication {auth },
3035 Vhost : "/" ,
3136 Locale : defaultLocale ,
3237 }
3338}
3439
40+ func defaultConfig () Config {
41+ return defaultConfigWithAuth (defaultPlainAuth )
42+ }
43+
44+ func amqplainConfig () Config {
45+ return defaultConfigWithAuth (defaultAMQPlainAuth )
46+ }
47+
3548func newServer (t * testing.T , serverIO , clientIO io.ReadWriteCloser ) * server {
3649 return & server {
3750 T : t ,
@@ -153,15 +166,21 @@ func (t *server) expectAMQP() {
153166 t .expectBytes ([]byte {'A' , 'M' , 'Q' , 'P' , 0 , 0 , 9 , 1 })
154167}
155168
156- func (t * server ) connectionStart ( ) {
169+ func (t * server ) connectionStartWithMechanisms ( mechs string , recv bool ) {
157170 t .send (0 , & connectionStart {
158171 VersionMajor : 0 ,
159172 VersionMinor : 9 ,
160- Mechanisms : "PLAIN" ,
161- Locales : "en_US" ,
173+ Mechanisms : mechs ,
174+ Locales : defaultLocale ,
162175 })
163176
164- t .recv (0 , & t .start )
177+ if recv {
178+ t .recv (0 , & t .start )
179+ }
180+ }
181+
182+ func (t * server ) connectionStart () {
183+ t .connectionStartWithMechanisms ("PLAIN" , true )
165184}
166185
167186func (t * server ) connectionTune () {
@@ -283,12 +302,7 @@ func TestOpenFailedSASLUnsupportedMechanisms(t *testing.T) {
283302
284303 go func () {
285304 srv .expectAMQP ()
286- srv .send (0 , & connectionStart {
287- VersionMajor : 0 ,
288- VersionMinor : 9 ,
289- Mechanisms : "KERBEROS NTLM" ,
290- Locales : "en_US" ,
291- })
305+ srv .connectionStartWithMechanisms ("KERBEROS NTLM" , false )
292306 }()
293307
294308 c , err := Open (rwc , defaultConfig ())
@@ -297,6 +311,36 @@ func TestOpenFailedSASLUnsupportedMechanisms(t *testing.T) {
297311 }
298312}
299313
314+ func TestOpenAMQPlainAuth (t * testing.T ) {
315+ auth := make (chan Table )
316+ rwc , srv := newSession (t )
317+
318+ go func () {
319+ srv .expectAMQP ()
320+ srv .connectionStartWithMechanisms ("AMQPLAIN" , true )
321+ var authresp bytes.Buffer
322+ _ = writeLongstr (& authresp , srv .start .Response )
323+ table , _ := readTable (& authresp )
324+ srv .connectionTune ()
325+
326+ srv .recv (0 , & connectionOpen {})
327+ srv .send (0 , & connectionOpenOk {})
328+ rwc .Close ()
329+ auth <- table
330+ }()
331+
332+ if c , err := Open (rwc , amqplainConfig ()); err != nil {
333+ t .Fatalf ("could not create connection: %v (%s)" , c , err )
334+ }
335+ table := <- auth
336+ if table ["LOGIN" ] != defaultLogin {
337+ t .Fatalf ("unexpected login: want: %s, got: %s" , defaultLogin , table ["LOGIN" ])
338+ }
339+ if table ["PASSWORD" ] != defaultPassword {
340+ t .Fatalf ("unexpected password: want: %s, got: %s" , defaultPassword , table ["PASSWORD" ])
341+ }
342+ }
343+
300344func TestOpenFailedCredentials (t * testing.T ) {
301345 rwc , srv := newSession (t )
302346
0 commit comments