public void RunFullBlockTest() { var generator = new FullBlockTestGenerator(Network.Main); ValidationState validation = new ValidationState(Network.Main); validation.CheckMerkleRoot = false; validation.CheckProofOfWork = false; var scan = new ScanState(new PubKeyHashScanner(generator.CoinbaseKey.PubKey.ID), new Chain(), new Account(), 0); scan.CheckDoubleSpend = true; var mainChain = new Chain(Network.Main); var indexed = new IndexedBlockStore(new InMemoryNoSqlRepository(), CreateBlockStore()); indexed.Put(Network.Main.GetGenesis()); foreach(var test in generator.GetBlocksToTest(true, true).list.OfType<BlockAndValidity>()) { indexed.Put(test.block); mainChain.GetOrAdd(test.block.Header); Assert.True(scan.Process(mainChain, indexed) == test.connects); //if(!) //{ // Assert.True(test.throwsException); //} Assert.Equal(test.heightAfterBlock, scan.Chain.Height); Assert.Equal(test.hashChainTipAfterBlock, scan.Chain.Tip.HashBlock); mainChain.SetTip(scan.Chain.Tip); } }
internal void ReloadScanner() { var old = _ScanState; _ScanState = new ScanState(_ScanState.Scanner, _ScanState.Chain.Clone(), _ScanState.Account.Clone(), ScanState.StartHeight); old.Dispose(); }
public ScannerUser(KeyId keyId, int start, ScannerTester tester) { var folder = Path.Combine(tester._FolderName, tester.scanner.ToString()); TestUtils.EnsureNew(folder); var chainStream = new StreamObjectStream<ChainChange>(File.Open(Path.Combine(folder, "Chain"), FileMode.OpenOrCreate)); var accountStream = new StreamObjectStream<AccountEntry>(File.Open(Path.Combine(folder, "Entries"), FileMode.OpenOrCreate)); _Id = keyId; _Scanner = new PubKeyHashScanner(keyId); _ScanState = new ScanState(new PubKeyHashScanner(keyId), new Chain(chainStream), new Account(accountStream), start); _Tester = tester; }