public HeaderTimeChecksPoARuleTests() { this.timeChecksRule = new HeaderTimeChecksPoARule(); this.timeChecksRule.Parent = this.rulesEngine; this.timeChecksRule.Logger = this.loggerFactory.CreateLogger(this.timeChecksRule.GetType().FullName); this.timeChecksRule.Initialize(); }
public void EnsureTimestampDivisibleByTargetSpacing() { // Set up a rule with a fixed time so that we don't have non-deterministic tests due to running times et. DateTimeOffset time = DateTimeOffset.FromUnixTimeSeconds(new DateTimeProvider().GetUtcNow().ToUnixTimestamp() / this.consensusOptions.TargetSpacingSeconds * this.consensusOptions.TargetSpacingSeconds); var timeProvider = new Mock <IDateTimeProvider>(); timeProvider.Setup(x => x.GetAdjustedTimeAsUnixTimestamp()) .Returns(time.ToUnixTimeSeconds() + this.consensusOptions.TargetSpacingSeconds); this.rulesEngine = new PoAConsensusRuleEngine(this.network, this.loggerFactory, timeProvider.Object, this.ChainIndexer, new NodeDeployments(this.network, this.ChainIndexer), this.consensusSettings, new Checkpoints(this.network, this.consensusSettings), new Mock <ICoinView>().Object, this.chainState, new InvalidBlockHashStore(timeProvider.Object), new NodeStats(timeProvider.Object, this.loggerFactory), this.slotsManager, this.poaHeaderValidator, this.votingManager, this.federationManager, this.asyncProvider, new ConsensusRulesContainer()); var timeRule = new HeaderTimeChecksPoARule(); this.InitRule(timeRule); ChainedHeader prevHeader = this.currentHeader.Previous; var validationContext = new ValidationContext() { ChainedHeaderToValidate = this.currentHeader }; var ruleContext = new RuleContext(validationContext, time); // New block has smaller timestamp. prevHeader.Header.Time = (uint)time.ToUnixTimeSeconds(); this.currentHeader.Header.Time = prevHeader.Header.Time + this.consensusOptions.TargetSpacingSeconds; timeRule.Run(ruleContext); this.currentHeader.Header.Time = prevHeader.Header.Time + this.consensusOptions.TargetSpacingSeconds - 1; Assert.Throws <ConsensusErrorException>(() => timeRule.Run(ruleContext)); try { timeRule.Run(ruleContext); } catch (ConsensusErrorException exception) { Assert.Equal(PoAConsensusErrors.InvalidHeaderTimestamp, exception.ConsensusError); } }
public HeaderTimeChecksPoARuleTests() { this.timeChecksRule = new HeaderTimeChecksPoARule(); this.InitRule(this.timeChecksRule); }