85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
|
package physical
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
radix "github.com/armon/go-radix"
|
||
|
"github.com/hashicorp/vault/helper/logformat"
|
||
|
log "github.com/mgutz/logxi/v1"
|
||
|
)
|
||
|
|
||
|
type faultyPseudo struct {
|
||
|
underlying InmemBackend
|
||
|
faultyPaths map[string]struct{}
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) Get(key string) (*Entry, error) {
|
||
|
return f.underlying.Get(key)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) Put(entry *Entry) error {
|
||
|
return f.underlying.Put(entry)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) Delete(key string) error {
|
||
|
return f.underlying.Delete(key)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) GetInternal(key string) (*Entry, error) {
|
||
|
if _, ok := f.faultyPaths[key]; ok {
|
||
|
return nil, fmt.Errorf("fault")
|
||
|
}
|
||
|
return f.underlying.GetInternal(key)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) PutInternal(entry *Entry) error {
|
||
|
if _, ok := f.faultyPaths[entry.Key]; ok {
|
||
|
return fmt.Errorf("fault")
|
||
|
}
|
||
|
return f.underlying.PutInternal(entry)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) DeleteInternal(key string) error {
|
||
|
if _, ok := f.faultyPaths[key]; ok {
|
||
|
return fmt.Errorf("fault")
|
||
|
}
|
||
|
return f.underlying.DeleteInternal(key)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) List(prefix string) ([]string, error) {
|
||
|
return f.underlying.List(prefix)
|
||
|
}
|
||
|
|
||
|
func (f *faultyPseudo) Transaction(txns []TxnEntry) error {
|
||
|
f.underlying.permitPool.Acquire()
|
||
|
defer f.underlying.permitPool.Release()
|
||
|
|
||
|
f.underlying.Lock()
|
||
|
defer f.underlying.Unlock()
|
||
|
|
||
|
return genericTransactionHandler(f, txns)
|
||
|
}
|
||
|
|
||
|
func newFaultyPseudo(logger log.Logger, faultyPaths []string) *faultyPseudo {
|
||
|
out := &faultyPseudo{
|
||
|
underlying: InmemBackend{
|
||
|
root: radix.New(),
|
||
|
permitPool: NewPermitPool(1),
|
||
|
logger: logger,
|
||
|
},
|
||
|
faultyPaths: make(map[string]struct{}, len(faultyPaths)),
|
||
|
}
|
||
|
for _, v := range faultyPaths {
|
||
|
out.faultyPaths[v] = struct{}{}
|
||
|
}
|
||
|
return out
|
||
|
}
|
||
|
|
||
|
func TestPseudo_Basic(t *testing.T) {
|
||
|
logger := logformat.NewVaultLogger(log.LevelTrace)
|
||
|
p := newFaultyPseudo(logger, nil)
|
||
|
testBackend(t, p)
|
||
|
testBackend_ListPrefix(t, p)
|
||
|
}
|