Add integration test classes for "ssh index" commands

Introduce AbstractIndexTests which contains the tests, and IndexIT
and ElasticIndexIT which provide the implementations for Lucene and
Elasticsearch respectively. In ElasticIndexIT, provide configurations
for Elasticsearch versions 2.4. 5.6 and 6.2.

The intial implementation only includes a test for the "index change"
command. Further tests will be added in follow-up commits.

Bug: Issue 9168
Change-Id: I45fab4895962815f737f94976c4ef62be8b082a3
This commit is contained in:
David Pursehouse
2018-06-11 14:43:22 +09:00
parent 76f375b26a
commit a360ca56fc
4 changed files with 181 additions and 2 deletions

View File

@@ -0,0 +1,67 @@
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.acceptance.ssh;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.base.Joiner;
import com.google.common.collect.FluentIterable;
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.NoHttpd;
import com.google.gerrit.acceptance.PushOneCommit;
import com.google.gerrit.acceptance.UseSsh;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.inject.Injector;
import java.util.List;
import org.junit.Test;
@NoHttpd
@UseSsh
public abstract class AbstractIndexTests extends AbstractDaemonTest {
/** @param injector injector */
public abstract void configureIndex(Injector injector) throws Exception;
@Test
public void indexChange() throws Exception {
configureIndex(server.getTestInjector());
PushOneCommit.Result change = createChange("first change", "test1.txt", "test1");
String changeId = change.getChangeId();
String changeLegacyId = change.getChange().getId().toString();
disableChangeIndexWrites();
amendChange(changeId, "second test", "test2.txt", "test2");
assertQuery("message:second", change.getChange(), false);
enableChangeIndexWrites();
String cmd = Joiner.on(" ").join("gerrit", "index", "changes", changeLegacyId);
adminSshSession.exec(cmd);
assertQuery("message:second", change.getChange(), true);
}
protected void assertQuery(String q, ChangeData change, Boolean assertTrue) throws Exception {
List<ChangeInfo> result = query(q);
Iterable<Integer> ids = ids(result);
if (assertTrue) assertThat(ids).contains(change.getId().get());
else assertThat(ids).doesNotContain(change.getId().get());
}
protected static Iterable<Integer> ids(Iterable<ChangeInfo> changes) {
return FluentIterable.from(changes).transform(in -> in._number);
}
}

View File

@@ -1,8 +1,35 @@
load("//gerrit-acceptance-tests:tests.bzl", "acceptance_tests")
java_library(
name = "util",
testonly = 1,
srcs = ["AbstractIndexTests.java"],
deps = ["//gerrit-acceptance-tests:lib"],
)
acceptance_tests(
srcs = glob(["*IT.java"]),
srcs = glob(
["*IT.java"],
exclude = ["ElasticIndexIT.java"],
),
group = "ssh",
labels = ["ssh"],
deps = ["//lib/commons:compress"],
deps = [
":util",
"//lib/commons:compress",
],
)
acceptance_tests(
srcs = ["ElasticIndexIT.java"],
group = "elastic",
labels = [
"elastic",
"docker",
"ssh",
],
deps = [
":util",
"//lib/commons:compress",
],
)

View File

@@ -0,0 +1,62 @@
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.acceptance.ssh;
import com.google.gerrit.elasticsearch.ElasticVersion;
import com.google.gerrit.elasticsearch.testing.ElasticContainer;
import com.google.gerrit.elasticsearch.testing.ElasticTestUtils;
import com.google.gerrit.elasticsearch.testing.ElasticTestUtils.ElasticNodeInfo;
import com.google.gerrit.testutil.ConfigSuite;
import com.google.inject.Injector;
import java.util.UUID;
import org.eclipse.jgit.lib.Config;
public class ElasticIndexIT extends AbstractIndexTests {
private static ElasticContainer<?> container;
private static Config getConfig(ElasticVersion version) {
ElasticNodeInfo elasticNodeInfo;
try {
container = ElasticContainer.createAndStart(version);
elasticNodeInfo = new ElasticNodeInfo(container.getHttpHost().getPort());
} catch (Throwable t) {
return null;
}
String indicesPrefix = UUID.randomUUID().toString();
Config cfg = new Config();
ElasticTestUtils.configure(cfg, elasticNodeInfo.port, indicesPrefix);
return cfg;
}
@ConfigSuite.Default
public static Config elasticsearchV2() {
return getConfig(ElasticVersion.V2_4);
}
@ConfigSuite.Config
public static Config elasticsearchV5() {
return getConfig(ElasticVersion.V5_6);
}
@ConfigSuite.Config
public static Config elasticsearchV6() {
return getConfig(ElasticVersion.V6_2);
}
@Override
public void configureIndex(Injector injector) throws Exception {
ElasticTestUtils.createAllIndexes(injector);
}
}

View File

@@ -0,0 +1,23 @@
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.acceptance.ssh;
import com.google.inject.Injector;
public class IndexIT extends AbstractIndexTests {
@Override
public void configureIndex(Injector injector) throws Exception {}
}