70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package loopback
|
|
|
|
import (
|
|
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/storagebuckets"
|
|
"google.golang.org/grpc/codes"
|
|
)
|
|
|
|
// PluginMockError is used to mock an error when interacting with an external object store.
|
|
type PluginMockError struct {
|
|
bucketName string
|
|
bucketPrefix string
|
|
objectKey string
|
|
errMsg string
|
|
errCode codes.Code
|
|
}
|
|
|
|
func (e PluginMockError) match(bucket *storagebuckets.StorageBucket, key string) bool {
|
|
if key != "" && e.objectKey != key {
|
|
return false
|
|
}
|
|
if e.bucketName != bucket.BucketName {
|
|
return false
|
|
}
|
|
if bucket.BucketPrefix != "" && e.bucketPrefix != bucket.BucketPrefix {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
type TestOption func(*TestOptions) error
|
|
|
|
type TestOptions struct {
|
|
withMockBuckets map[BucketName]Bucket
|
|
withMockError []PluginMockError
|
|
}
|
|
|
|
// getTestOpts - iterate the inbound Options and return a struct
|
|
func getTestOpts(opt ...TestOption) (TestOptions, error) {
|
|
opts := getDefaultTestOptions()
|
|
for _, o := range opt {
|
|
if err := o(&opts); err != nil {
|
|
return opts, err
|
|
}
|
|
}
|
|
return opts, nil
|
|
}
|
|
|
|
func getDefaultTestOptions() TestOptions {
|
|
return TestOptions{}
|
|
}
|
|
|
|
// WithMockBuckets provides an option to create mocked external object store buckets.
|
|
func WithMockBuckets(buckets map[BucketName]Bucket) TestOption {
|
|
return func(o *TestOptions) error {
|
|
o.withMockBuckets = buckets
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithMockError provides an option to mock an error when interacting with an external object store.
|
|
func WithMockError(err PluginMockError) TestOption {
|
|
return func(o *TestOptions) error {
|
|
o.withMockError = append(o.withMockError, err)
|
|
return nil
|
|
}
|
|
}
|