mirror of
https://github.com/status-im/nimbus-eth2.git
synced 2025-01-25 22:11:06 +00:00
6fc1511866
Replaced non-conventional `-Present` form in copyright headers with the more appropriate `-2021` version that is already used by the majority of the code base. Copyright header should indicate the years during which the specific file was modified.
83 lines
3.6 KiB
Nim
83 lines
3.6 KiB
Nim
# beacon_chain
|
|
# Copyright (c) 2018-2021 Status Research & Development GmbH
|
|
# Licensed and distributed under either of
|
|
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
|
|
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
{.used.}
|
|
|
|
import
|
|
# Standard library
|
|
os, sequtils, chronicles,
|
|
# Beacon chain internals
|
|
../../../beacon_chain/spec/[forks, state_transition],
|
|
../../../beacon_chain/spec/datatypes/altair,
|
|
# Test utilities
|
|
../../testutil,
|
|
../fixtures_utils
|
|
|
|
const
|
|
FinalityDir = SszTestsDir/const_preset/"altair"/"finality"/"finality"/"pyspec_tests"
|
|
RandomDir = SszTestsDir/const_preset/"altair"/"random"/"random"/"pyspec_tests"
|
|
SanityBlocksDir = SszTestsDir/const_preset/"altair"/"sanity"/"blocks"/"pyspec_tests"
|
|
|
|
proc runTest(testName, testDir, unitTestName: string) =
|
|
# We wrap the tests in a proc to avoid running out of globals
|
|
# in the future: Nim supports up to 3500 globals
|
|
# but unittest with the macro/templates put everything as globals
|
|
# https://github.com/nim-lang/Nim/issues/12084#issue-486866402
|
|
|
|
let testPath = testDir / unitTestName
|
|
|
|
proc `testImpl _ blck _ testName`() =
|
|
let
|
|
hasPostState = existsFile(testPath/"post.ssz_snappy")
|
|
prefix = if hasPostState: "[Valid] " else: "[Invalid] "
|
|
|
|
test prefix & testName & " - " & unitTestName & preset():
|
|
var
|
|
preState = newClone(parseTest(testPath/"pre.ssz_snappy", SSZ, altair.BeaconState))
|
|
fhPreState = (ref ForkedHashedBeaconState)(hbsAltair: altair.HashedBeaconState(
|
|
data: preState[], root: hash_tree_root(preState[])), beaconStateFork: forkAltair)
|
|
cache = StateCache()
|
|
rewards = RewardInfo()
|
|
|
|
# In test cases with more than 10 blocks the first 10 aren't 0-prefixed,
|
|
# so purely lexicographic sorting wouldn't sort properly.
|
|
let numBlocks = toSeq(walkPattern(testPath/"blocks_*.ssz_snappy")).len
|
|
for i in 0 ..< numBlocks:
|
|
let blck = parseTest(testPath/"blocks_" & $i & ".ssz_snappy", SSZ, altair.SignedBeaconBlock)
|
|
|
|
if hasPostState:
|
|
let success = state_transition(
|
|
defaultRuntimeConfig, fhPreState[], blck, cache, rewards, flags = {},
|
|
noRollback)
|
|
doAssert success, "Failure when applying block " & $i
|
|
else:
|
|
let success = state_transition(
|
|
defaultRuntimeConfig, fhPreState[], blck, cache, rewards, flags = {},
|
|
noRollback)
|
|
doAssert (i + 1 < numBlocks) or not success,
|
|
"We didn't expect these invalid blocks to be processed"
|
|
|
|
if hasPostState:
|
|
let postState = newClone(parseTest(testPath/"post.ssz_snappy", SSZ, altair.BeaconState))
|
|
when false:
|
|
reportDiff(fhPreState.hbsAltair.data, postState)
|
|
doAssert getStateRoot(fhPreState[]) == postState[].hash_tree_root()
|
|
|
|
`testImpl _ blck _ testName`()
|
|
|
|
suite "Ethereum Foundation - Altair - Sanity - Blocks " & preset():
|
|
for kind, path in walkDir(SanityBlocksDir, relative = true, checkDir = true):
|
|
runTest("Ethereum Foundation - Altair - Sanity - Blocks", SanityBlocksDir, path)
|
|
|
|
suite "Ethereum Foundation - Altair - Finality " & preset():
|
|
for kind, path in walkDir(FinalityDir, relative = true, checkDir = true):
|
|
runTest("Ethereum Foundation - Altair - Finality", FinalityDir, path)
|
|
|
|
suite "Ethereum Foundation - Altair - Random" & preset():
|
|
for kind, path in walkDir(RandomDir, relative = true, checkDir = true):
|
|
runTest("Ethereum Foundation - Altair - Random", RandomDir, path)
|