diff options
Diffstat (limited to 'swarm/state/dbstore_test.go')
-rw-r--r-- | swarm/state/dbstore_test.go | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/swarm/state/dbstore_test.go b/swarm/state/dbstore_test.go new file mode 100644 index 000000000..6683e788f --- /dev/null +++ b/swarm/state/dbstore_test.go @@ -0,0 +1,122 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package state + +import ( + "bytes" + "errors" + "io/ioutil" + "os" + "strings" + "testing" +) + +var ErrInvalidArraySize = errors.New("invalid byte array size") +var ErrInvalidValuePersisted = errors.New("invalid value was persisted to the db") + +type SerializingType struct { + key string + value string +} + +func (st *SerializingType) MarshalBinary() (data []byte, err error) { + d := []byte(strings.Join([]string{st.key, st.value}, ";")) + + return d, nil +} + +func (st *SerializingType) UnmarshalBinary(data []byte) (err error) { + d := bytes.Split(data, []byte(";")) + l := len(d) + if l == 0 { + return ErrInvalidArraySize + } + if l == 2 { + keyLen := len(d[0]) + st.key = string(d[0][:keyLen]) + + valLen := len(d[1]) + st.value = string(d[1][:valLen]) + } + + return nil +} + +// TestDBStore tests basic functionality of DBStore. +func TestDBStore(t *testing.T) { + dir, err := ioutil.TempDir("", "db_store_test") + if err != nil { + panic(err) + } + defer os.RemoveAll(dir) + + store, err := NewDBStore(dir) + if err != nil { + t.Fatal(err) + } + + testStore(t, store) + + store.Close() + + persistedStore, err := NewDBStore(dir) + if err != nil { + t.Fatal(err) + } + defer persistedStore.Close() + + testPersistedStore(t, persistedStore) +} + +func testStore(t *testing.T, store Store) { + ser := &SerializingType{key: "key1", value: "value1"} + jsonify := []string{"a", "b", "c"} + + err := store.Put(ser.key, ser) + if err != nil { + t.Fatal(err) + } + + err = store.Put("key2", jsonify) + if err != nil { + t.Fatal(err) + } + +} + +func testPersistedStore(t *testing.T, store Store) { + ser := &SerializingType{} + + err := store.Get("key1", ser) + if err != nil { + t.Fatal(err) + } + + if ser.key != "key1" || ser.value != "value1" { + t.Fatal(ErrInvalidValuePersisted) + } + + as := []string{} + err = store.Get("key2", &as) + + if len(as) != 3 { + t.Fatalf("serialized array did not match expectation") + } + if as[0] != "a" || as[1] != "b" || as[2] != "c" { + t.Fatalf("elements serialized did not match expected values") + } +} |