# 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.

props:
  project_name: dubbo-samples-spi-compatible
  zookeeper_port: 2181

services:
  ${project_name}:
    type: app
    basedir: .
    mainClass: org.apache.dubbo.samples.basic.SpiCompatibleProvider
    systemProps:
      - zookeeper.address=127.0.0.1
      - zookeeper.port=${zookeeper_port}
    checkPortsAfterRun:
      - ${zookeeper_port}
    checkLog: "dubbo service started"

  ${project_name}-test:
    type: test
    basedir: .
    tests:
      - "**/*IT.class"
    systemProps:
      - zookeeper.address=${project_name}
      - zookeeper.port=${zookeeper_port}
      - dubbo.address=${project_name}
    waitPortsBeforeRun:
      - ${project_name}:${zookeeper_port}
      # Disable Dubbo port check due to Dubbo-Samples-SPI-Compatible implements a new protocol ---- CompatibleProtocol
      # CompatibleProtocol will not expose a port and port check is invalid for it
    depends_on:
      - ${project_name}
