#  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-dotnet:
    container_name: gremlin-server-test-dotnet
    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-dotnet-integration-tests:
    container_name: gremlin-dotnet-integration-tests
    image: mcr.microsoft.com/dotnet/sdk:6.0
    volumes:
      - .:/gremlin-dotnet
      - ../gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features:/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features
      - ../docker/gremlin-test-server:/gremlin-dotnet/gremlin-test-server
    environment:
      - DOCKER_ENVIRONMENT=true
      - TEST_TRANSACTIONS=true
    working_dir: /gremlin-dotnet
    command: >
      bash -c "dotnet test ./Gremlin.Net.sln -c Release;
      EXIT_CODE=$$?; chown -R `stat -c "%u:%g" .` .; exit $$EXIT_CODE"
    depends_on:
      gremlin-server-test-dotnet:
        condition: service_healthy
