mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-29 18:05:18 +00:00
83 lines
1.8 KiB
Go
83 lines
1.8 KiB
Go
|
package time_test
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
"sync"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"go.uber.org/zap"
|
||
|
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
||
|
"source.quilibrium.com/quilibrium/monorepo/node/consensus/time"
|
||
|
"source.quilibrium.com/quilibrium/monorepo/node/crypto"
|
||
|
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
|
||
|
"source.quilibrium.com/quilibrium/monorepo/node/store"
|
||
|
)
|
||
|
|
||
|
func TestMasterTimeReel(t *testing.T) {
|
||
|
logger, _ := zap.NewProduction()
|
||
|
db := store.NewInMemKVDB()
|
||
|
clockStore := store.NewPebbleClockStore(db, logger)
|
||
|
prover := crypto.NewWesolowskiFrameProver(logger)
|
||
|
filter := "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
||
|
|
||
|
m := time.NewMasterTimeReel(
|
||
|
logger,
|
||
|
clockStore,
|
||
|
&config.EngineConfig{
|
||
|
Filter: filter,
|
||
|
GenesisSeed: strings.Repeat("00", 516),
|
||
|
Difficulty: 10,
|
||
|
},
|
||
|
prover,
|
||
|
)
|
||
|
|
||
|
err := m.Start()
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
frame, err := m.Head()
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
frames := []*protobufs.ClockFrame{}
|
||
|
wg := sync.WaitGroup{}
|
||
|
wg.Add(1)
|
||
|
frameCh := m.NewFrameCh()
|
||
|
go func() {
|
||
|
for i := 0; i < 200; i++ {
|
||
|
frames = append(frames, <-frameCh)
|
||
|
}
|
||
|
wg.Done()
|
||
|
}()
|
||
|
|
||
|
// in order
|
||
|
for i := int64(0); i < 100; i++ {
|
||
|
frame, err = prover.ProveMasterClockFrame(frame, i+1, 10)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
err := m.Insert(frame)
|
||
|
assert.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
insertFrames := []*protobufs.ClockFrame{}
|
||
|
|
||
|
// reverse order
|
||
|
for i := int64(100); i < 200; i++ {
|
||
|
frame, err = prover.ProveMasterClockFrame(frame, i+1, 10)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
insertFrames = append(insertFrames, frame)
|
||
|
}
|
||
|
|
||
|
for i := 99; i >= 0; i-- {
|
||
|
err := m.Insert(insertFrames[i])
|
||
|
assert.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
wg.Wait()
|
||
|
|
||
|
for i := 0; i < 200; i++ {
|
||
|
assert.NotNil(t, frames[i])
|
||
|
assert.Equal(t, frames[i].FrameNumber, uint64(i+1))
|
||
|
}
|
||
|
}
|