Add pseudo transactional test
This commit is contained in:
parent
4305900a64
commit
41ae5d14ce
|
@ -117,5 +117,5 @@ TxnWalk:
|
|||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package physical
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
radix "github.com/armon/go-radix"
|
||||
|
@ -82,3 +84,171 @@ func TestPseudo_Basic(t *testing.T) {
|
|||
testBackend(t, p)
|
||||
testBackend_ListPrefix(t, p)
|
||||
}
|
||||
|
||||
func TestPseudo_SuccessfulTransaction(t *testing.T) {
|
||||
logger := logformat.NewVaultLogger(log.LevelTrace)
|
||||
p := newFaultyPseudo(logger, nil)
|
||||
|
||||
txns := setupPseudo(p, t)
|
||||
|
||||
if err := p.Transaction(txns); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
keys, err := p.List("")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
expected := []string{"foo", "zip"}
|
||||
|
||||
sort.Strings(keys)
|
||||
sort.Strings(expected)
|
||||
if !reflect.DeepEqual(keys, expected) {
|
||||
t.Fatalf("mismatch: expected\n%#v\ngot\n%#v\n", expected, keys)
|
||||
}
|
||||
|
||||
entry, err := p.Get("foo")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if entry == nil {
|
||||
t.Fatal("got nil entry")
|
||||
}
|
||||
if entry.Value == nil {
|
||||
t.Fatal("got nil value")
|
||||
}
|
||||
if string(entry.Value) != "bar3" {
|
||||
t.Fatal("updates did not apply correctly")
|
||||
}
|
||||
|
||||
entry, err = p.Get("zip")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if entry == nil {
|
||||
t.Fatal("got nil entry")
|
||||
}
|
||||
if entry.Value == nil {
|
||||
t.Fatal("got nil value")
|
||||
}
|
||||
if string(entry.Value) != "zap3" {
|
||||
t.Fatal("updates did not apply correctly")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPseudo_FailedTransaction(t *testing.T) {
|
||||
logger := logformat.NewVaultLogger(log.LevelTrace)
|
||||
p := newFaultyPseudo(logger, []string{"zip"})
|
||||
|
||||
txns := setupPseudo(p, t)
|
||||
|
||||
if err := p.Transaction(txns); err == nil {
|
||||
t.Fatal("expected error during transaction")
|
||||
}
|
||||
|
||||
keys, err := p.List("")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
expected := []string{"foo", "zip", "deleteme", "deleteme2"}
|
||||
|
||||
sort.Strings(keys)
|
||||
sort.Strings(expected)
|
||||
if !reflect.DeepEqual(keys, expected) {
|
||||
t.Fatalf("mismatch: expected\n%#v\ngot\n%#v\n", expected, keys)
|
||||
}
|
||||
|
||||
entry, err := p.Get("foo")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if entry == nil {
|
||||
t.Fatal("got nil entry")
|
||||
}
|
||||
if entry.Value == nil {
|
||||
t.Fatal("got nil value")
|
||||
}
|
||||
if string(entry.Value) != "bar" {
|
||||
t.Fatal("values did not rollback correctly")
|
||||
}
|
||||
|
||||
entry, err = p.Get("zip")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if entry == nil {
|
||||
t.Fatal("got nil entry")
|
||||
}
|
||||
if entry.Value == nil {
|
||||
t.Fatal("got nil value")
|
||||
}
|
||||
if string(entry.Value) != "zap" {
|
||||
t.Fatal("values did not rollback correctly")
|
||||
}
|
||||
}
|
||||
|
||||
func setupPseudo(p *faultyPseudo, t *testing.T) []TxnEntry {
|
||||
// Add a few keys so that we test rollback with deletion
|
||||
if err := p.Put(&Entry{
|
||||
Key: "foo",
|
||||
Value: []byte("bar"),
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := p.Put(&Entry{
|
||||
Key: "zip",
|
||||
Value: []byte("zap"),
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := p.Put(&Entry{
|
||||
Key: "deleteme",
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := p.Put(&Entry{
|
||||
Key: "deleteme2",
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
txns := []TxnEntry{
|
||||
TxnEntry{
|
||||
Operation: PutOperation,
|
||||
Entry: &Entry{
|
||||
Key: "foo",
|
||||
Value: []byte("bar2"),
|
||||
},
|
||||
},
|
||||
TxnEntry{
|
||||
Operation: DeleteOperation,
|
||||
Entry: &Entry{
|
||||
Key: "deleteme",
|
||||
},
|
||||
},
|
||||
TxnEntry{
|
||||
Operation: PutOperation,
|
||||
Entry: &Entry{
|
||||
Key: "foo",
|
||||
Value: []byte("bar3"),
|
||||
},
|
||||
},
|
||||
TxnEntry{
|
||||
Operation: DeleteOperation,
|
||||
Entry: &Entry{
|
||||
Key: "deleteme2",
|
||||
},
|
||||
},
|
||||
TxnEntry{
|
||||
Operation: PutOperation,
|
||||
Entry: &Entry{
|
||||
Key: "zip",
|
||||
Value: []byte("zap3"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return txns
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue