Extract an abstract test case for querying changes

Add implementations for SQL and Lucene backends.

Convert to JUnit 4 so we can use @Ignore on the test, as Buck's test
runner does not skip abstract classes.

Change-Id: I1a9b6ed53e27cab81ea88ff4e8fece8e999596e0
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/QueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
similarity index 83%
rename from gerrit-server/src/test/java/com/google/gerrit/server/query/change/QueryChangesTest.java
rename to gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
index ad24c2c..a8c4099 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/QueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -14,6 +14,9 @@
 
 package com.google.gerrit.server.query.change;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import com.google.gerrit.extensions.restapi.TopLevelResource;
 import com.google.gerrit.lifecycle.LifecycleManager;
 import com.google.gerrit.reviewdb.client.Account;
@@ -35,25 +38,25 @@
 import com.google.gerrit.server.util.RequestContext;
 import com.google.gerrit.server.util.ThreadLocalRequestContext;
 import com.google.gerrit.testutil.InMemoryDatabase;
-import com.google.gerrit.testutil.InMemoryModule;
 import com.google.gerrit.testutil.InMemoryRepositoryManager;
-import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Provider;
 import com.google.inject.util.Providers;
 
-import junit.framework.TestCase;
-
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
 import org.eclipse.jgit.junit.TestRepository;
-import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
 
 import java.io.IOException;
 import java.util.List;
 
-public class QueryChangesTest extends TestCase {
+@Ignore
+public abstract class AbstractQueryChangesTest {
   @Inject private AccountManager accountManager;
   @Inject private ChangeInserter.Factory changeFactory;
   @Inject private CreateProject.Factory projectFactory;
@@ -69,14 +72,11 @@
   private ReviewDb db;
   private Account.Id user;
 
-  @Override
-  public void setUp() throws Exception {
-    Config cfg = InMemoryModule.newDefaultConfig();
-    cfg.setString("index", null, "type", "lucene");
-    cfg.setBoolean("index", "lucene", "testInmemory", true);
-    cfg.setInt("index", "lucene", "testVersion", 2);
+  protected abstract Injector createInjector();
 
-    Injector injector = Guice.createInjector(new InMemoryModule(cfg));
+  @Before
+  public void setUpInjector() throws Exception {
+    Injector injector = createInjector();
     injector.injectMembers(this);
     lifecycle = new LifecycleManager();
     lifecycle.add(injector);
@@ -100,21 +100,16 @@
     });
   }
 
-  @Override
-  public void tearDown() {
+  @After
+  public void tearDownInjector() {
     lifecycle.stop();
     requestContext.setContext(null);
     db.close();
     InMemoryDatabase.drop(schemaFactory);
   }
 
-
-  public void testInjectionSetup() {
-    assertNotNull(changeFactory);
-    assertNotNull(repoManager);
-  }
-
-  public void testQueryById() throws Exception {
+  @Test
+  public void byId() throws Exception {
     TestRepository<InMemoryRepository> repo = createProject("repo");
     RevCommit commit = repo.parseBody(repo.commit().message("message").create());
     Change change = new Change(
@@ -133,19 +128,19 @@
     assertEquals(id, result._number);
   }
 
-  private TestRepository<InMemoryRepository> createProject(String name)
-      throws Exception {
+  private TestRepository<InMemoryRepository> createProject(String name) throws Exception {
     CreateProject create = projectFactory.create(name);
     create.apply(TopLevelResource.INSTANCE, new CreateProject.Input());
     return new TestRepository<InMemoryRepository>(
         repoManager.openRepository(new Project.NameKey(name)));
   }
 
-  private RefControl refControl(String repo, Change change) throws NoSuchProjectException, IOException {
-    return projectControlFactory.controlFor(
-        new Project.NameKey(repo),
-        userFactory.create(user)).controlFor(change).getRefControl();
-  }
+  private RefControl refControl(String repo, Change change)
+      throws NoSuchProjectException, IOException {
+        return projectControlFactory.controlFor(
+            new Project.NameKey(repo),
+            userFactory.create(user)).controlFor(change).getRefControl();
+      }
 
   private ChangeInfo queryOne(String query) throws Exception {
     QueryChanges q = queryProvider.get();
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java
new file mode 100644
index 0000000..20bd2e8
--- /dev/null
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java
@@ -0,0 +1,31 @@
+// Copyright (C) 2013 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.server.git;
+
+package com.google.gerrit.server.query.change;
+
+import com.google.gerrit.testutil.InMemoryModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+import org.eclipse.jgit.lib.Config;
+
+public class LuceneQueryChangesTest extends AbstractQueryChangesTest {
+  protected Injector createInjector() {
+    Config cfg = InMemoryModule.newDefaultConfig();
+    cfg.setString("index", null, "type", "lucene");
+    cfg.setBoolean("index", "lucene", "testInmemory", true);
+    cfg.setInt("index", "lucene", "testVersion", 4);
+    return Guice.createInjector(new InMemoryModule(cfg));
+  }
+}
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java
new file mode 100644
index 0000000..37210ab
--- /dev/null
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java
@@ -0,0 +1,29 @@
+// Copyright (C) 2013 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.server.git;
+
+package com.google.gerrit.server.query.change;
+
+import com.google.gerrit.testutil.InMemoryModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+import org.eclipse.jgit.lib.Config;
+
+public class SqlQueryChangesTest extends AbstractQueryChangesTest {
+  protected Injector createInjector() {
+    Config cfg = InMemoryModule.newDefaultConfig();
+    cfg.setString("index", null, "type", "sql");
+    return Guice.createInjector(new InMemoryModule(cfg));
+  }
+}