github.com/rudderlabs/rudder-go-kit@v0.30.0/filemanager/s3manager_test.go (about)

     1  package filemanager
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/aws/aws-sdk-go/aws"
     9  	"github.com/stretchr/testify/assert"
    10  
    11  	"github.com/rudderlabs/rudder-go-kit/awsutil"
    12  	"github.com/rudderlabs/rudder-go-kit/logger"
    13  )
    14  
    15  func TestNewS3ManagerWithNil(t *testing.T) {
    16  	s3Manager, err := NewS3Manager(nil, logger.NOP, func() time.Duration { return time.Minute })
    17  	assert.EqualError(t, err, "config should not be nil")
    18  	assert.Nil(t, s3Manager)
    19  }
    20  
    21  func TestNewS3ManagerWithAccessKeys(t *testing.T) {
    22  	s3Manager, err := NewS3Manager(map[string]interface{}{
    23  		"bucketName":  "someBucket",
    24  		"region":      "someRegion",
    25  		"accessKeyID": "someAccessKeyId",
    26  		"accessKey":   "someSecretAccessKey",
    27  	}, logger.NOP, func() time.Duration { return time.Minute })
    28  	assert.Nil(t, err)
    29  	assert.NotNil(t, s3Manager)
    30  	assert.Equal(t, "someBucket", s3Manager.config.Bucket)
    31  	assert.Equal(t, aws.String("someRegion"), s3Manager.config.Region)
    32  	assert.Equal(t, "someAccessKeyId", s3Manager.sessionConfig.AccessKeyID)
    33  	assert.Equal(t, "someSecretAccessKey", s3Manager.sessionConfig.AccessKey)
    34  	assert.Equal(t, false, s3Manager.sessionConfig.RoleBasedAuth)
    35  }
    36  
    37  func TestNewS3ManagerWithRole(t *testing.T) {
    38  	s3Manager, err := NewS3Manager(map[string]interface{}{
    39  		"bucketName": "someBucket",
    40  		"region":     "someRegion",
    41  		"iamRoleARN": "someIAMRole",
    42  		"externalID": "someExternalID",
    43  	}, logger.NOP, func() time.Duration { return time.Minute })
    44  	assert.Nil(t, err)
    45  	assert.NotNil(t, s3Manager)
    46  	assert.Equal(t, "someBucket", s3Manager.config.Bucket)
    47  	assert.Equal(t, aws.String("someRegion"), s3Manager.config.Region)
    48  	assert.Equal(t, "someIAMRole", s3Manager.sessionConfig.IAMRoleARN)
    49  	assert.Equal(t, "someExternalID", s3Manager.sessionConfig.ExternalID)
    50  	assert.Equal(t, true, s3Manager.sessionConfig.RoleBasedAuth)
    51  }
    52  
    53  func TestNewS3ManagerWithBothAccessKeysAndRole(t *testing.T) {
    54  	s3Manager, err := NewS3Manager(map[string]interface{}{
    55  		"bucketName":  "someBucket",
    56  		"region":      "someRegion",
    57  		"iamRoleARN":  "someIAMRole",
    58  		"externalID":  "someExternalID",
    59  		"accessKeyID": "someAccessKeyId",
    60  		"accessKey":   "someSecretAccessKey",
    61  	}, logger.NOP, func() time.Duration { return time.Minute })
    62  	assert.Nil(t, err)
    63  	assert.NotNil(t, s3Manager)
    64  	assert.Equal(t, "someBucket", s3Manager.config.Bucket)
    65  	assert.Equal(t, aws.String("someRegion"), s3Manager.config.Region)
    66  	assert.Equal(t, "someAccessKeyId", s3Manager.sessionConfig.AccessKeyID)
    67  	assert.Equal(t, "someSecretAccessKey", s3Manager.sessionConfig.AccessKey)
    68  	assert.Equal(t, "someIAMRole", s3Manager.sessionConfig.IAMRoleARN)
    69  	assert.Equal(t, "someExternalID", s3Manager.sessionConfig.ExternalID)
    70  	assert.Equal(t, true, s3Manager.sessionConfig.RoleBasedAuth)
    71  }
    72  
    73  func TestNewS3ManagerWithBothAccessKeysAndRoleButRoleBasedAuthFalse(t *testing.T) {
    74  	s3Manager, err := NewS3Manager(map[string]interface{}{
    75  		"bucketName":    "someBucket",
    76  		"region":        "someRegion",
    77  		"iamRoleARN":    "someIAMRole",
    78  		"externalID":    "someExternalID",
    79  		"accessKeyID":   "someAccessKeyId",
    80  		"accessKey":     "someSecretAccessKey",
    81  		"roleBasedAuth": false,
    82  	}, logger.NOP, func() time.Duration { return time.Minute })
    83  	assert.Nil(t, err)
    84  	assert.NotNil(t, s3Manager)
    85  	assert.Equal(t, "someBucket", s3Manager.config.Bucket)
    86  	assert.Equal(t, aws.String("someRegion"), s3Manager.config.Region)
    87  	assert.Equal(t, "someAccessKeyId", s3Manager.sessionConfig.AccessKeyID)
    88  	assert.Equal(t, "someSecretAccessKey", s3Manager.sessionConfig.AccessKey)
    89  	assert.Equal(t, "someIAMRole", s3Manager.sessionConfig.IAMRoleARN)
    90  	assert.Equal(t, "someExternalID", s3Manager.sessionConfig.ExternalID)
    91  	assert.Equal(t, false, s3Manager.sessionConfig.RoleBasedAuth)
    92  }
    93  
    94  func TestGetSessionWithAccessKeys(t *testing.T) {
    95  	s3Manager := S3Manager{
    96  		baseManager: &baseManager{
    97  			logger: logger.NOP,
    98  		},
    99  		config: &S3Config{
   100  			Bucket: "someBucket",
   101  			Region: aws.String("someRegion"),
   102  		},
   103  		sessionConfig: &awsutil.SessionConfig{
   104  			AccessKeyID: "someAccessKeyId",
   105  			AccessKey:   "someSecretAccessKey",
   106  			Region:      "someRegion",
   107  		},
   108  	}
   109  	awsSession, err := s3Manager.GetSession(context.TODO())
   110  	assert.Nil(t, err)
   111  	assert.NotNil(t, awsSession)
   112  	assert.NotNil(t, s3Manager.session)
   113  }
   114  
   115  func TestGetSessionWithIAMRole(t *testing.T) {
   116  	s3Manager := S3Manager{
   117  		baseManager: &baseManager{
   118  			logger: logger.NOP,
   119  		},
   120  		config: &S3Config{
   121  			Bucket: "someBucket",
   122  			Region: aws.String("someRegion"),
   123  		},
   124  		sessionConfig: &awsutil.SessionConfig{
   125  			IAMRoleARN: "someIAMRole",
   126  			ExternalID: "someExternalID",
   127  			Region:     "someRegion",
   128  		},
   129  	}
   130  	awsSession, err := s3Manager.GetSession(context.TODO())
   131  	assert.Nil(t, err)
   132  	assert.NotNil(t, awsSession)
   133  	assert.NotNil(t, s3Manager.session)
   134  }