blobtesting

package
v0.17.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2024 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation

Overview

Package blobtesting is used for testing BLOB storage implementations.

Package blobtesting implements storage with fault injection.

Index

Constants

View Source
const (
	MethodGetBlob fault.Method = iota
	MethodGetMetadata
	MethodPutBlob
	MethodDeleteBlob
	MethodListBlobs
	MethodListBlobsItem
	MethodClose
	MethodFlushCaches
	MethodGetCapacity
)

Supported faulty methods.

View Source
const MinCleanupAge = time.Hour

MinCleanupAge is the default cleanup age.

Variables

View Source
var ErrBlobLocked = errors.New("cannot alter object before retention period expires") // +checklocksignore
View Source
var TestValidationOptions = providervalidation.Options{
	MaxClockDrift:                   3 * time.Minute,
	ConcurrencyTestDuration:         15 * time.Second,
	NumEquivalentStorageConnections: 5,
	NumPutBlobWorkers:               3,
	NumGetBlobWorkers:               3,
	NumGetMetadataWorkers:           3,
	NumListBlobsWorkers:             3,
	MaxBlobLength:                   10e6,
}

TestValidationOptions is the set of options used when running providing validation from tests.

Functions

func AssertConnectionInfoRoundTrips

func AssertConnectionInfoRoundTrips(ctx context.Context, t *testing.T, s blob.Storage)

AssertConnectionInfoRoundTrips verifies that the ConnectionInfo returned by a given storage can be used to create equivalent storage.

func AssertGetBlob

func AssertGetBlob(ctx context.Context, t *testing.T, s blob.Storage, blobID blob.ID, expected []byte)

AssertGetBlob asserts that the specified BLOB has correct content.

func AssertGetBlobNotFound

func AssertGetBlobNotFound(ctx context.Context, t *testing.T, s blob.Storage, blobID blob.ID)

AssertGetBlobNotFound asserts that GetBlob() for specified blobID returns ErrNotFound.

func AssertGetMetadataNotFound added in v0.8.0

func AssertGetMetadataNotFound(ctx context.Context, t *testing.T, s blob.Storage, blobID blob.ID)

AssertGetMetadataNotFound asserts that GetMetadata() for specified blobID returns ErrNotFound.

func AssertInvalidCredentials added in v0.10.4

func AssertInvalidCredentials(ctx context.Context, t *testing.T, s blob.Storage, blobID blob.ID)

AssertInvalidCredentials asserts that GetBlob() for specified blobID returns ErrInvalidCredentials.

func AssertInvalidOffsetLength

func AssertInvalidOffsetLength(ctx context.Context, t *testing.T, s blob.Storage, blobID blob.ID, offset, length int64)

AssertInvalidOffsetLength verifies that the given combination of (offset,length) fails on GetBlob().

func AssertListResults

func AssertListResults(ctx context.Context, t *testing.T, s blob.Storage, prefix blob.ID, want ...blob.ID)

AssertListResults asserts that the list results with given prefix return the specified list of names in order.

func AssertListResultsIDs added in v0.9.0

func AssertListResultsIDs(ctx context.Context, t *testing.T, s blob.Storage, prefix blob.ID, want ...blob.ID)

AssertListResultsIDs asserts that the list results with given prefix return the specified list of names.

func AssertTimestampsCloseEnough added in v0.9.8

func AssertTimestampsCloseEnough(t *testing.T, blobID blob.ID, got, want time.Time)

AssertTimestampsCloseEnough asserts that two provided times are close enough - some providers don't store timestamps exactly but round them up/down by several seconds.

func CleanupOldData added in v0.9.0

func CleanupOldData(ctx context.Context, tb testing.TB, st blob.Storage, cleanupAge time.Duration)

CleanupOldData removes blobs older than provided time from storage using provided prefix.

func NewEventuallyConsistentStorage added in v0.6.0

func NewEventuallyConsistentStorage(st blob.Storage, listSettleTime time.Duration, timeNow func() time.Time) blob.Storage

NewEventuallyConsistentStorage returns an eventually-consistent storage wrapper on top of provided storage.

func NewMapStorage

func NewMapStorage(data DataMap, keyTime map[blob.ID]time.Time, timeNow func() time.Time) blob.Storage

NewMapStorage returns an implementation of Storage backed by the contents of given map. Used primarily for testing.

func NewMapStorageWithLimit added in v0.14.0

func NewMapStorageWithLimit(data DataMap, keyTime map[blob.ID]time.Time, timeNow func() time.Time, limit int64) blob.Storage

