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  }