@@ -1145,3 +1145,56 @@ application_name = spaced string
11451145 assertConfigsEqual (t , tt .config , config , fmt .Sprintf ("Test %d (%s)" , i , tt .name ))
11461146 }
11471147}
1148+
1149+ func TestParseConfigExplicitEmptyUserDefaultsToOSUser (t * testing.T ) {
1150+ skipOnWindows (t )
1151+ clearPgEnvvars (t )
1152+
1153+ currentUser , err := user .Current ()
1154+ if err != nil {
1155+ t .Skip ("cannot determine current OS user" )
1156+ }
1157+
1158+ tests := []struct {
1159+ name string
1160+ connString string
1161+ expected string
1162+ }{
1163+ {
1164+ name : "keyword value explicit empty user" ,
1165+ connString : "host=localhost dbname=test user=" ,
1166+ expected : currentUser .Username ,
1167+ },
1168+ {
1169+ name : "keyword value quoted empty user" ,
1170+ connString : "host=localhost dbname=test user=''" ,
1171+ expected : currentUser .Username ,
1172+ },
1173+ {
1174+ name : "url explicit empty user without password" ,
1175+ connString : "postgres://@localhost/test" ,
1176+ expected : currentUser .Username ,
1177+ },
1178+ {
1179+ name : "url explicit empty user with password" ,
1180+ connString : "postgres://:secret@localhost/test" ,
1181+ expected : currentUser .Username ,
1182+ },
1183+ }
1184+
1185+ for i , tt := range tests {
1186+ config , err := pgconn .ParseConfig (tt .connString )
1187+ if ! assert .NoErrorf (t , err , "Test %d (%s)" , i , tt .name ) {
1188+ continue
1189+ }
1190+
1191+ assert .Equalf (
1192+ t ,
1193+ tt .expected ,
1194+ config .User ,
1195+ "Test %d (%s): unexpected user" ,
1196+ i ,
1197+ tt .name ,
1198+ )
1199+ }
1200+ }
0 commit comments