Make easy tests

This commit is contained in:
mjalalzai 2023-03-30 14:47:17 -07:00
parent 5dedab1d2f
commit 8bcbce83e1
3 changed files with 43 additions and 82 deletions

79
.gitignore vendored
View File

@ -1,79 +0,0 @@
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.serpython
python
venv

View File

@ -190,9 +190,11 @@ class Carnot:
def receive_block(self, block: Block):
assert block.parent() in self.safe_blocks
# This condition is not needed because it will be true as qc of a block will hve lower view than
#the block.
# if block.qc.view < self.current_view:
# return
if block.qc.view < self.current_view:
return
if block.id() in self.safe_blocks or block.view <= self.latest_committed_view:
return

View File

@ -16,7 +16,8 @@ class TestCarnotHappyPath(TestCase):
block = Block(view=1, qc=StandardQc(block=genesis_block.id(), view=0))
carnot.receive_block(block)
def test_receive_block_has_old_qc(self):
def test_receive_multiple_blocks_for_the_same_view(self):
carnot = Carnot(int_to_id(0))
genesis_block = self.add_genesis_block(carnot)
# 1
@ -30,4 +31,41 @@ class TestCarnotHappyPath(TestCase):
# 3
block3 = Block(view=3, qc=StandardQc(block=block2.id(), view=2))
carnot.receive_block(block3)
# 4
block4 = Block(view=4, qc=StandardQc(block=block3.id(), view=3))
carnot.receive_block(block4)
# This test seem to fail because safe_block dict checks for id of
#the block and we can receive blocks with different ids for the same view.
# There must be only one block per view at most.
# May be we have a dict with view as key and dict[block.id()]block as value?
block5 = Block(view=4, qc=StandardQc(block=block3.id(), view=3))
carnot.receive_block(block5)
def test_receive_block_has_old_view_number(self):
carnot = Carnot(int_to_id(0))
genesis_block = self.add_genesis_block(carnot)
# 1
block1 = Block(view=1, qc=StandardQc(block=genesis_block.id(), view=0))
carnot.receive_block(block1)
# 2
block2 = Block(view=2, qc=StandardQc(block=block1.id(), view=1))
carnot.receive_block(block2)
# 3
block3 = Block(view=3, qc=StandardQc(block=block2.id(), view=2))
carnot.receive_block(block3)
# 4
block4 = Block(view=4, qc=StandardQc(block=block3.id(), view=3))
carnot.receive_block(block4)
# 5 This is the old standard qc of block number 3. For standarnd QC we must always have qc.view==block.view-1.
# This block should be rejected based on the condition below in block_is_safe().
# block.view >= self.latest_committed_view and block.view == (standard.view + 1)
# block_is_safe() should return false.
block5 = Block(view=3, qc=StandardQc(block=block4.id(), view=4))
carnot.receive_block(block5)