[TEST] Improve ESSingleNodeTestCase repeatability#22283
Merged
javanna merged 2 commits intoelastic:masterfrom Dec 21, 2016
Merged
[TEST] Improve ESSingleNodeTestCase repeatability#22283javanna merged 2 commits intoelastic:masterfrom
javanna merged 2 commits intoelastic:masterfrom
Conversation
If we conditionally do random things, e.g. initialize a node only after the first test, we have to make sure that we fork the Random instance by calling random.nextLong() unconditionally, otherwise tests with same seed may not be repeatable. There is one problem left out of this PR, in IngestActionForwarder, relates to elastic#22282 . That is the only reason left why subclasses of ESSingleNodeTestCase are not repeatable yet.
Contributor
Author
|
I pushed a new commit and updated the description. I am not using runWithPrivateRandomness which fixes all the issues I've seen with repeatability. |
javanna
added a commit
to javanna/elasticsearch
that referenced
this pull request
Dec 21, 2016
If we conditionally do random things, e.g. initialize a node only after the first test, we have to make sure that we unconditionally create a new seed calling random.nextLong(), then initialize the node under a private randomness context. This makes sure that any random usage through Randomness.get() will retrieve the proper random instance through RandomizedContext.current().getRandom(). When running under private randomness, the context will return the Random instance that was created with the provided seed (forked from the main random instance) rather than the main Random that's exposed to tests as well. Otherwise tests become non repeatable because that initialization part happens only before the first executed test.
javanna
added a commit
to javanna/elasticsearch
that referenced
this pull request
Dec 21, 2016
If we conditionally do random things, e.g. initialize a node only after the first test, we have to make sure that we unconditionally create a new seed calling random.nextLong(), then initialize the node under a private randomness context. This makes sure that any random usage through Randomness.get() will retrieve the proper random instance through RandomizedContext.current().getRandom(). When running under private randomness, the context will return the Random instance that was created with the provided seed (forked from the main random instance) rather than the main Random that's exposed to tests as well. Otherwise tests become non repeatable because that initialization part happens only before the first executed test.
javanna
added a commit
that referenced
this pull request
Dec 21, 2016
If we conditionally do random things, e.g. initialize a node only after the first test, we have to make sure that we unconditionally create a new seed calling random.nextLong(), then initialize the node under a private randomness context. This makes sure that any random usage through Randomness.get() will retrieve the proper random instance through RandomizedContext.current().getRandom(). When running under private randomness, the context will return the Random instance that was created with the provided seed (forked from the main random instance) rather than the main Random that's exposed to tests as well. Otherwise tests become non repeatable because that initialization part happens only before the first executed test.
javanna
added a commit
that referenced
this pull request
Dec 21, 2016
If we conditionally do random things, e.g. initialize a node only after the first test, we have to make sure that we unconditionally create a new seed calling random.nextLong(), then initialize the node under a private randomness context. This makes sure that any random usage through Randomness.get() will retrieve the proper random instance through RandomizedContext.current().getRandom(). When running under private randomness, the context will return the Random instance that was created with the provided seed (forked from the main random instance) rather than the main Random that's exposed to tests as well. Otherwise tests become non repeatable because that initialization part happens only before the first executed test.
Member
|
Nice one @javanna. |
jasontedor
added a commit
to jasontedor/elasticsearch
that referenced
this pull request
Dec 21, 2016
* master: Simplify Unicast Zen Ping (elastic#22277) Replace IndicesQueriesRegistry (elastic#22289) Fixed document mistake and fit for 5.1.1 API [TEST] improve error message in ESTestCase#assertWarnings [TEST] remove deleted test classes from checkstyle suppressions [TEST] make ESSingleNodeTestCase tests repeatable (elastic#22283) Link for setting page in elasticsearch.yml is outdated Factor out sort values from InternalSearchHit (elastic#22080) Add ID for percolate query to Java API docs x_refresh.yaml tests should use unique index names and doc ids to ease debugging IndicesStoreIntegrationIT should not use start recovery sending as an indication that the recovery started Added base class for testing aggregators and some initial tests for `terms`, `top_hits` and `min` aggregations. Add link to foreach processor to ingest-attachment.asciidoc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
If we conditionally do random things, e.g. initialize a node only after the first test, we have to make sure that we unconditionally create a new seed calling
random.nextLong(), then initialize the node under a private randomness context. This makes sure that any random usage throughRandomness.get()will retrieve the proper random instance throughRandomizedContext.current().getRandom(). When running under private randomness, the context will return theRandominstance that was created with the provided seed (forked from the main random instance) rather than the mainRandomthat's exposed to tests as well. Otherwise tests become non repeatable because that initialization part happens only before the first executed test.