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

setup:
  env: kind
  file: ../kind.yaml
  steps:
    - name: prepare e2e.yaml
      command: bash hack/prepare-e2e.sh
    - name: install cert-manager
      command: |
        # kind k8s cluster is in $TMPDIR
        export KUBECONFIG=$TMPDIR/e2e-k8s.config
        kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml
      wait:
        - namespace: cert-manager
          resource: pod
          for: condition=Ready
    - name: install operator
      command: |
        export OPERATOR_IMG=controller
        make -C operator docker-build   
        kind load docker-image controller
        make -C operator install
        make -C operator deploy
      wait:
        - namespace: skywalking-swck-system
          resource: pod
          for: condition=Ready
    - name: install metrics-adapter
      command: |
        export ADAPTER_IMG=metrics-adapter
        make -C adapter docker-build
        kind load docker-image metrics-adapter
        make -C adapter deploy
      wait:
        - namespace: skywalking-custom-metrics-system
          resource: pod
          for: condition=Ready
    - name: setup oapserver and ui
      command: |
        kubectl create namespace skywalking-system
        grep -B17 "\-\-\-" test/e2e/skywalking-components-with-satellite.yaml | kubectl apply -f -
      wait:
        - namespace: skywalking-system
          resource: OAPServer/skywalking-system
          for: condition=Available
        - namespace: skywalking-system
          resource: Satellite/skywalking-system
          for: condition=Available
    - name: setup java agent demo
      command: |
        kubectl label namespace skywalking-system swck-injection=enabled
        sed 's/oap-service/skywalking-system-satellite.skywalking-system/' test/e2e/demo.yaml | kubectl create -f -
      wait:
        - namespace: skywalking-system
          resource: deployment/demo
          for: condition=Available
    - name: setup the hpa of java agent demo
      command: |
        kubectl apply -f test/e2e/satellite-hpa-demo.yaml
    - name: increase the satellite connection count
      command: |
        kubectl -n skywalking-system scale deployment/demo --replicas 5
  kind:
    expose-ports:
      - namespace: skywalking-system
        resource: service/demo 
        port: 8085
      - namespace: skywalking-system
        resource: service/skywalking-system-oap
        port: 12800
  timeout: 20m

trigger:
  action: http
  interval: 30s
  times: 30
  url: http://${service_demo_host}:${service_demo_8085}/hello
  method: GET

verify:
  # verify with retry strategy
  retry:
    # max retry count
    count: 10
    # the interval between two attempts, e.g. 10s, 1m.
    interval: 15s
  cases:
    - query: swctl --display yaml --base-url=http://${service_skywalking_system_oap_host}:${service_skywalking_system_oap_12800}/graphql metrics linear --name satellite_service_grpc_connect_count --service-name satellite::satellite-service | yq e 'to_entries' -
      expected: ../verify/satellite-hpa-metrics.yaml
    # the trigger will do 30 times, as the hpa's value is set as 5, so the deployment's replicas will be 3(maxReplicas).
    - query: 'kubectl get deployment skywalking-system-satellite -n skywalking-system -o jsonpath=''{.status.replicas}'' | yq e ''{"replicas": .}'' - | yq e ''to_entries'' -'
      expected: ../verify/satellite-replicas.yaml