mirror of https://github.com/poanetwork/gecko.git
70 lines
1.6 KiB
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)
|
|
}
|