87 lines
2.4 KiB
Nim
87 lines
2.4 KiB
Nim
|
# Nimbus
|
||
|
# Copyright (c) 2018-2019 Status Research & Development GmbH
|
||
|
# Licensed under either of
|
||
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
||
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
||
|
# http://opensource.org/licenses/MIT)
|
||
|
# at your option. This file may not be copied, modified, or distributed except
|
||
|
# according to those terms.
|
||
|
|
||
|
import
|
||
|
# ../nimbus/p2p/clique,
|
||
|
../nimbus/utils,
|
||
|
./test_clique/pool,
|
||
|
eth/[keys],
|
||
|
# sequtils,
|
||
|
stint,
|
||
|
strformat,
|
||
|
# times,
|
||
|
unittest2
|
||
|
|
||
|
proc initSnapshot(p: TesterPool; t: TestSpecs; noisy: bool): auto =
|
||
|
|
||
|
# Assemble a chain of headers from the cast votes
|
||
|
p.resetVoterChain(t.signers)
|
||
|
for voter in t.votes:
|
||
|
p.appendVoter(voter)
|
||
|
p.commitVoterChain
|
||
|
|
||
|
let topHeader = p.topVoterHeader
|
||
|
p.snapshot(topHeader.blockNumber, topHeader.hash, @[])
|
||
|
|
||
|
|
||
|
proc notUsedYet(p: TesterPool; tt: TestSpecs; noisy: bool) =
|
||
|
discard
|
||
|
#[
|
||
|
# Verify the final list of signers against the expected ones
|
||
|
signers = make([]common.Address, len(tt.results))
|
||
|
for j, signer := range tt.results {
|
||
|
signers[j] = accounts.address(signer)
|
||
|
}
|
||
|
for j := 0; j < len(signers); j++ {
|
||
|
for k := j + 1; k < len(signers); k++ {
|
||
|
if bytes.Compare(signers[j][:], signers[k][:]) > 0 {
|
||
|
signers[j], signers[k] = signers[k], signers[j]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
result := snap.signers()
|
||
|
if len(result) != len(signers) {
|
||
|
t.Errorf("test %d: signers mismatch: have %x, want %x",i,result,signers)
|
||
|
continue
|
||
|
}
|
||
|
for j := 0; j < len(result); j++ {
|
||
|
if !bytes.Equal(result[j][:], signers[j][:]) {
|
||
|
t.Errorf(
|
||
|
"test %d, signer %d: signer mismatch: have %x, want %x",
|
||
|
i, j, result[j], signers[j])
|
||
|
}
|
||
|
}
|
||
|
]#
|
||
|
|
||
|
# clique/snapshot_test.go(99): func TestClique(t *testing.T) {
|
||
|
proc cliqueMain*(noisy = defined(debug)) =
|
||
|
## Tests that Clique signer voting is evaluated correctly for various simple
|
||
|
## and complex scenarios, as well as that a few special corner cases fail
|
||
|
## correctly.
|
||
|
suite "Clicque PoA":
|
||
|
var pool = newTesterPool()
|
||
|
const maxID = 2
|
||
|
|
||
|
# clique/snapshot_test.go(379): for i, tt := range tests {
|
||
|
for tt in voterSamples:
|
||
|
if maxId < tt.id:
|
||
|
echo "Tests stopped"
|
||
|
break
|
||
|
|
||
|
test &"Snapshots {tt.id}: {tt.info.substr(0,50)}...":
|
||
|
var snap = pool.initSnapshot(tt, noisy)
|
||
|
check snap.isOk
|
||
|
|
||
|
|
||
|
when isMainModule:
|
||
|
cliqueMain()
|
||
|
|
||
|
# End
|