github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/gateway/testutil/gateway_setup.go (about) 1 package testutil 2 3 import ( 4 "context" 5 "net/http" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/spf13/viper" 11 "github.com/treeverse/lakefs/pkg/auth" 12 "github.com/treeverse/lakefs/pkg/auth/model" 13 "github.com/treeverse/lakefs/pkg/block" 14 "github.com/treeverse/lakefs/pkg/catalog" 15 "github.com/treeverse/lakefs/pkg/config" 16 "github.com/treeverse/lakefs/pkg/gateway" 17 "github.com/treeverse/lakefs/pkg/gateway/multipart" 18 "github.com/treeverse/lakefs/pkg/kv" 19 "github.com/treeverse/lakefs/pkg/kv/kvparams" 20 _ "github.com/treeverse/lakefs/pkg/kv/mem" 21 "github.com/treeverse/lakefs/pkg/logging" 22 "github.com/treeverse/lakefs/pkg/stats" 23 "github.com/treeverse/lakefs/pkg/testutil" 24 "github.com/treeverse/lakefs/pkg/upload" 25 ) 26 27 type Dependencies struct { 28 blocks block.Adapter 29 auth *FakeAuthService 30 catalog *catalog.Catalog 31 } 32 33 func GetBasicHandler(t *testing.T, authService *FakeAuthService, repoName string) (http.Handler, *Dependencies) { 34 ctx := context.Background() 35 viper.Set(config.BlockstoreTypeKey, block.BlockstoreTypeMem) 36 37 store, err := kv.Open(ctx, kvparams.Config{Type: "mem"}) 38 testutil.MustDo(t, "open kv store", err) 39 defer store.Close() 40 multipartTracker := multipart.NewTracker(store) 41 42 blockstoreType, _ := os.LookupEnv(testutil.EnvKeyUseBlockAdapter) 43 blockAdapter := testutil.NewBlockAdapterByType(t, blockstoreType) 44 45 conf, err := config.NewConfig("") 46 testutil.MustDo(t, "config", err) 47 48 c, err := catalog.New(ctx, catalog.Config{ 49 Config: conf, 50 KVStore: store, 51 PathProvider: upload.DefaultPathProvider, 52 }) 53 testutil.MustDo(t, "build catalog", err) 54 t.Cleanup(func() { 55 _ = c.Close() 56 }) 57 58 storageNamespace := os.Getenv("USE_STORAGE_NAMESPACE") 59 if storageNamespace == "" { 60 storageNamespace = "replay" 61 } 62 63 _, err = c.CreateRepository(ctx, repoName, storageNamespace, "main", false) 64 testutil.Must(t, err) 65 66 handler := gateway.NewHandler(authService.Region, c, multipartTracker, blockAdapter, authService, []string{authService.BareDomain}, &stats.NullCollector{}, upload.DefaultPathProvider, nil, config.DefaultLoggingAuditLogLevel, true, false) 67 68 return handler, &Dependencies{ 69 blocks: blockAdapter, 70 auth: authService, 71 catalog: c, 72 } 73 } 74 75 type FakeAuthService struct { 76 BareDomain string `json:"bare_domain"` 77 AccessKeyID string `json:"access_key_id"` 78 SecretAccessKey string `json:"access_secret_key"` 79 UserID string `json:"user_id"` 80 Region string `json:"region"` 81 } 82 83 func (m *FakeAuthService) GetCredentials(_ context.Context, accessKey string) (*model.Credential, error) { 84 if accessKey != m.AccessKeyID { 85 logging.ContextUnavailable().Fatal("access key in recording different than configuration") 86 } 87 aCred := new(model.Credential) 88 aCred.AccessKeyID = accessKey 89 aCred.SecretAccessKey = m.SecretAccessKey 90 aCred.Username = m.UserID 91 return aCred, nil 92 } 93 94 func (m *FakeAuthService) GetUser(_ context.Context, _ string) (*model.User, error) { 95 return &model.User{ 96 CreatedAt: time.Now(), 97 Username: "user", 98 }, nil 99 } 100 101 func (m *FakeAuthService) Authorize(_ context.Context, _ *auth.AuthorizationRequest) (*auth.AuthorizationResponse, error) { 102 return &auth.AuthorizationResponse{Allowed: true}, nil 103 }