@@ -15,8 +15,8 @@ func TestConnector_IssueAndRevokeDynamicCredentials(t *testing.T) {
1515
1616 client := & fakeVaultClient {
1717 lease : & vaultdb.LeaseCredentials {
18- Username : "v- token- user" ,
19- Password : "secret:/?#[]@" ,
18+ Username : "v token user" ,
19+ Password : "secret with spaces :/?#[]@" ,
2020 LeaseID : "database/creds/analytics_ro/123" ,
2121 LeaseDuration : 10 * time .Minute ,
2222 Renewable : true ,
@@ -56,9 +56,15 @@ func TestConnector_IssueAndRevokeDynamicCredentials(t *testing.T) {
5656 if issued .Metadata ["lease_expires_at" ] == "" {
5757 t .Fatalf ("issued artifact = %#v, want lease expiry metadata" , issued )
5858 }
59- if strings .Contains (issued .SecretData ["dsn" ], "secret:/?#[]@" ) {
59+ if strings .Contains (issued .SecretData ["dsn" ], "v token user" ) || strings . Contains ( issued . SecretData [ "dsn" ], " secret with spaces :/?#[]@" ) {
6060 t .Fatalf ("dsn = %q, want escaped credentials" , issued .SecretData ["dsn" ])
6161 }
62+ if strings .Contains (issued .SecretData ["dsn" ], "+" ) {
63+ t .Fatalf ("dsn = %q, want spaces percent-encoded in userinfo" , issued .SecretData ["dsn" ])
64+ }
65+ if want := "postgres://v%20token%20user:secret%20with%20spaces%3A%2F%3F%23%5B%5D%40@db.internal:5432/analytics?sslmode=require" ; issued .SecretData ["dsn" ] != want {
66+ t .Fatalf ("dsn = %q, want %q" , issued .SecretData ["dsn" ], want )
67+ }
6268
6369 if err := connector .Revoke (context .Background (), core.RevokeRequest {
6470 Session : & core.Session {ID : "sess_db" , TenantID : "t_acme" },
@@ -187,15 +193,16 @@ func TestConnector_IssueRenewsLeaseToMatchGrantTTL(t *testing.T) {
187193func TestConnector_IssueFailsWhenGrantTTLExceedsNonRenewableLease (t * testing.T ) {
188194 t .Parallel ()
189195
190- connector , err := vaultdb .NewConnector (vaultdb.Config {
191- Client : & fakeVaultClient {
192- lease : & vaultdb.LeaseCredentials {
193- Username : "dyn-user" ,
194- Password : "dyn-pass" ,
195- LeaseID : "database/creds/analytics_ro/123" ,
196- LeaseDuration : time .Minute ,
197- },
196+ client := & fakeVaultClient {
197+ lease : & vaultdb.LeaseCredentials {
198+ Username : "dyn-user" ,
199+ Password : "dyn-pass" ,
200+ LeaseID : "database/creds/analytics_ro/123" ,
201+ LeaseDuration : time .Minute ,
198202 },
203+ }
204+ connector , err := vaultdb .NewConnector (vaultdb.Config {
205+ Client : client ,
199206 RoleDSNs : map [string ]string {
200207 "analytics_ro" : "postgres://{{username}}:{{password}}@db.internal:5432/analytics?sslmode=require" ,
201208 },
@@ -219,6 +226,9 @@ func TestConnector_IssueFailsWhenGrantTTLExceedsNonRenewableLease(t *testing.T)
219226 if err == nil || ! strings .Contains (err .Error (), "not renewable" ) {
220227 t .Fatalf ("Issue() error = %v, want renewal failure" , err )
221228 }
229+ if client .revokedLeaseID != "database/creds/analytics_ro/123" {
230+ t .Fatalf ("revoked lease = %q, want original lease revoked on failure" , client .revokedLeaseID )
231+ }
222232}
223233
224234type fakeVaultClient struct {
0 commit comments