github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/block/s3/adapter_test.go (about) 1 package s3_test 2 3 import ( 4 "context" 5 "net/url" 6 "regexp" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 "github.com/treeverse/lakefs/pkg/block/blocktest" 11 "github.com/treeverse/lakefs/pkg/block/params" 12 "github.com/treeverse/lakefs/pkg/block/s3" 13 ) 14 15 func getS3BlockAdapter(t *testing.T) *s3.Adapter { 16 s3params := params.S3{ 17 Region: "us-east-1", 18 Endpoint: blockURL, 19 ForcePathStyle: true, 20 DiscoverBucketRegion: false, 21 Credentials: params.S3Credentials{ 22 AccessKeyID: minioTestAccessKeyID, 23 SecretAccessKey: minioTestSecretAccessKey, 24 }, 25 } 26 adapter, err := s3.NewAdapter(context.Background(), s3params) 27 if err != nil { 28 t.Fatal("cannot create s3 adapter: ", err) 29 } 30 return adapter 31 } 32 33 func TestS3Adapter(t *testing.T) { 34 basePath, err := url.JoinPath("s3://", bucketName) 35 require.NoError(t, err) 36 localPath, err := url.JoinPath(basePath, "lakefs") 37 require.NoError(t, err) 38 externalPath, err := url.JoinPath(basePath, "external") 39 require.NoError(t, err) 40 41 adapter := getS3BlockAdapter(t) 42 blocktest.AdapterTest(t, adapter, localPath, externalPath) 43 } 44 45 func TestAdapterNamespace(t *testing.T) { 46 adapter := getS3BlockAdapter(t) 47 expr, err := regexp.Compile(adapter.GetStorageNamespaceInfo().ValidityRegex) 48 require.NoError(t, err) 49 50 tests := []struct { 51 Name string 52 Namespace string 53 Success bool 54 }{ 55 { 56 Name: "valid_path", 57 Namespace: "s3://bucket/path/to/repo1", 58 Success: true, 59 }, 60 { 61 Name: "double_slash", 62 Namespace: "s3://bucket/path//to/repo1", 63 Success: true, 64 }, 65 { 66 Name: "invalid_schema", 67 Namespace: "s3:/test/adls/core/windows/net", 68 Success: false, 69 }, 70 { 71 Name: "invalid_path", 72 Namespace: "https://test/adls/core/windows/net", 73 Success: false, 74 }, 75 { 76 Name: "invalid_string", 77 Namespace: "this is a bad string", 78 Success: false, 79 }, 80 } 81 for _, tt := range tests { 82 t.Run(tt.Name, func(t *testing.T) { 83 require.Equal(t, tt.Success, expr.MatchString(tt.Namespace)) 84 }) 85 } 86 }