#  Licensed to the Apache Software Foundation (ASF) under one
#    or more contributor license agreements.  See the NOTICE file
#    distributed with this work for additional information
#    regarding copyright ownership.  The ASF licenses this file
#    to you 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.

version: "3.8"

services:

  gremlin-server-test:
    container_name: gremlin-server-test
    image: tinkerpop/gremlin-server-test:${GREMLIN_SERVER}
    build:
      context: ../
      dockerfile: docker/gremlin-test-server/Dockerfile
      args:
        - GREMLIN_SERVER=${GREMLIN_SERVER}
    ports:
      - "45940:45940"
      - "45941:45941"
      - "45942:45942"
      - "4588:4588"
    volumes:
      - ${HOME}/.groovy:/root/.groovy
      - ${HOME}/.m2:/root/.m2
      - ${ABS_PROJECT_HOME}/gremlin-test/target:/opt/gremlin-test
    healthcheck:
      test: [ "CMD-SHELL", "apk add curl && curl -f http://localhost:45940?gremlin=100-1" ]
      interval: 30s
      timeout: 10s
      retries: 30
      start_period: 30s

  gremlin-go-integration-tests:
    container_name: gremlin-go-integration-tests
    image: golang:1.17
    volumes:
      - .:/go_app
      - ../gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features:/gremlin-test
      - ../docker/gremlin-test-server:/go_app/gremlin-test-server
    environment:
      - CUCUMBER_FEATURE_FOLDER=/gremlin-test
      - GREMLIN_SERVER_URL=ws://gremlin-server-test:45940/gremlin
      - GREMLIN_SERVER_BASIC_AUTH_URL=wss://gremlin-server-test:45941/gremlin
      - RUN_INTEGRATION_TESTS=true
      - RUN_INTEGRATION_WITH_ALIAS_TESTS=true
      - RUN_BASIC_AUTH_INTEGRATION_TESTS=true
      - TEST_TRANSACTIONS=true
    working_dir: /go_app
    command: >
      bash -c "go install github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@latest
      && go test -v -json ./... -race -covermode=atomic -coverprofile=\"coverage.out\" -coverpkg=./... | gotestfmt"
    depends_on:
      gremlin-server-test:
        condition: service_healthy
