mirror of https://github.com/poanetwork/gecko.git
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package atomic
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/ava-labs/gecko/database/memdb"
|
|
"github.com/ava-labs/gecko/database/prefixdb"
|
|
"github.com/ava-labs/gecko/database/versiondb"
|
|
"github.com/ava-labs/gecko/utils/logging"
|
|
)
|
|
|
|
func TestWriteAll(t *testing.T) {
|
|
baseDB := memdb.New()
|
|
prefixedDBChain := prefixdb.New([]byte{0}, baseDB)
|
|
prefixedDBSharedMemory := prefixdb.New([]byte{1}, baseDB)
|
|
|
|
sm := SharedMemory{}
|
|
sm.Initialize(logging.NoLog{}, prefixedDBSharedMemory)
|
|
|
|
sharedID := sm.sharedID(blockchainID0, blockchainID1)
|
|
|
|
sharedDB := sm.GetDatabase(sharedID)
|
|
|
|
writeDB0 := versiondb.New(prefixedDBChain)
|
|
writeDB1 := versiondb.New(sharedDB)
|
|
defer sm.ReleaseDatabase(sharedID)
|
|
|
|
if err := writeDB0.Put([]byte{1}, []byte{2}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := writeDB1.Put([]byte{2}, []byte{3}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
batch0, err := writeDB0.CommitBatch()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
batch1, err := writeDB1.CommitBatch()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if err := WriteAll(batch0, batch1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if value, err := prefixedDBChain.Get([]byte{1}); err != nil {
|
|
t.Fatal(err)
|
|
} else if !bytes.Equal(value, []byte{2}) {
|
|
t.Fatalf("database.Get Returned: 0x%x ; Expected: 0x%x", value, []byte{2})
|
|
} else if value, err := sharedDB.Get([]byte{2}); err != nil {
|
|
t.Fatal(err)
|
|
} else if !bytes.Equal(value, []byte{3}) {
|
|
t.Fatalf("database.Get Returned: 0x%x ; Expected: 0x%x", value, []byte{3})
|
|
}
|
|
}
|