prysm-pulse/beacon-chain/state/references_test.go
terence tsao 69c3d9dec2
Save attestation to DB gated by archival flag (#4776)
* Gated by flag
* Gaz
* Merge branch 'master' into archival-saves-att
2020-02-06 15:14:52 +00:00

41 lines
1.2 KiB
Go

package state
import (
"runtime"
"testing"
p2ppb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
)
func TestStateReferenceSharing_Finalizer(t *testing.T) {
// This test showcases the logic on a the RandaoMixes field with the GC finalizer.
a, _ := InitializeFromProtoUnsafe(&p2ppb.BeaconState{RandaoMixes: [][]byte{[]byte("foo")}})
if a.sharedFieldReferences[randaoMixes].refs != 1 {
t.Error("Expected a single reference for Randao mixes")
}
func() {
// Create object in a different scope for GC
b := a.Copy()
if a.sharedFieldReferences[randaoMixes].refs != 2 {
t.Error("Expected 2 references to randao mixes")
}
_ = b
}()
runtime.GC() // Should run finalizer on object b
if a.sharedFieldReferences[randaoMixes].refs != 1 {
t.Errorf("Expected 1 shared reference to randao mixes!")
}
b := a.Copy()
if b.sharedFieldReferences[randaoMixes].refs != 2 {
t.Error("Expected 2 shared references to randao mixes")
}
b.UpdateRandaoMixesAtIndex([]byte("bar"), 0)
if b.sharedFieldReferences[randaoMixes].refs != 1 || a.sharedFieldReferences[randaoMixes].refs != 1 {
t.Error("Expected 1 shared reference to randao mix for both a and b")
}
}