NewMapStorageWithLimit returns an implementation of Storage backed by the contents of given map. Used primarily for testing.

func VerifyConcurrentAccess added in v0.5.2

func VerifyConcurrentAccess(t *testing.T, st blob.Storage, options ConcurrentAccessOptions)

VerifyConcurrentAccess tests data races on a repository to ensure only clean errors are returned.

func VerifyStorage

func VerifyStorage(ctx context.Context, t *testing.T, r blob.Storage, opts blob.PutOptions)

VerifyStorage verifies the behavior of the specified storage.

Types

type ConcurrentAccessOptions added in v0.5.2

type ConcurrentAccessOptions struct {
	NumBlobs int // number of shared blos in the pool

	Getters  int
	Putters  int
	Deleters int
	Listers  int

	Iterations int

	RangeGetPercentage              int // 0..100 - probability of issuing range get
	NonExistentListPrefixPercentage int // probability of issuing non-matching list prefix
}

ConcurrentAccessOptions encapsulates parameters for VerifyConcurrentAccess.

type DataMap

type DataMap map[blob.ID][]byte

DataMap is a map of blob ID to their contents.

type FaultyStorage

type FaultyStorage struct {
	*fault.Set
	// contains filtered or unexported fields
}

FaultyStorage implements fault injection for FaultyStorage.

func NewFaultyStorage added in v0.9.8

func NewFaultyStorage(base blob.Storage) *FaultyStorage

NewFaultyStorage creates new Storage with fault injection.

func (*FaultyStorage) Close

func (s *FaultyStorage) Close(ctx context.Context) error

Close implements blob.Storage.

func (*FaultyStorage) ConnectionInfo

func (s *FaultyStorage) ConnectionInfo() blob.ConnectionInfo

ConnectionInfo implements blob.Storage.

func (*FaultyStorage) DeleteBlob

func (s *FaultyStorage) DeleteBlob(ctx context.Context, id blob.ID) error

DeleteBlob implements blob.Storage.

func (*FaultyStorage) DisplayName added in v0.6.0

func (s *FaultyStorage) DisplayName() string

DisplayName implements blob.Storage.

func (*FaultyStorage) ExtendBlobRetention added in v0.14.0

func (s *FaultyStorage) ExtendBlobRetention(ctx context.Context, b blob.ID, opts blob.ExtendOptions) error

ExtendBlobRetention implements blob.Storage.

func (*FaultyStorage) FlushCaches added in v0.9.0

func (s *FaultyStorage) FlushCaches(ctx context.Context) error

FlushCaches implements blob.Storage.

func (*FaultyStorage) GetBlob

func (s *FaultyStorage) GetBlob(ctx context.Context, id blob.ID, offset, length int64, output blob.OutputBuffer) error

GetBlob implements blob.Storage.

func (*FaultyStorage) GetCapacity added in v0.10.7

func (s *FaultyStorage) GetCapacity(ctx context.Context) (blob.Capacity, error)

GetCapacity implements blob.Volume.

func (*FaultyStorage) GetMetadata added in v0.6.0

func (s *FaultyStorage) GetMetadata(ctx context.Context, id blob.ID) (blob.Metadata, error)

GetMetadata implements blob.Storage.

func (*FaultyStorage) IsReadOnly added in v0.14.0

func (s *FaultyStorage) IsReadOnly() bool

func (*FaultyStorage) ListBlobs

func (s *FaultyStorage) ListBlobs(ctx context.Context, prefix blob.ID, callback func(blob.Metadata) error) error

ListBlobs implements blob.Storage.

func (*FaultyStorage) PutBlob

func (s *FaultyStorage) PutBlob(ctx context.Context, id blob.ID, data blob.Bytes, opts blob.PutOptions) error

PutBlob implements blob.Storage.

type RetentionStorage added in v0.14.0

type RetentionStorage interface {
	blob.Storage
	TouchBlob(ctx context.Context, id blob.ID, threshold time.Duration) (time.Time, error)
	GetRetention(ctx context.Context, id blob.ID) (blob.RetentionMode, time.Time, error)
}

RetentionStorage allows for better testing of retention and object locking-related code by allowing callers to get the retention parameters of the blob and attempt "modifying" the blob with TouchBlob.

func NewVersionedMapStorage added in v0.9.8

func NewVersionedMapStorage(timeNow func() time.Time) RetentionStorage

NewVersionedMapStorage returns an implementation of Storage backed by the contents of an internal in-memory map used primarily for testing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL