-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Separate tests between spec tests and infra tests AND change framework for test_template_test #4538
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Makefile
Outdated
# Run test framework tests. | ||
# | ||
# To run a specific test, append k=<test>, eg: | ||
# make test k=test_verify_kzg_proof | ||
# To run tests with a specific bls library, append bls=<bls>, eg: | ||
# make test bls=arkworks | ||
test_infra: MAYBE_TEST := $(if $(k),-k=$(k)) | ||
# Disable parallelism which running a specific test. | ||
# Parallelism makes debugging difficult (print doesn't work). | ||
test_infra: MAYBE_PARALLEL := $(if $(k),,-n auto) | ||
test_infra: pyspec | ||
@mkdir -p $(TEST_REPORT_DIR) | ||
@$(PYTHON_VENV) -m pytest \ | ||
$(MAYBE_PARALLEL) \ | ||
--capture=no \ | ||
$(MAYBE_TEST) \ | ||
$(CURDIR)/tests/infra |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I want to keep these tests bundled together. make test
should run all tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, after deleting this, can we fix the typo on line 101:
Disable parallelism which running a specific test.
Should be:
Disable parallelism when running a specific test.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I want to keep these tests bundled together. make test should run all tests.
I think going forward, as more framework tests get added, there would be value in allowing separate execution of these tests:
- It creates a clearer separation of intent that makes it immediately clear to a new developer that these "framework tests" have an entirely different purpose.
- It allows a developer to iterate faster on framework changes that are covered by fw tests (typically fw tests will run faster than the actual tests).
- It allows better reporting, locally, particularly in CI; consensus-specs could have two workflows that would run
make tests
andmake test_infra
.
For now, until we improve the CI as in 2., we could add this new test_infra
target as a dependency to the test
target. This already enables 1. and 2. We can improve the CI in a follow-up PR for 3. and potentially remove the test_infra
dep from test
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand, but there are better ways of doing this. This solution introduces unnecessary complexity for everyone: (1) we'll need to update documentation telling contributors that they need to run both commands; (2) we need to update the CI checks to run both commands; (3) we'll need to update the release action to run these; (4) we need to update the Makefile help section.
There are two other solutions which I would prefer:
- Ensure infrastructure tests start with
def test_infra_*
and usemake test k=test_infra
. - Similar to the current style, make the list of files dynamic and use
make test infra-only=true
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a TODO list.
Additionally to what @danceratopz said I don't think the normal spec test developer will not need to run the infra tests, so another advantage of having them separated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No that's not what I'm saying. Seriously, let's not add a separate make command for infrastructure tests. Please.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I pushed ec3edc0 which does it how I think it should be done. Just run make test fw=true
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After thinking about it some more, I've come to this solution:
make test
(tests everything)make test component=fw
(runs only framework tests)make test component=pyspec
(runs only pyspec tests)
Are we okay with this? Does it do what you want it to?
Hey Leo, can we give this PR a better title? Something less ambiguous but still <= 50 chars. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Couple of comments below, mainly to explain the motivation for this small change.
Makefile
Outdated
# Run test framework tests. | ||
# | ||
# To run a specific test, append k=<test>, eg: | ||
# make test k=test_verify_kzg_proof | ||
# To run tests with a specific bls library, append bls=<bls>, eg: | ||
# make test bls=arkworks | ||
test_infra: MAYBE_TEST := $(if $(k),-k=$(k)) | ||
# Disable parallelism which running a specific test. | ||
# Parallelism makes debugging difficult (print doesn't work). | ||
test_infra: MAYBE_PARALLEL := $(if $(k),,-n auto) | ||
test_infra: pyspec | ||
@mkdir -p $(TEST_REPORT_DIR) | ||
@$(PYTHON_VENV) -m pytest \ | ||
$(MAYBE_PARALLEL) \ | ||
--capture=no \ | ||
$(MAYBE_TEST) \ | ||
$(CURDIR)/tests/infra |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I want to keep these tests bundled together. make test should run all tests.
I think going forward, as more framework tests get added, there would be value in allowing separate execution of these tests:
- It creates a clearer separation of intent that makes it immediately clear to a new developer that these "framework tests" have an entirely different purpose.
- It allows a developer to iterate faster on framework changes that are covered by fw tests (typically fw tests will run faster than the actual tests).
- It allows better reporting, locally, particularly in CI; consensus-specs could have two workflows that would run
make tests
andmake test_infra
.
For now, until we improve the CI as in 2., we could add this new test_infra
target as a dependency to the test
target. This already enables 1. and 2. We can improve the CI in a follow-up PR for 3. and potentially remove the test_infra
dep from test
.
Co-authored-by: danceratopz <[email protected]>
Co-authored-by: danceratopz <[email protected]>
If you're okay with my change, we can merge this after the broken test is fixed. Also, please update the title & be sure that it's not crazy long.
|
Co-authored-by: Leo Lara <[email protected]>
These are a set of small improvements suggested by @danceratopz
TODO: