blobtesting

package
v0.9.6 Latest Latest
Warning

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

Go to latest
Published: Nov 21, 2021 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Overview

Package blobtesting is used for testing BLOB storage implementations.

Index

Constants

View Source
const MinCleanupAge = time.Hour

MinCleanupAge is the default cleanup age.

Variables

View Source
var TestValidationOptions = providervalidation.Options{
	MaxClockDrift:           3 * time.Minute,
	ConcurrencyTestDuration: 15 * time.Second,
	NumPutBlobWorkers:       3,
	NumGetBlobWorkers:       3,
	NumGetMetadataWorkers:   3,
	NumListBlobsWorkers:     3,
	MaxBlobLength:           10e6,
}

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

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. nolint:thelper

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 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 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 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. nolint:gocognit,gocyclo,funlen,cyclop

func VerifyStorage

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

VerifyStorage verifies the behavior of the specified storage. nolint:gocyclo,thelper

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 Fault

type Fault struct {
	Repeat      int           // how many times to repeat this fault
	Sleep       time.Duration // sleep before returning
	ErrCallback func() error
	WaitFor     chan struct{} // waits until the given channel is closed before returning
	Err         error         // error to return (can be nil in combination with Sleep and WaitFor)
}

Fault describes the behavior of a single fault.

type FaultyStorage

type FaultyStorage struct {
	Base   blob.Storage
	Faults map[string][]*Fault
	// contains filtered or unexported fields
}

FaultyStorage implements fault injection for Storage.

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) 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) 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) 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.

func (*FaultyStorage) SetTime added in v0.7.0

func (s *FaultyStorage) SetTime(ctx context.Context, id blob.ID, t time.Time) error

SetTime implements blob.Storage.

func (*FaultyStorage) VerifyAllFaultsExercised added in v0.8.0

func (s *FaultyStorage) VerifyAllFaultsExercised(t *testing.T)

VerifyAllFaultsExercised fails the test if some faults have not been exercised.

Jump to

Keyboard shortcuts

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