Add unit tests
This commit is contained in:
		
							parent
							
								
									ede2770ea4
								
							
						
					
					
						commit
						474d869d2e
					
				|  | @ -42,7 +42,7 @@ type iamTokenGenerator struct { | |||
| } | ||||
| 
 | ||||
| // New creates a new IAMTokenGenerator instance
 | ||||
| func New(serviceName, clusterName, userName string) (*IAMTokenGenerator, error) { | ||||
| func New(serviceName, clusterName, userName string) (TokenGenerator, error) { | ||||
| 
 | ||||
| 	ctx := context.Background() | ||||
| 	cfg, err := config.LoadDefaultConfig(ctx) | ||||
|  |  | |||
|  | @ -0,0 +1,35 @@ | |||
| package auth | ||||
| 
 | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/require" | ||||
| ) | ||||
| 
 | ||||
| func TestAWSIAMTokenGenerator(t *testing.T) { | ||||
| 	// Set up the environment, so we don't make any external calls to AWS
 | ||||
| 	t.Setenv("AWS_CONFIG_FILE", "file_not_exists") | ||||
| 	t.Setenv("AWS_SHARED_CREDENTIALS_FILE", "file_not_exists") | ||||
| 	t.Setenv("AWS_ENDPOINT_URL", "http://localhost:9999/aws") | ||||
| 	t.Setenv("AWS_ACCESS_KEY_ID", "access_key") | ||||
| 	t.Setenv("AWS_SECRET_ACCESS_KEY", "secret_key") | ||||
| 	t.Setenv("AWS_REGION", "us-east-1") | ||||
| 
 | ||||
| 	tokenGenerator, err := New("elasticache", "test-cluster", "test-user") | ||||
| 	require.NotNil(t, tokenGenerator) | ||||
| 	require.NoError(t, err) | ||||
| 
 | ||||
| 	token, err := tokenGenerator.GenerateToken() | ||||
| 	require.NoError(t, err) | ||||
| 	require.NotEmpty(t, token) | ||||
| 	require.Contains(t, token, "X-Amz-Algorithm", "signed token should contain algorithm attribute") | ||||
| 	require.Contains(t, token, "User=test-user", "signed token should contain user parameter") | ||||
| 	require.Contains(t, token, "X-Amz-Credential", "signed token should contain credential attribute") | ||||
| 	require.Contains(t, token, "X-Amz-Date", "signed token should contain date attribute") | ||||
| 	require.Contains(t, token, "X-Amz-Expires", "signed token should contain expires attribute") | ||||
| 	require.Contains(t, token, "X-Amz-SignedHeaders", "signed token should contain signed headers attribute") | ||||
| 	require.Contains(t, token, "X-Amz-Signature", "signed token should contain signature attribute") | ||||
| 	require.Contains(t, token, "Action=connect", "signed token should contain connect action") | ||||
| 	require.False(t, strings.HasPrefix(token, "http://"), "token should not have http:// scheme") | ||||
| } | ||||
|  | @ -11,6 +11,7 @@ import ( | |||
| 	"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/sessions/tests" | ||||
| 	. "github.com/onsi/ginkgo/v2" | ||||
| 	. "github.com/onsi/gomega" | ||||
| 	"github.com/redis/go-redis/v9" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
|  | @ -271,4 +272,41 @@ var _ = Describe("Redis SessionStore Tests", func() { | |||
| 			Expect(opts).To(BeNil()) | ||||
| 		}) | ||||
| 	}) | ||||
| 
 | ||||
| 	Describe("AWSIAMAuth", func() { | ||||
| 		Context("with AWS IAM options", func() { | ||||
| 			It("should initialize CredentialsProvider when AWSIAMConfig is present", func() { | ||||
| 				redisOpts := options.RedisStoreOptions{ | ||||
| 					AWSIAMConfig: &options.AWSIAMOptions{ | ||||
| 						ServiceName: "elasticache", | ||||
| 						ClusterName: "test-cluster", | ||||
| 						Username:    "test-user", | ||||
| 					}, | ||||
| 				} | ||||
| 
 | ||||
| 				var opt *redis.Options | ||||
| 				opt = &redis.Options{} | ||||
| 
 | ||||
| 				err := setupAWSIAMAuth(redisOpts, opt) | ||||
| 				Expect(err).ToNot(HaveOccurred()) | ||||
| 				Expect(opt.CredentialsProvider).ToNot(BeNil()) | ||||
| 
 | ||||
| 				// Verify the CredentialsProvider returns the expected username
 | ||||
| 				username, _ := opt.CredentialsProvider() | ||||
| 				Expect(username).To(Equal("test-user")) | ||||
| 			}) | ||||
| 			It("should not initialize CredentialsProvider when AWSIAMConfig is nil", func() { | ||||
| 				redisOpts := options.RedisStoreOptions{ | ||||
| 					AWSIAMConfig: nil, | ||||
| 				} | ||||
| 
 | ||||
| 				var opt *redis.Options | ||||
| 				opt = &redis.Options{} | ||||
| 
 | ||||
| 				err := setupAWSIAMAuth(redisOpts, opt) | ||||
| 				Expect(err).ToNot(HaveOccurred()) | ||||
| 				Expect(opt.CredentialsProvider).To(BeNil()) | ||||
| 			}) | ||||
| 		}) | ||||
| 	}) | ||||
| }) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue