diff --git a/gerrit-acceptance-tests/BUILD b/gerrit-acceptance-tests/BUILD index 3875dc5238..bd7cbb7b9b 100644 --- a/gerrit-acceptance-tests/BUILD +++ b/gerrit-acceptance-tests/BUILD @@ -7,6 +7,8 @@ java_library( "//gerrit-acceptance-framework:lib", "//gerrit-common:annotations", "//gerrit-common:server", + "//gerrit-elasticsearch:elasticsearch", + "//gerrit-elasticsearch:elasticsearch_test_utils", "//gerrit-extension-api:api", "//gerrit-gpg:testutil", "//gerrit-httpd:httpd", diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/ReindexIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/ReindexIT.java index 2a51ec1119..1aa600b5a8 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/ReindexIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/ReindexIT.java @@ -19,14 +19,37 @@ import static com.google.common.truth.Truth8.assertThat; import com.google.common.io.MoreFiles; import com.google.gerrit.acceptance.NoHttpd; import com.google.gerrit.acceptance.StandaloneSiteTest; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils.ElasticNodeInfo; import com.google.gerrit.extensions.api.GerritApi; import com.google.gerrit.extensions.common.ChangeInput; import com.google.gerrit.reviewdb.client.Project; +import com.google.gerrit.testutil.ConfigSuite; import java.nio.file.Files; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import org.eclipse.jgit.lib.Config; +import org.junit.AfterClass; import org.junit.Test; @NoHttpd public class ReindexIT extends StandaloneSiteTest { + + @ConfigSuite.Config + public static Config elasticsearch() throws InterruptedException, ExecutionException { + if (elasticNodeInfo == null) { + elasticNodeInfo = ElasticTestUtils.startElasticsearchNode(); + } + String indicesPrefix = UUID.randomUUID().toString(); + ElasticTestUtils.createAllIndexes(elasticNodeInfo, indicesPrefix); + + Config cfg = new Config(); + ElasticTestUtils.configure(cfg, elasticNodeInfo.port, indicesPrefix); + return cfg; + } + + private static ElasticNodeInfo elasticNodeInfo; + @Test public void reindexFromScratch() throws Exception { Project.NameKey project = new Project.NameKey("project"); @@ -55,4 +78,13 @@ public class ReindexIT extends StandaloneSiteTest { .containsExactly(changeId); } } + + @AfterClass + public static void stopElasticServer() { + if (elasticNodeInfo != null) { + elasticNodeInfo.node.close(); + elasticNodeInfo.elasticDir.delete(); + elasticNodeInfo = null; + } + } } diff --git a/gerrit-elasticsearch/BUILD b/gerrit-elasticsearch/BUILD index ae8a576b35..3b7570d778 100644 --- a/gerrit-elasticsearch/BUILD +++ b/gerrit-elasticsearch/BUILD @@ -1,6 +1,9 @@ java_library( name = "elasticsearch", - srcs = glob(["src/main/java/**/*.java"]), + srcs = glob( + ["src/main/java/**/*.java"], + exclude = ["**/testing/**"], + ), visibility = ["//visibility:public"], deps = [ "//gerrit-antlr:query_exception", @@ -27,7 +30,8 @@ load("//tools/bzl:junit.bzl", "junit_tests") java_library( name = "elasticsearch_test_utils", testonly = 1, - srcs = glob(["src/test/java/**/ElasticTestUtils.java"]), + srcs = glob(["src/main/java/com/google/gerrit/elasticsearch/testing/*.java"]), + visibility = ["//visibility:public"], deps = [ ":elasticsearch", "//gerrit-reviewdb:client", diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java index 390f7b1d76..7df7f1c953 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java @@ -60,15 +60,15 @@ import org.slf4j.LoggerFactory; public class ElasticAccountIndex extends AbstractElasticIndex implements AccountIndex { - static class AccountMapping { + public static class AccountMapping { MappingProperties accounts; - AccountMapping(Schema schema) { + public AccountMapping(Schema schema) { this.accounts = ElasticMapping.createMapping(schema); } } - static final String ACCOUNTS = "accounts"; + public static final String ACCOUNTS = "accounts"; private static final Logger log = LoggerFactory.getLogger(ElasticAccountIndex.class); diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java index 5424e6bd1c..22fec993d6 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java @@ -78,24 +78,24 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** Secondary index implementation using Elasticsearch. */ -class ElasticChangeIndex extends AbstractElasticIndex +public class ElasticChangeIndex extends AbstractElasticIndex implements ChangeIndex { private static final Logger log = LoggerFactory.getLogger(ElasticChangeIndex.class); - static class ChangeMapping { - MappingProperties openChanges; - MappingProperties closedChanges; + public static class ChangeMapping { + public MappingProperties openChanges; + public MappingProperties closedChanges; - ChangeMapping(Schema schema) { + public ChangeMapping(Schema schema) { MappingProperties mapping = ElasticMapping.createMapping(schema); this.openChanges = mapping; this.closedChanges = mapping; } } - static final String CHANGES = "changes"; - static final String OPEN_CHANGES = "open_" + CHANGES; - static final String CLOSED_CHANGES = "closed_" + CHANGES; + public static final String CHANGES = "changes"; + public static final String OPEN_CHANGES = "open_" + CHANGES; + public static final String CLOSED_CHANGES = "closed_" + CHANGES; private final ChangeMapping mapping; private final Provider db; diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java index 949194004c..f24f8446bd 100644 --- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java @@ -57,15 +57,15 @@ import org.slf4j.LoggerFactory; public class ElasticGroupIndex extends AbstractElasticIndex implements GroupIndex { - static class GroupMapping { + public static class GroupMapping { MappingProperties groups; - GroupMapping(Schema schema) { + public GroupMapping(Schema schema) { this.groups = ElasticMapping.createMapping(schema); } } - static final String GROUPS = "groups"; + public static final String GROUPS = "groups"; private static final Logger log = LoggerFactory.getLogger(ElasticGroupIndex.class); diff --git a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticTestUtils.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/testing/ElasticTestUtils.java similarity index 90% rename from gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticTestUtils.java rename to gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/testing/ElasticTestUtils.java index 654db40864..ca9673e20a 100644 --- a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticTestUtils.java +++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/testing/ElasticTestUtils.java @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.gerrit.elasticsearch; +package com.google.gerrit.elasticsearch.testing; import static com.google.common.truth.Truth.assertThat; import static com.google.gerrit.elasticsearch.ElasticAccountIndex.ACCOUNTS; @@ -23,8 +23,10 @@ import static com.google.gerrit.elasticsearch.ElasticGroupIndex.GROUPS; import com.google.common.base.Strings; import com.google.common.io.Files; +import com.google.gerrit.elasticsearch.ElasticAccountIndex; import com.google.gerrit.elasticsearch.ElasticAccountIndex.AccountMapping; import com.google.gerrit.elasticsearch.ElasticChangeIndex.ChangeMapping; +import com.google.gerrit.elasticsearch.ElasticGroupIndex; import com.google.gerrit.elasticsearch.ElasticGroupIndex.GroupMapping; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.account.AccountState; @@ -48,16 +50,16 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; -final class ElasticTestUtils { +public final class ElasticTestUtils { static final Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create(); - static class ElasticNodeInfo { - final Node node; - final String port; - final File elasticDir; + public static class ElasticNodeInfo { + public final Node node; + public final String port; + public final File elasticDir; private ElasticNodeInfo(Node node, File rootDir, String port) { this.node = node; @@ -66,7 +68,7 @@ final class ElasticTestUtils { } } - static void configure(Config config, String port, String prefix) { + public static void configure(Config config, String port, String prefix) { config.setEnum("index", null, "type", IndexType.ELASTICSEARCH); config.setString("elasticsearch", "test", "protocol", "http"); config.setString("elasticsearch", "test", "hostname", "localhost"); @@ -74,7 +76,8 @@ final class ElasticTestUtils { config.setString("elasticsearch", null, "prefix", prefix); } - static ElasticNodeInfo startElasticsearchNode() throws InterruptedException, ExecutionException { + public static ElasticNodeInfo startElasticsearchNode() + throws InterruptedException, ExecutionException { File elasticDir = Files.createTempDir(); Path elasticDirPath = elasticDir.toPath(); Settings settings = @@ -106,19 +109,19 @@ final class ElasticTestUtils { return new ElasticNodeInfo(node, elasticDir, getHttpPort(node)); } - static void deleteAllIndexes(ElasticNodeInfo nodeInfo) { + public static void deleteAllIndexes(ElasticNodeInfo nodeInfo) { nodeInfo.node.client().admin().indices().prepareDelete("_all").execute(); } - static class NodeInfo { + public static class NodeInfo { String httpAddress; } - static class Info { + public static class Info { Map nodes; } - static void createAllIndexes(ElasticNodeInfo nodeInfo, String prefix) { + public static void createAllIndexes(ElasticNodeInfo nodeInfo, String prefix) { Schema changeSchema = ChangeSchemaDefinitions.INSTANCE.getLatest(); ChangeMapping openChangesMapping = new ChangeMapping(changeSchema); ChangeMapping closedChangesMapping = new ChangeMapping(changeSchema); diff --git a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryAccountsTest.java b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryAccountsTest.java index f10c0ab28d..6b3ebc5b64 100644 --- a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryAccountsTest.java +++ b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryAccountsTest.java @@ -14,7 +14,8 @@ package com.google.gerrit.elasticsearch; -import com.google.gerrit.elasticsearch.ElasticTestUtils.ElasticNodeInfo; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils.ElasticNodeInfo; import com.google.gerrit.server.query.account.AbstractQueryAccountsTest; import com.google.gerrit.testutil.InMemoryModule; import com.google.inject.Guice; diff --git a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java index 5e6114ca29..9ae667cb79 100644 --- a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java +++ b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryChangesTest.java @@ -14,7 +14,8 @@ package com.google.gerrit.elasticsearch; -import com.google.gerrit.elasticsearch.ElasticTestUtils.ElasticNodeInfo; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils.ElasticNodeInfo; import com.google.gerrit.server.query.change.AbstractQueryChangesTest; import com.google.gerrit.testutil.InMemoryModule; import com.google.gerrit.testutil.InMemoryRepositoryManager.Repo; diff --git a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryGroupsTest.java b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryGroupsTest.java index 76d85b9735..c7f7475bbf 100644 --- a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryGroupsTest.java +++ b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticQueryGroupsTest.java @@ -14,7 +14,8 @@ package com.google.gerrit.elasticsearch; -import com.google.gerrit.elasticsearch.ElasticTestUtils.ElasticNodeInfo; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils; +import com.google.gerrit.elasticsearch.testing.ElasticTestUtils.ElasticNodeInfo; import com.google.gerrit.server.query.group.AbstractQueryGroupsTest; import com.google.gerrit.testutil.InMemoryModule; import com.google.inject.Guice;