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  }