storage/fakestorage.go (52 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License 2.0; // you may not use this file except in compliance with the Elastic License 2.0. package storage import ( "encoding/json" "os" "testing" "github.com/fsouza/fake-gcs-server/fakestorage" "github.com/stretchr/testify/require" ) const fakePackageStorageBucketInternal = "fake-package-storage-internal" var FakeIndexerOptions = IndexerOptions{ PackageStorageBucketInternal: "gs://" + fakePackageStorageBucketInternal, WatchInterval: 0, } func PrepareFakeServer(tb testing.TB, indexPath string) *fakestorage.Server { indexContent, err := os.ReadFile(indexPath) require.NoError(tb, err, "index file must be populated") const firstRevision = "1" serverObjects := prepareServerObjects(tb, firstRevision, indexContent) return fakestorage.NewServer(serverObjects) } func updateFakeServer(tb testing.TB, server *fakestorage.Server, revision, indexPath string) { indexContent, err := os.ReadFile(indexPath) require.NoError(tb, err, "index file must be populated") serverObjects := prepareServerObjects(tb, revision, indexContent) for _, so := range serverObjects { server.CreateObject(so) } } type searchIndexAll struct { Packages []packageIndex `json:"packages"` } func prepareServerObjects(tb testing.TB, revision string, indexContent []byte) []fakestorage.Object { var index searchIndexAll err := json.Unmarshal(indexContent, &index) require.NoError(tb, err, "index file must be valid") require.NotEmpty(tb, index.Packages, "index file must contain some package entries") var serverObjects []fakestorage.Object // Add cursor and index file serverObjects = append(serverObjects, fakestorage.Object{ ObjectAttrs: fakestorage.ObjectAttrs{ BucketName: fakePackageStorageBucketInternal, Name: cursorStoragePath, }, Content: []byte(`{"current":"` + revision + `"}`), }) serverObjects = append(serverObjects, fakestorage.Object{ ObjectAttrs: fakestorage.ObjectAttrs{ BucketName: fakePackageStorageBucketInternal, Name: joinObjectPaths(v2MetadataStoragePath, revision, searchIndexAllFile), }, Content: indexContent, }) tb.Logf("Prepared %d packages with total %d server objects.", len(index.Packages), len(serverObjects)) return serverObjects }