From 787f63129e3c9cd5d82bef8a34e53e03ac0a99eb Mon Sep 17 00:00:00 2001
From: Emily Stolfo <emstolfo@gmail.com>
Date: Mon, 25 Jun 2018 12:40:47 +0200
Subject: [PATCH] [CI] Use docker to launch Elasticsearch in rake task

---
 .travis.yml |  9 ++++-----
 Rakefile    | 25 ++++++++++++++++++++++++-
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index cf39473ad..99a2571de 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,16 +33,15 @@ matrix:
       jdk: oraclejdk8
       env: TEST_SUITE=unit
 
-    - rvm: 2.3.3
+    - rvm: 2.5.1
       jdk: oraclejdk8
-      env: TEST_SUITE=integration QUIET=y SERVER=start TEST_CLUSTER_LOGS=/tmp/log TEST_CLUSTER_COMMAND=/tmp/elasticsearch-6.3.0/bin/elasticsearch
+      env: TEST_SUITE=integration QUIET=y
 
 before_install:
-  - gem update --system --no-rdoc --no-ri
+  - gem update --system -q
+  - gem update bundler -q
   - gem --version
-  - gem install bundler -v 1.14.3 --no-rdoc --no-ri
   - bundle version
-  - curl -sS https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz | tar xz -C /tmp
 
 install:
   - bundle install
diff --git a/Rakefile b/Rakefile
index b4c90d710..76479929d 100644
--- a/Rakefile
+++ b/Rakefile
@@ -59,8 +59,31 @@ namespace :test do
     end
   end
 
+  desc "Run Elasticsearch (Docker)"
+  task :setup_elasticsearch do
+    begin
+      sh <<-COMMAND.gsub(/^\s*/, '').gsub(/\s{1,}/, ' ')
+          docker stop $(docker ps -aq);
+          docker rm $(docker ps -aq);
+          docker rmi $(docker images -q);
+          docker run -d=true \
+            --env "discovery.type=single-node" \
+            --env "cluster.name=elasticsearch-rails" \
+            --env "http.port=9200" \
+            --env "cluster.routing.allocation.disk.threshold_enabled=false" \
+            --publish 9250:9200 \
+            --rm \
+            docker.elastic.co/elasticsearch/elasticsearch:6.3.0
+      COMMAND
+      require 'elasticsearch/extensions/test/cluster'
+      Elasticsearch::Extensions::Test::Cluster::Cluster.new(version: '6.3.0',
+                                                            number_of_nodes: 1).wait_for_green
+    rescue
+    end
+  end
+
   desc "Run integration tests in all subprojects"
-  task :integration do
+  task :integration => :setup_elasticsearch do
     # 1/ elasticsearch-model
     #
     puts '-'*80