Merge pull request #13215 from martijnvg/tests/enable_mock_modules
Allow tests to override whether mock modules are used
This commit is contained in:
commit
51d052c32a
|
@ -218,7 +218,7 @@ import static org.hamcrest.Matchers.*;
|
||||||
* This class supports the following system properties (passed with -Dkey=value to the application)
|
* This class supports the following system properties (passed with -Dkey=value to the application)
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>-D{@value #TESTS_CLIENT_RATIO} - a double value in the interval [0..1] which defines the ration between node and transport clients used</li>
|
* <li>-D{@value #TESTS_CLIENT_RATIO} - a double value in the interval [0..1] which defines the ration between node and transport clients used</li>
|
||||||
* <li>-D{@value InternalTestCluster#TESTS_ENABLE_MOCK_MODULES} - a boolean value to enable or disable mock modules. This is
|
* <li>-D{@value #TESTS_ENABLE_MOCK_MODULES} - a boolean value to enable or disable mock modules. This is
|
||||||
* useful to test the system without asserting modules that to make sure they don't hide any bugs in production.</li>
|
* useful to test the system without asserting modules that to make sure they don't hide any bugs in production.</li>
|
||||||
* <li> - a random seed used to initialize the index random context.
|
* <li> - a random seed used to initialize the index random context.
|
||||||
* </ul>
|
* </ul>
|
||||||
|
@ -268,6 +268,15 @@ public abstract class ESIntegTestCase extends ESTestCase {
|
||||||
*/
|
*/
|
||||||
public static final String SETTING_INDEX_SEED = "index.tests.seed";
|
public static final String SETTING_INDEX_SEED = "index.tests.seed";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A boolean value to enable or disable mock modules. This is useful to test the
|
||||||
|
* system without asserting modules that to make sure they don't hide any bugs in
|
||||||
|
* production.
|
||||||
|
*
|
||||||
|
* @see ESIntegTestCase
|
||||||
|
*/
|
||||||
|
public static final String TESTS_ENABLE_MOCK_MODULES = "tests.enable_mock_modules";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Threshold at which indexing switches from frequently async to frequently bulk.
|
* Threshold at which indexing switches from frequently async to frequently bulk.
|
||||||
*/
|
*/
|
||||||
|
@ -1806,9 +1815,14 @@ public abstract class ESIntegTestCase extends ESTestCase {
|
||||||
nodeMode = "local";
|
nodeMode = "local";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean enableMockModules = enableMockModules();
|
||||||
return new InternalTestCluster(nodeMode, seed, createTempDir(), minNumDataNodes, maxNumDataNodes,
|
return new InternalTestCluster(nodeMode, seed, createTempDir(), minNumDataNodes, maxNumDataNodes,
|
||||||
InternalTestCluster.clusterName(scope.name(), seed) + "-cluster", nodeConfigurationSource, getNumClientNodes(),
|
InternalTestCluster.clusterName(scope.name(), seed) + "-cluster", nodeConfigurationSource, getNumClientNodes(),
|
||||||
InternalTestCluster.DEFAULT_ENABLE_HTTP_PIPELINING, nodePrefix);
|
InternalTestCluster.DEFAULT_ENABLE_HTTP_PIPELINING, nodePrefix, enableMockModules);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean enableMockModules() {
|
||||||
|
return RandomizedTest.systemPropertyAsBoolean(TESTS_ENABLE_MOCK_MODULES, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -153,15 +153,6 @@ public final class InternalTestCluster extends TestCluster {
|
||||||
|
|
||||||
static NodeConfigurationSource DEFAULT_SETTINGS_SOURCE = NodeConfigurationSource.EMPTY;
|
static NodeConfigurationSource DEFAULT_SETTINGS_SOURCE = NodeConfigurationSource.EMPTY;
|
||||||
|
|
||||||
/**
|
|
||||||
* A boolean value to enable or disable mock modules. This is useful to test the
|
|
||||||
* system without asserting modules that to make sure they don't hide any bugs in
|
|
||||||
* production.
|
|
||||||
*
|
|
||||||
* @see ESIntegTestCase
|
|
||||||
*/
|
|
||||||
public static final String TESTS_ENABLE_MOCK_MODULES = "tests.enable_mock_modules";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A node level setting that holds a per node random seed that is consistent across node restarts
|
* A node level setting that holds a per node random seed that is consistent across node restarts
|
||||||
*/
|
*/
|
||||||
|
@ -192,8 +183,6 @@ public final class InternalTestCluster extends TestCluster {
|
||||||
public final int HTTP_BASE_PORT = GLOBAL_HTTP_BASE_PORT + CLUSTER_BASE_PORT_OFFSET;
|
public final int HTTP_BASE_PORT = GLOBAL_HTTP_BASE_PORT + CLUSTER_BASE_PORT_OFFSET;
|
||||||
|
|
||||||
|
|
||||||
private static final boolean ENABLE_MOCK_MODULES = RandomizedTest.systemPropertyAsBoolean(TESTS_ENABLE_MOCK_MODULES, true);
|
|
||||||
|
|
||||||
static final int DEFAULT_MIN_NUM_DATA_NODES = 1;
|
static final int DEFAULT_MIN_NUM_DATA_NODES = 1;
|
||||||
static final int DEFAULT_MAX_NUM_DATA_NODES = TEST_NIGHTLY ? 6 : 3;
|
static final int DEFAULT_MAX_NUM_DATA_NODES = TEST_NIGHTLY ? 6 : 3;
|
||||||
|
|
||||||
|
@ -229,6 +218,8 @@ public final class InternalTestCluster extends TestCluster {
|
||||||
|
|
||||||
private final ExecutorService executor;
|
private final ExecutorService executor;
|
||||||
|
|
||||||
|
private final boolean enableMockModules;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All nodes started by the cluster will have their name set to nodePrefix followed by a positive number
|
* All nodes started by the cluster will have their name set to nodePrefix followed by a positive number
|
||||||
*/
|
*/
|
||||||
|
@ -240,7 +231,7 @@ public final class InternalTestCluster extends TestCluster {
|
||||||
|
|
||||||
public InternalTestCluster(String nodeMode, long clusterSeed, Path baseDir,
|
public InternalTestCluster(String nodeMode, long clusterSeed, Path baseDir,
|
||||||
int minNumDataNodes, int maxNumDataNodes, String clusterName, NodeConfigurationSource nodeConfigurationSource, int numClientNodes,
|
int minNumDataNodes, int maxNumDataNodes, String clusterName, NodeConfigurationSource nodeConfigurationSource, int numClientNodes,
|
||||||
boolean enableHttpPipelining, String nodePrefix) {
|
boolean enableHttpPipelining, String nodePrefix, boolean enableMockModules) {
|
||||||
super(clusterSeed);
|
super(clusterSeed);
|
||||||
if ("network".equals(nodeMode) == false && "local".equals(nodeMode) == false) {
|
if ("network".equals(nodeMode) == false && "local".equals(nodeMode) == false) {
|
||||||
throw new IllegalArgumentException("Unknown nodeMode: " + nodeMode);
|
throw new IllegalArgumentException("Unknown nodeMode: " + nodeMode);
|
||||||
|
@ -276,6 +267,7 @@ public final class InternalTestCluster extends TestCluster {
|
||||||
this.nodePrefix = nodePrefix;
|
this.nodePrefix = nodePrefix;
|
||||||
|
|
||||||
assert nodePrefix != null;
|
assert nodePrefix != null;
|
||||||
|
this.enableMockModules = enableMockModules;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO
|
* TODO
|
||||||
|
@ -387,15 +379,15 @@ public final class InternalTestCluster extends TestCluster {
|
||||||
private Collection<Class<? extends Plugin>> getPlugins(long seed) {
|
private Collection<Class<? extends Plugin>> getPlugins(long seed) {
|
||||||
Set<Class<? extends Plugin>> plugins = new HashSet<>(nodeConfigurationSource.nodePlugins());
|
Set<Class<? extends Plugin>> plugins = new HashSet<>(nodeConfigurationSource.nodePlugins());
|
||||||
Random random = new Random(seed);
|
Random random = new Random(seed);
|
||||||
if (ENABLE_MOCK_MODULES && usually(random)) {
|
if (enableMockModules && usually(random)) {
|
||||||
plugins.add(MockTransportService.TestPlugin.class);
|
plugins.add(MockTransportService.TestPlugin.class);
|
||||||
plugins.add(MockFSIndexStore.TestPlugin.class);
|
plugins.add(MockFSIndexStore.TestPlugin.class);
|
||||||
plugins.add(NodeMocksPlugin.class);
|
plugins.add(NodeMocksPlugin.class);
|
||||||
plugins.add(MockEngineFactoryPlugin.class);
|
plugins.add(MockEngineFactoryPlugin.class);
|
||||||
plugins.add(MockSearchService.TestPlugin.class);
|
plugins.add(MockSearchService.TestPlugin.class);
|
||||||
}
|
if (isLocalTransportConfigured()) {
|
||||||
if (isLocalTransportConfigured()) {
|
plugins.add(AssertingLocalTransport.TestPlugin.class);
|
||||||
plugins.add(AssertingLocalTransport.TestPlugin.class);
|
}
|
||||||
}
|
}
|
||||||
return plugins;
|
return plugins;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,8 @@ import com.carrotsearch.randomizedtesting.TraceFormatting;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
import org.elasticsearch.common.logging.Loggers;
|
||||||
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.test.InternalTestCluster;
|
|
||||||
import org.junit.internal.AssumptionViolatedException;
|
import org.junit.internal.AssumptionViolatedException;
|
||||||
import org.junit.runner.Description;
|
import org.junit.runner.Description;
|
||||||
import org.junit.runner.notification.Failure;
|
import org.junit.runner.notification.Failure;
|
||||||
|
@ -158,7 +158,7 @@ public class ReproduceInfoPrinter extends RunListener {
|
||||||
appendProperties("es.logger.level");
|
appendProperties("es.logger.level");
|
||||||
if (inVerifyPhase()) {
|
if (inVerifyPhase()) {
|
||||||
// these properties only make sense for integration tests
|
// these properties only make sense for integration tests
|
||||||
appendProperties("es.node.mode", "es.node.local", TESTS_CLUSTER, InternalTestCluster.TESTS_ENABLE_MOCK_MODULES);
|
appendProperties("es.node.mode", "es.node.local", TESTS_CLUSTER, ESIntegTestCase.TESTS_ENABLE_MOCK_MODULES);
|
||||||
}
|
}
|
||||||
appendProperties("tests.assertion.disabled", "tests.security.manager", "tests.nightly", "tests.jvms",
|
appendProperties("tests.assertion.disabled", "tests.security.manager", "tests.nightly", "tests.jvms",
|
||||||
"tests.client.ratio", "tests.heap.size", "tests.bwc", "tests.bwc.version");
|
"tests.client.ratio", "tests.heap.size", "tests.bwc", "tests.bwc.version");
|
||||||
|
|
|
@ -53,8 +53,8 @@ public class InternalTestClusterTests extends ESTestCase {
|
||||||
String nodePrefix = randomRealisticUnicodeOfCodepointLengthBetween(1, 10);
|
String nodePrefix = randomRealisticUnicodeOfCodepointLengthBetween(1, 10);
|
||||||
|
|
||||||
Path baseDir = createTempDir();
|
Path baseDir = createTempDir();
|
||||||
InternalTestCluster cluster0 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix);
|
InternalTestCluster cluster0 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix, true);
|
||||||
InternalTestCluster cluster1 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix);
|
InternalTestCluster cluster1 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix, true);
|
||||||
// TODO: this is not ideal - we should have a way to make sure ports are initialized in the same way
|
// TODO: this is not ideal - we should have a way to make sure ports are initialized in the same way
|
||||||
assertClusters(cluster0, cluster1, false);
|
assertClusters(cluster0, cluster1, false);
|
||||||
|
|
||||||
|
@ -111,8 +111,8 @@ public class InternalTestClusterTests extends ESTestCase {
|
||||||
String nodePrefix = "foobar";
|
String nodePrefix = "foobar";
|
||||||
|
|
||||||
Path baseDir = createTempDir();
|
Path baseDir = createTempDir();
|
||||||
InternalTestCluster cluster0 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName1, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix);
|
InternalTestCluster cluster0 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName1, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix, true);
|
||||||
InternalTestCluster cluster1 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName2, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix);
|
InternalTestCluster cluster1 = new InternalTestCluster("local", clusterSeed, baseDir, minNumDataNodes, maxNumDataNodes, clusterName2, nodeConfigurationSource, numClientNodes, enableHttpPipelining, nodePrefix, true);
|
||||||
|
|
||||||
assertClusters(cluster0, cluster1, false);
|
assertClusters(cluster0, cluster1, false);
|
||||||
long seed = randomLong();
|
long seed = randomLong();
|
||||||
|
|
|
@ -76,7 +76,7 @@ public class TribeIT extends ESIntegTestCase {
|
||||||
public static void setupSecondCluster() throws Exception {
|
public static void setupSecondCluster() throws Exception {
|
||||||
ESIntegTestCase.beforeClass();
|
ESIntegTestCase.beforeClass();
|
||||||
cluster2 = new InternalTestCluster(InternalTestCluster.configuredNodeMode(), randomLong(), createTempDir(), 2, 2,
|
cluster2 = new InternalTestCluster(InternalTestCluster.configuredNodeMode(), randomLong(), createTempDir(), 2, 2,
|
||||||
Strings.randomBase64UUID(getRandom()), NodeConfigurationSource.EMPTY, 0, false, SECOND_CLUSTER_NODE_PREFIX);
|
Strings.randomBase64UUID(getRandom()), NodeConfigurationSource.EMPTY, 0, false, SECOND_CLUSTER_NODE_PREFIX, true);
|
||||||
|
|
||||||
cluster2.beforeTest(getRandom(), 0.1);
|
cluster2.beforeTest(getRandom(), 0.1);
|
||||||
cluster2.ensureAtLeastNumDataNodes(2);
|
cluster2.ensureAtLeastNumDataNodes(2);
|
||||||
|
|
Loading…
Reference in New Issue