-
Notifications
You must be signed in to change notification settings - Fork 52
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
Refactor how skipped tests are defined #654
Comments
Worth noting that Go supports regexp matching test names, so we could mux the group into the test name itself e.g |
dmr sez group by package plz. |
So we could change this to:
This:
This doesn't address blacklists though, as it isn't possible to use Instead of saying "I am dendrite" and the tests then saying "skip this as it doesn't work on dendrite", we could instead add a new env var to control which tests are skipped. If the env var is missing, no tests are skipped (so it'll work in IDEs). If the env var is set, and said env var is a file say, then we could list off the tests to skip. E.g:
Then in tests, we could add boilerplate to do this check and skip if found: func TestFoo(t *testing.T) {
maybeSkip(t)
}
func maybeSkip(t *testing.T) {
skipFile := os.Getenv("COMPLEMENT_SKIP_TESTS")
data, _ := io.ReadAll(skipFile)
if strings.Contains(string(data), t.Name()) {
t.Skipf("skipping test as it is in COMPLEMENT_SKIP_TESTS")
}
} The downside is it isn't clear what test names are always e.g: func TestFederationKeyUploadQuery(t *testing.T) {
t.Run("Can claim remote one time key using POST", func(t *testing.T) {
t.Name() == "TestFederationKeyUploadQuery/Can_claim_remote_one_time_key_using_POST"
}
} So you can imagine future frustration if someone wants to skip this test and doesn't know the magic incantation of swapping To avoid needing to call |
Not entirely true, there is |
Next steps:
We may want to have a test directory up first to make it easier to know/discover which tests to skip? |
* Update complement.sh to match new public API shape Sister PR to matrix-org/complement#666 Context: matrix-org/complement#654 (comment) * Changelog * Pedantry * Run complement plz
MSC work has landed. The remaining bits are to redo how skipped tests are specified in Complement. Renaming issue for clarity. |
The remaining work:
|
Complement was designed to test the Matrix Specification. However, the spec isn't static and MSCs need tests too. We introduced the build tag system a long time ago to allow tests to opt-in to certain tests. They are defined like this:
and used like this:
The set of tests run is controlled by the user, which can be frustrating when they get out-of-sync: #185
This wasn't the end of it though. We also have unique APIs specific to a homeserver, or sometimes some servers don't implement core features which are enabled by default. To fix this, we (ab)use the same build tag system. To opt-out of a test, they are defined like this:
and used like this:
This was the status quo for a long time, until there was a need to blacklist some tests in the same file but not others. This introduced the
runtime
package, where you could skip a test in code, rather than conditional compilation. They are defined like this:A runtime knows what it is by the virtue of the blacklist tag. E.g running
-tags "dendrite_blacklist"
would skip this test, even if the homeservers were synapse! The code for this is:This is clearly at odds with testing between heterogeneous homeservers. It's also been questioned if it is the test's job to say what can and cannot run with it. Surely it would be better if it were more tag-like, and the user can opt-in to these tests?
We also have some other ideas for conditional execution of tests based on
/versions
output: #549 . Our forebear, sytest, would automatically skip some tests based on if an earlier test which has a specialcan_
property did not pass. This is problematic if thecan_
test is flakey!From these use cases, there are some properties we want the test execution API to have:
runtime.SkipIf
, and it means that this repository gets touched way too much just to remove these lines as servers get updated.A high-level approach here could be:
mscXXXX_test.go
files.This would allow us to remove
runtime.SkipIf
from the codebase, and runtime detection which is flakey and doesn't work with multi-HS support. It also removes the smell of having tests dictate what can/cannot run.Proposal
t.Skipf
instead of conditional compilation? This would be beneficial as it is not uncommon for conditionally compiled code to break API wise from core (e.g alter a function signature in core, then patch up tests which whine, the mscXXXX files won't whine due to no build tags set by default in the IDE).The text was updated successfully, but these errors were encountered: