@@ -2,6 +2,7 @@ package connpostgres
2
2
3
3
import (
4
4
"os"
5
+ "strconv"
5
6
"testing"
6
7
7
8
"github.com/aws/smithy-go/ptr"
@@ -11,82 +12,90 @@ import (
11
12
)
12
13
13
14
func TestAwsRDSIAMAuthConnectForPostgres (t * testing.T ) {
14
- t .Setenv ("AWS_ACCESS_KEY_ID" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_ACCESS_KEY_ID" ))
15
- t .Setenv ("AWS_SECRET_ACCESS_KEY" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SECRET_ACCESS_KEY" ))
16
- t .Setenv ("AWS_SESSION_TOKEN" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SESSION_TOKEN" ))
17
- host := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_HOST_POSTGRES" )
18
- username := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_USERNAME_POSTGRES" )
19
- postgresConnector , err := NewPostgresConnector (t .Context (),
20
- nil ,
21
- & protos.PostgresConfig {
22
- Host : host ,
23
- Database : "postgres" ,
24
- User : username ,
25
- Port : 5432 ,
26
- AuthType : protos .PostgresAuthType_POSTGRES_IAM_AUTH ,
27
- RequireTls : true , // Assumed that AWS Root CA is installed
28
- AwsAuth : & protos.AwsAuthenticationConfig {
29
- AuthType : protos .AwsIAMAuthConfigType_IAM_AUTH_ASSUME_ROLE ,
30
- AuthConfig : & protos.AwsAuthenticationConfig_Role {
31
- Role : & protos.AWSAuthAssumeRoleConfig {
32
- AssumeRoleArn : os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_ASSUME_ROLE" ),
33
- ChainedRoleArn : ptr .String (os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_CHAINED_ROLE" )),
15
+ for attempt := 0 ; attempt < 30 ; attempt ++ {
16
+ t .Run (t .Name ()+ "-attempt-" + strconv .Itoa (attempt ), func (t * testing.T ) {
17
+ t .Setenv ("AWS_ACCESS_KEY_ID" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_ACCESS_KEY_ID" ))
18
+ t .Setenv ("AWS_SECRET_ACCESS_KEY" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SECRET_ACCESS_KEY" ))
19
+ t .Setenv ("AWS_SESSION_TOKEN" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SESSION_TOKEN" ))
20
+ host := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_HOST_POSTGRES" )
21
+ username := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_USERNAME_POSTGRES" )
22
+ postgresConnector , err := NewPostgresConnector (t .Context (),
23
+ nil ,
24
+ & protos.PostgresConfig {
25
+ Host : host ,
26
+ Database : "postgres" ,
27
+ User : username ,
28
+ Port : 5432 ,
29
+ AuthType : protos .PostgresAuthType_POSTGRES_IAM_AUTH ,
30
+ RequireTls : true , // Assumed that AWS Root CA is installed
31
+ AwsAuth : & protos.AwsAuthenticationConfig {
32
+ AuthType : protos .AwsIAMAuthConfigType_IAM_AUTH_ASSUME_ROLE ,
33
+ AuthConfig : & protos.AwsAuthenticationConfig_Role {
34
+ Role : & protos.AWSAuthAssumeRoleConfig {
35
+ AssumeRoleArn : os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_ASSUME_ROLE" ),
36
+ ChainedRoleArn : ptr .String (os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_CHAINED_ROLE" )),
37
+ },
38
+ },
34
39
},
35
- },
36
- },
40
+ })
41
+ require .NoError (t , err )
42
+ defer postgresConnector .Close ()
43
+ rows , err := postgresConnector .Conn ().Query (t .Context (), "SELECT 1" )
44
+ require .NoError (t , err )
45
+ rowCount := 0
46
+ for rows .Next () {
47
+ rowCount ++
48
+ var val int
49
+ require .NoError (t , rows .Scan (& val ))
50
+ require .Equal (t , 1 , val )
51
+ }
52
+ require .Equal (t , 1 , rowCount )
37
53
})
38
- require .NoError (t , err )
39
- defer postgresConnector .Close ()
40
- rows , err := postgresConnector .Conn ().Query (t .Context (), "SELECT 1" )
41
- require .NoError (t , err )
42
- rowCount := 0
43
- for rows .Next () {
44
- rowCount ++
45
- var val int
46
- require .NoError (t , rows .Scan (& val ))
47
- require .Equal (t , 1 , val )
48
54
}
49
- require .Equal (t , 1 , rowCount )
50
55
}
51
56
52
57
func TestAwsRDSIAMAuthConnectForPostgresViaProxy (t * testing.T ) {
53
- t .Setenv ("AWS_ACCESS_KEY_ID" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_ACCESS_KEY_ID" ))
54
- t .Setenv ("AWS_SECRET_ACCESS_KEY" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SECRET_ACCESS_KEY" ))
55
- t .Setenv ("AWS_SESSION_TOKEN" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SESSION_TOKEN" ))
56
- rdsHost := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_HOST_POSTGRES" )
57
- proxyHost := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_HOST_POSTGRES_PROXY" )
58
+ for attempt := 0 ; attempt < 30 ; attempt ++ {
59
+ t .Run (t .Name ()+ "-attempt-" + strconv .Itoa (attempt ), func (t * testing.T ) {
60
+ t .Setenv ("AWS_ACCESS_KEY_ID" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_ACCESS_KEY_ID" ))
61
+ t .Setenv ("AWS_SECRET_ACCESS_KEY" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SECRET_ACCESS_KEY" ))
62
+ t .Setenv ("AWS_SESSION_TOKEN" , os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_AWS_SESSION_TOKEN" ))
63
+ rdsHost := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_HOST_POSTGRES" )
64
+ proxyHost := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_HOST_POSTGRES_PROXY" )
58
65
59
- username := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_USERNAME_POSTGRES" )
60
- postgresConnector , err := NewPostgresConnector (t .Context (),
61
- nil ,
62
- & protos.PostgresConfig {
63
- Host : proxyHost ,
64
- Port : 5432 ,
65
- User : username ,
66
- Database : "postgres" ,
67
- TlsHost : rdsHost ,
68
- RequireTls : true , // Assumed that AWS Root CA is installed
69
- AuthType : protos .PostgresAuthType_POSTGRES_IAM_AUTH ,
70
- AwsAuth : & protos.AwsAuthenticationConfig {
71
- AuthType : protos .AwsIAMAuthConfigType_IAM_AUTH_ASSUME_ROLE ,
72
- AuthConfig : & protos.AwsAuthenticationConfig_Role {
73
- Role : & protos.AWSAuthAssumeRoleConfig {
74
- AssumeRoleArn : os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_ASSUME_ROLE" ),
75
- ChainedRoleArn : ptr .String (os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_CHAINED_ROLE" )),
66
+ username := os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_USERNAME_POSTGRES" )
67
+ postgresConnector , err := NewPostgresConnector (t .Context (),
68
+ nil ,
69
+ & protos.PostgresConfig {
70
+ Host : proxyHost ,
71
+ Port : 5432 ,
72
+ User : username ,
73
+ Database : "postgres" ,
74
+ TlsHost : rdsHost ,
75
+ RequireTls : true , // Assumed that AWS Root CA is installed
76
+ AuthType : protos .PostgresAuthType_POSTGRES_IAM_AUTH ,
77
+ AwsAuth : & protos.AwsAuthenticationConfig {
78
+ AuthType : protos .AwsIAMAuthConfigType_IAM_AUTH_ASSUME_ROLE ,
79
+ AuthConfig : & protos.AwsAuthenticationConfig_Role {
80
+ Role : & protos.AWSAuthAssumeRoleConfig {
81
+ AssumeRoleArn : os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_ASSUME_ROLE" ),
82
+ ChainedRoleArn : ptr .String (os .Getenv ("FLOW_TESTS_RDS_IAM_AUTH_CHAINED_ROLE" )),
83
+ },
84
+ },
76
85
},
77
- },
78
- },
86
+ })
87
+ require .NoError (t , err )
88
+ defer postgresConnector .Close ()
89
+ rows , err := postgresConnector .Conn ().Query (t .Context (), "SELECT 1" )
90
+ require .NoError (t , err )
91
+ rowCount := 0
92
+ for rows .Next () {
93
+ rowCount ++
94
+ var val int
95
+ require .NoError (t , rows .Scan (& val ))
96
+ require .Equal (t , 1 , val )
97
+ }
98
+ require .Equal (t , 1 , rowCount )
79
99
})
80
- require .NoError (t , err )
81
- defer postgresConnector .Close ()
82
- rows , err := postgresConnector .Conn ().Query (t .Context (), "SELECT 1" )
83
- require .NoError (t , err )
84
- rowCount := 0
85
- for rows .Next () {
86
- rowCount ++
87
- var val int
88
- require .NoError (t , rows .Scan (& val ))
89
- require .Equal (t , 1 , val )
90
100
}
91
- require .Equal (t , 1 , rowCount )
92
101
}
0 commit comments