// 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.pgm;

import com.google.gerrit.acceptance.NoHttpd;
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;
import org.junit.After;

@NoHttpd
public class ElasticReindexIT extends AbstractReindexTests {
  private static ElasticContainer<?> container;

  @ConfigSuite.Default
  public static Config elasticsearch() {
    ElasticNodeInfo elasticNodeInfo;
    try {
      container = ElasticContainer.createAndStart();
      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;
  }

  @Override
  public void configureIndex(Injector injector) throws Exception {
    ElasticTestUtils.createAllIndexes(injector);
  }

  @After
  public void stopElasticServer() {
    if (container != null) {
      container.stop();
      container = null;
    }
  }
}

@@ -690,16 +690,71 @@
 oHttpd;%0A
+import com.google.gerrit.elasticsearch.ElasticVersion;%0A
 import c
@@ -1247,66 +1247,62 @@
 %0A%0A  
-@ConfigSuite.Default%0A  public static Config elasticsearch(
+private static Config getConfig(ElasticVersion version
 ) %7B%0A
@@ -1398,16 +1398,23 @@
 ndStart(
+version
 );%0A     
@@ -1724,16 +1724,243 @@
 g;%0A  %7D%0A%0A
+  @ConfigSuite.Default%0A  public static Config elasticsearchV2() %7B%0A    return getConfig(ElasticVersion.V2_4);%0A  %7D%0A%0A  @ConfigSuite.Config%0A  public static Config elasticsearchV5() %7B%0A    return getConfig(ElasticVersion.V5_6);%0A  %7D%0A%0A
   @Overr

Add tests against Elasticsearch version 5