gecko/chains/atomic/memory_test.go

70 lines
1.6 KiB
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package atomic
import (
"testing"
"github.com/ava-labs/gecko/database/memdb"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/utils/logging"
)
var (
blockchainID0 = ids.Empty.Prefix(0)
blockchainID1 = ids.Empty.Prefix(1)
)
func TestSharedMemorySharedID(t *testing.T) {
sm := SharedMemory{}
sm.Initialize(logging.NoLog{}, memdb.New())
sharedID0 := sm.sharedID(blockchainID0, blockchainID1)
sharedID1 := sm.sharedID(blockchainID1, blockchainID0)
if !sharedID0.Equals(sharedID1) {
t.Fatalf("SharedMemory.sharedID should be communitive")
}
}
func TestSharedMemoryMakeReleaseLock(t *testing.T) {
sm := SharedMemory{}
sm.Initialize(logging.NoLog{}, memdb.New())
sharedID := sm.sharedID(blockchainID0, blockchainID1)
lock0 := sm.makeLock(sharedID)
if lock1 := sm.makeLock(sharedID); lock0 != lock1 {
t.Fatalf("SharedMemory.makeLock should have returned the same lock")
}
sm.releaseLock(sharedID)
if lock2 := sm.makeLock(sharedID); lock0 != lock2 {
t.Fatalf("SharedMemory.makeLock should have returned the same lock")
}
sm.releaseLock(sharedID)
sm.releaseLock(sharedID)
if lock3 := sm.makeLock(sharedID); lock0 == lock3 {
t.Fatalf("SharedMemory.releaseLock should have returned freed the lock")
}
sm.releaseLock(sharedID)
}
func TestSharedMemoryUnknownFree(t *testing.T) {
sm := SharedMemory{}
sm.Initialize(logging.NoLog{}, memdb.New())
sharedID := sm.sharedID(blockchainID0, blockchainID1)
defer func() {
if recover() == nil {
t.Fatalf("Should have panicked due to an unknown free")
}
}()
sm.releaseLock(sharedID)
}