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:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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 {}
|
||||
}
|
||||
Reference in New Issue
Block a user