diff --git a/k8s/elasticsearch/apptest/deployer/manifest/tester.yaml.template b/k8s/elasticsearch/apptest/deployer/manifest/tester.yaml.template index 86d6bfe7ca..6fad6599d2 100644 --- a/k8s/elasticsearch/apptest/deployer/manifest/tester.yaml.template +++ b/k8s/elasticsearch/apptest/deployer/manifest/tester.yaml.template @@ -26,5 +26,7 @@ spec: fieldRef: fieldPath: metadata.namespace - name: APP_INSTANCE_NAME - value: ${APP_INSTANCE_NAME} + value: "${APP_INSTANCE_NAME}" + - name: REPLICAS + value: "${REPLICAS}" restartPolicy: Never diff --git a/k8s/elasticsearch/apptest/tester/Dockerfile b/k8s/elasticsearch/apptest/tester/Dockerfile index 960bcff7f9..50d8c1871f 100644 --- a/k8s/elasticsearch/apptest/tester/Dockerfile +++ b/k8s/elasticsearch/apptest/tester/Dockerfile @@ -6,6 +6,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ jq \ uuid-runtime \ wget \ + curl \ && rm -rf /var/lib/apt/lists/* RUN wget -q -O /bin/kubectl \ diff --git a/k8s/elasticsearch/apptest/tester/tester.sh b/k8s/elasticsearch/apptest/tester/tester.sh index ddccd4cf33..cb73886e0f 100755 --- a/k8s/elasticsearch/apptest/tester/tester.sh +++ b/k8s/elasticsearch/apptest/tester/tester.sh @@ -17,6 +17,9 @@ set -xeo pipefail shopt -s nullglob +export ELASTIC_URL="http://${APP_INSTANCE_NAME}-elasticsearch-svc:9200" +export HEALTH_URL="${ELASTIC_URL}/_cluster/health" + for test in /tests/*; do testrunner -logtostderr "--test_spec=${test}" done diff --git a/k8s/elasticsearch/apptest/tester/tests/basic-suite.yaml b/k8s/elasticsearch/apptest/tester/tests/basic-suite.yaml index cdf72f4ca3..615bff02f7 100644 --- a/k8s/elasticsearch/apptest/tester/tests/basic-suite.yaml +++ b/k8s/elasticsearch/apptest/tester/tests/basic-suite.yaml @@ -1,8 +1,72 @@ actions: -- name: dummy test + +- name: Wait until Elasticsearch is ready bashTest: script: |- - exit 0 + for ((pod=0; pod<${REPLICAS}; pod++)); do + kubectl wait pod/${APP_INSTANCE_NAME}-elasticsearch-${pod} \ + --namespace=${NAMESPACE} \ + --for=condition=Ready \ + --timeout=180s + done expect: exitCode: equals: 0 + +- name: All nodes are connected to the cluster + bashTest: + script: |- + nodes="$(curl -XGET "${HEALTH_URL}?wait_for_nodes=${REPLICAS}&timeout=300s" | jq '.number_of_nodes')" + if [[ "${nodes}" -eq "${REPLICAS}" ]]; then + echo 'OK - all nodes found' + else + echo "FAIL - found nodes: ${nodes}" + fi + expect: + stdout: + equals: 'OK - all nodes found' + +- name: Cluster reports green status + bashTest: + script: |- + curl -XGET "${HEALTH_URL}?wait_for_status=green&timeout=300s" | jq -r '.status' + expect: + stdout: + equals: 'green' + +- name: New document can be saved + bashTest: + script: |- + curl -s -f -X PUT -H 'Content-Type:application/json' -d '{ + "name": "John", + "surname": "Smith" + }' "${ELASTIC_URL}/employees/person/1" | jq -r '.result' + expect: + exitCode: + equals: 0 + stdout: + equals: 'created' + +- name: Document can be updated + bashTest: + script: |- + curl -s -f -X POST -H 'Content-Type:application/json' -d '{ + "doc": { + "lastname": "Jones" + } + }' "${ELASTIC_URL}/employees/person/1/_update" | jq -r '.result' + expect: + exitCode: + equals: 0 + stdout: + equals: 'updated' + +- name: Existing document can be found + bashTest: + script: |- + # Wait to allow the object to be propagated between all nodes + sleep 5 + curl -s -f "${ELASTIC_URL}/_search?q=name:John" | jq -r '.hits.hits[]._source.lastname' + expect: + stdout: + equals: 'Jones' diff --git a/k8s/elasticsearch/deployer/Dockerfile b/k8s/elasticsearch/deployer/Dockerfile index d4ca281276..d6d45b24ea 100644 --- a/k8s/elasticsearch/deployer/Dockerfile +++ b/k8s/elasticsearch/deployer/Dockerfile @@ -8,6 +8,10 @@ COPY apptest/deployer /data-test/ # Provide registry prefix and tag for default values for images. ARG REGISTRY ARG TAG + +ENV WAIT_FOR_READY_TIMEOUT 600 +ENV TESTER_TIMEOUT 600 + RUN cat /data/schema.yaml \ | env -i "REGISTRY=$REGISTRY" "TAG=$TAG" envsubst \ > /data/schema.yaml.new \