SQL: [Tests] Fix and enable internalClusterTests (#37300)

SqlPlugin cannot have more than one public constructor, so for the testing
purposes the `getLicenseState()` should be overriden.

Fixes: #37191

Co-authored-by: Michael Basnight <mbasnight@gmail.com>
This commit is contained in:
Marios Trivyzas 2019-01-11 22:43:17 +02:00 committed by GitHub
parent 5101e51891
commit 85531f0285
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 100 additions and 83 deletions

View File

@ -21,10 +21,13 @@ archivesBaseName = 'x-pack-sql'
integTest.enabled = false
task internalClusterTest(type: RandomizedTestingTask,
group: JavaBasePlugin.VERIFICATION_GROUP
) {
group: JavaBasePlugin.VERIFICATION_GROUP,
dependsOn: unitTest.dependsOn) {
include '**/*IT.class'
systemProperty 'es.set.netty.runtime.available.processors', 'false'
}
check.dependsOn internalClusterTest
internalClusterTest.mustRunAfter test
dependencies {
// "org.elasticsearch.plugin:x-pack-core:${version}" doesn't work with idea because the testArtifacts are also here

View File

@ -50,40 +50,38 @@ import static java.util.Collections.emptyList;
public class SqlPlugin extends Plugin implements ActionPlugin {
private final boolean enabled;
private final SqlLicenseChecker sqlLicenseChecker;
SqlPlugin(boolean enabled, SqlLicenseChecker sqlLicenseChecker) {
this.enabled = enabled;
this.sqlLicenseChecker = sqlLicenseChecker;
}
private final SqlLicenseChecker sqlLicenseChecker = new SqlLicenseChecker(
(mode) -> {
XPackLicenseState licenseState = getLicenseState();
switch (mode) {
case JDBC:
if (licenseState.isJdbcAllowed() == false) {
throw LicenseUtils.newComplianceException("jdbc");
}
break;
case ODBC:
if (licenseState.isOdbcAllowed() == false) {
throw LicenseUtils.newComplianceException("odbc");
}
break;
case PLAIN:
if (licenseState.isSqlAllowed() == false) {
throw LicenseUtils.newComplianceException(XPackField.SQL);
}
break;
default:
throw new IllegalArgumentException("Unknown SQL mode " + mode);
}
}
);
public SqlPlugin(Settings settings) {
this(XPackSettings.SQL_ENABLED.get(settings), new SqlLicenseChecker(
(mode) -> {
XPackLicenseState licenseState = XPackPlugin.getSharedLicenseState();
switch (mode) {
case JDBC:
if (licenseState.isJdbcAllowed() == false) {
throw LicenseUtils.newComplianceException("jdbc");
}
break;
case ODBC:
if (licenseState.isOdbcAllowed() == false) {
throw LicenseUtils.newComplianceException("odbc");
}
break;
case PLAIN:
if (licenseState.isSqlAllowed() == false) {
throw LicenseUtils.newComplianceException(XPackField.SQL);
}
break;
default:
throw new IllegalArgumentException("Unknown SQL mode " + mode);
}
}
));
this.enabled = XPackSettings.SQL_ENABLED.get(settings);
}
// overridable by tests
protected XPackLicenseState getLicenseState() { return XPackPlugin.getSharedLicenseState(); }
@Override
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
ResourceWatcherService resourceWatcherService, ScriptService scriptService,

View File

@ -5,25 +5,20 @@
*/
package org.elasticsearch.xpack.sql.action;
import org.elasticsearch.analysis.common.CommonAnalysisPlugin;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.reindex.ReindexPlugin;
import org.elasticsearch.license.LicenseService;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.test.ESIntegTestCase;
import org.elasticsearch.test.discovery.TestZenDiscovery;
import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import static org.elasticsearch.test.ESIntegTestCase.Scope.SUITE;
@ESIntegTestCase.ClusterScope(scope = SUITE, numDataNodes = 0, numClientNodes = 0, maxNumDataNodes = 0, transportClientRatio = 0)
public abstract class AbstractSqlIntegTestCase extends ESIntegTestCase {
@Override
protected boolean ignoreExternalCluster() {
return true;
}
@Override
protected Settings nodeSettings(int nodeOrdinal) {
Settings.Builder settings = Settings.builder().put(super.nodeSettings(nodeOrdinal));
@ -32,29 +27,18 @@ public abstract class AbstractSqlIntegTestCase extends ESIntegTestCase {
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false);
settings.put("xpack.ml.autodetect_process", false);
settings.put(LicenseService.SELF_GENERATED_LICENSE_TYPE.getKey(), "trial");
return settings.build();
}
@Override
protected Collection<Class<? extends Plugin>> nodePlugins() {
return Arrays.asList(XPackPlugin.class, CommonAnalysisPlugin.class, ReindexPlugin.class);
return Collections.singletonList(LocalStateSQLXPackPlugin.class);
}
@Override
protected Collection<Class<? extends Plugin>> transportClientPlugins() {
return nodePlugins();
}
@Override
protected Settings transportClientSettings() {
// Plugin should be loaded on the transport client as well
return nodeSettings(0);
}
@Override
protected Collection<Class<? extends Plugin>> getMockPlugins() {
return Arrays.asList(TestZenDiscovery.TestPlugin.class, TestSeedPlugin.class);
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
package org.elasticsearch.xpack.sql.action;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.LocalStateCompositeXPackPlugin;
import org.elasticsearch.xpack.sql.plugin.SqlPlugin;
import java.nio.file.Path;
public class LocalStateSQLXPackPlugin extends LocalStateCompositeXPackPlugin {
public LocalStateSQLXPackPlugin(final Settings settings, final Path configPath) throws Exception {
super(settings, configPath);
LocalStateSQLXPackPlugin thisVar = this;
plugins.add(new SqlPlugin(settings) {
@Override
protected XPackLicenseState getLicenseState() {
return thisVar.getLicenseState();
}
});
}
}

View File

@ -18,12 +18,11 @@ import static org.hamcrest.Matchers.hasSize;
public class SqlActionIT extends AbstractSqlIntegTestCase {
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/37191")
public void testSqlAction() throws Exception {
public void testSqlAction() {
assertAcked(client().admin().indices().prepareCreate("test").get());
client().prepareBulk()
.add(new IndexRequest("test", "doc", "1").source("data", "bar", "count", 42))
.add(new IndexRequest("test", "doc", "2").source("data", "baz", "count", 43))
.add(new IndexRequest("test").id("1").source("data", "bar", "count", 42))
.add(new IndexRequest("test").id("2").source("data", "baz", "count", 43))
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
.get();
ensureYellow("test");

View File

@ -5,7 +5,6 @@
*/
package org.elasticsearch.xpack.sql.action;
import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.support.WriteRequest;
@ -17,16 +16,15 @@ import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/37191")
public class SqlClearCursorActionIT extends AbstractSqlIntegTestCase {
public void testSqlClearCursorAction() throws Exception {
public void testSqlClearCursorAction() {
assertAcked(client().admin().indices().prepareCreate("test").get());
BulkRequestBuilder bulkRequestBuilder = client().prepareBulk();
int indexSize = randomIntBetween(100, 300);
logger.info("Indexing {} records", indexSize);
for (int i = 0; i < indexSize; i++) {
bulkRequestBuilder.add(new IndexRequest("test", "doc", "id" + i).source("data", "bar", "count", i));
bulkRequestBuilder.add(new IndexRequest("test").id("id" + i).source("data", "bar", "count", i));
}
bulkRequestBuilder.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
ensureYellow("test");
@ -50,13 +48,13 @@ public class SqlClearCursorActionIT extends AbstractSqlIntegTestCase {
assertEquals(0, getNumberOfSearchContexts());
}
public void testAutoCursorCleanup() throws Exception {
public void testAutoCursorCleanup() {
assertAcked(client().admin().indices().prepareCreate("test").get());
BulkRequestBuilder bulkRequestBuilder = client().prepareBulk();
int indexSize = randomIntBetween(100, 300);
logger.info("Indexing {} records", indexSize);
for (int i = 0; i < indexSize; i++) {
bulkRequestBuilder.add(new IndexRequest("test", "doc", "id" + i).source("data", "bar", "count", i));
bulkRequestBuilder.add(new IndexRequest("test").id("id" + i).source("data", "bar", "count", i));
}
bulkRequestBuilder.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
ensureYellow("test");
@ -77,7 +75,7 @@ public class SqlClearCursorActionIT extends AbstractSqlIntegTestCase {
do {
sqlQueryResponse = new SqlQueryRequestBuilder(client(), SqlQueryAction.INSTANCE).cursor(sqlQueryResponse.cursor()).get();
fetched += sqlQueryResponse.size();
} while (sqlQueryResponse.cursor().equals("") == false);
} while (sqlQueryResponse.cursor().isEmpty() == false);
assertEquals(indexSize, fetched);
SqlClearCursorResponse cleanCursorResponse = new SqlClearCursorRequestBuilder(client(), SqlClearCursorAction.INSTANCE)

View File

@ -6,13 +6,23 @@
package org.elasticsearch.xpack.sql.action;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import java.util.Collection;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.either;
import static org.hamcrest.CoreMatchers.startsWith;
public class SqlDisabledIT extends AbstractSqlIntegTestCase {
@Override
protected Collection<Class<? extends Plugin>> nodePlugins() {
return Collections.singletonList(XPackPlugin.class);
}
@Override
protected Settings nodeSettings(int nodeOrdinal) {
return Settings.builder()
@ -29,8 +39,7 @@ public class SqlDisabledIT extends AbstractSqlIntegTestCase {
.build();
}
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/37191")
public void testSqlAction() throws Exception {
public void testSqlAction() {
Throwable throwable = expectThrows(Throwable.class,
() -> new SqlQueryRequestBuilder(client(), SqlQueryAction.INSTANCE).query("SHOW tables").get());
assertThat(throwable.getMessage(),

View File

@ -35,7 +35,7 @@ import static org.elasticsearch.license.XPackLicenseStateTests.randomTrialBasicS
import static org.elasticsearch.license.XPackLicenseStateTests.randomTrialOrPlatinumMode;
import static org.hamcrest.Matchers.equalTo;
@LuceneTestCase.AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/37191")
@LuceneTestCase.AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/37320")
public class SqlLicenseIT extends AbstractLicensesIntegrationTestCase {
@Override
protected boolean ignoreExternalCluster() {
@ -164,8 +164,8 @@ public class SqlLicenseIT extends AbstractLicensesIntegrationTestCase {
private void setupTestIndex() {
ElasticsearchAssertions.assertAcked(client().admin().indices().prepareCreate("test").get());
client().prepareBulk()
.add(new IndexRequest("test", "doc", "1").source("data", "bar", "count", 42))
.add(new IndexRequest("test", "doc", "2").source("data", "baz", "count", 43))
.add(new IndexRequest("test").id("1").source("data", "bar", "count", 42))
.add(new IndexRequest("test").id("2").source("data", "baz", "count", 43))
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
.get();
}

View File

@ -17,12 +17,11 @@ import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcke
public class SqlTranslateActionIT extends AbstractSqlIntegTestCase {
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/37191")
public void testSqlTranslateAction() throws Exception {
public void testSqlTranslateAction() {
assertAcked(client().admin().indices().prepareCreate("test").get());
client().prepareBulk()
.add(new IndexRequest("test", "doc", "1").source("data", "bar", "count", 42))
.add(new IndexRequest("test", "doc", "2").source("data", "baz", "count", 43))
.add(new IndexRequest("test").id("1").source("data", "bar", "count", 42))
.add(new IndexRequest("test").id("2").source("data", "baz", "count", 43))
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
.get();
ensureYellow("test");
@ -33,11 +32,11 @@ public class SqlTranslateActionIT extends AbstractSqlIntegTestCase {
.query("SELECT " + columns + " FROM test ORDER BY count").get();
SearchSourceBuilder source = response.source();
FetchSourceContext fetch = source.fetchSource();
assertEquals(true, fetch.fetchSource());
assertTrue(fetch.fetchSource());
assertArrayEquals(new String[] { "data" }, fetch.includes());
assertEquals(
singletonList(new DocValueFieldsContext.FieldAndFormat("count", DocValueFieldsContext.USE_DEFAULT_FORMAT)),
source.docValueFields());
assertEquals(singletonList(SortBuilders.fieldSort("count")), source.sorts());
assertEquals(singletonList(SortBuilders.fieldSort("count").missing("_last").unmappedType("long")), source.sorts());
}
}

View File

@ -25,14 +25,14 @@ import static org.mockito.Mockito.mock;
public class SqlPluginTests extends ESTestCase {
public void testSqlDisabled() {
SqlPlugin plugin = new SqlPlugin(false, new SqlLicenseChecker((mode) -> {}));
Settings settings = Settings.builder().put("xpack.sql.enabled", false).build();
SqlPlugin plugin = new SqlPlugin(settings);
assertThat(plugin.createComponents(mock(Client.class), "cluster", new NamedWriteableRegistry(Cursors.getNamedWriteables())),
empty());
empty());
assertThat(plugin.getActions(), empty());
assertThat(plugin.getRestHandlers(Settings.EMPTY, mock(RestController.class),
new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS),
IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, new SettingsFilter(Collections.emptyList()),
mock(IndexNameExpressionResolver.class), () -> mock(DiscoveryNodes.class)), empty());
new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS),
IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, new SettingsFilter(Collections.emptyList()),
mock(IndexNameExpressionResolver.class), () -> mock(DiscoveryNodes.class)), empty());
}
}