github.com/Jeffail/benthos/v3@v3.65.0/lib/test/integration/cache/s3_test.go (about) 1 package cache 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/Jeffail/benthos/v3/internal/integration" 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/credentials" 12 "github.com/aws/aws-sdk-go/aws/session" 13 "github.com/aws/aws-sdk-go/service/s3" 14 "github.com/ory/dockertest/v3" 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func createBucket(ctx context.Context, s3Port, bucket string) error { 20 endpoint := fmt.Sprintf("http://localhost:%v", s3Port) 21 22 client := s3.New(session.Must(session.NewSession(&aws.Config{ 23 S3ForcePathStyle: aws.Bool(true), 24 Credentials: credentials.NewStaticCredentials("xxxxx", "xxxxx", "xxxxx"), 25 Endpoint: aws.String(endpoint), 26 Region: aws.String("eu-west-1"), 27 }))) 28 _, err := client.CreateBucket(&s3.CreateBucketInput{ 29 Bucket: &bucket, 30 }) 31 if err != nil { 32 return err 33 } 34 35 return client.WaitUntilBucketExistsWithContext(ctx, &s3.HeadBucketInput{ 36 Bucket: &bucket, 37 }) 38 } 39 40 var _ = registerIntegrationTest("s3", func(t *testing.T) { 41 t.Parallel() 42 43 pool, err := dockertest.NewPool("") 44 require.NoError(t, err) 45 46 pool.MaxWait = time.Second * 30 47 48 resource, err := pool.RunWithOptions(&dockertest.RunOptions{ 49 Repository: "localstack/localstack", 50 ExposedPorts: []string{"4566/tcp"}, 51 Env: []string{"SERVICES=s3"}, 52 }) 53 require.NoError(t, err) 54 t.Cleanup(func() { 55 assert.NoError(t, pool.Purge(resource)) 56 }) 57 58 servicePort := resource.GetPort("4566/tcp") 59 60 resource.Expire(900) 61 require.NoError(t, pool.Retry(func() error { 62 return createBucket(context.Background(), servicePort, "probe-bucket") 63 })) 64 65 template := ` 66 cache_resources: 67 - label: testcache 68 aws_s3: 69 endpoint: http://localhost:$PORT 70 region: eu-west-1 71 force_path_style_urls: true 72 bucket: $ID 73 credentials: 74 id: xxxxx 75 secret: xxxxx 76 token: xxxxx 77 ` 78 suite := integration.CacheTests( 79 integration.CacheTestOpenClose(), 80 integration.CacheTestMissingKey(), 81 integration.CacheTestDoubleAdd(), 82 integration.CacheTestDelete(), 83 integration.CacheTestGetAndSet(1), 84 ) 85 suite.Run( 86 t, template, 87 integration.CacheTestOptPort(servicePort), 88 integration.CacheTestOptPreTest(func(t testing.TB, ctx context.Context, testID string, vars *integration.CacheTestConfigVars) { 89 require.NoError(t, createBucket(ctx, servicePort, testID)) 90 }), 91 ) 92 })