# 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/cert-manager/cert-manager/releases/download/v1.8.0/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: setup elasticsearch
      command: |
        kubectl apply -f test/e2e/deploy-elasticsearch.yaml
        kubectl rollout status --watch --timeout=120s statefulset/es
    - name: setup storage(use the external type)
      command: |
        kubectl apply -f test/e2e/external-storage.yaml
    - name: setup oapserver and ui
      command: |
        kubectl create namespace skywalking-system
        kubectl apply -f test/e2e/skywalking-components-with-storage.yaml
      wait:
        - namespace: default
          resource: OAPServer/default
          for: condition=Available
        - namespace: skywalking-system
          resource: UI/skywalking-system
          for: condition=Available
    - name: setup java agent demo
      command: |
        kubectl label namespace skywalking-system swck-injection=enabled
        sed 's/oap-service/default-oap.default/' test/e2e/demo.yaml | kubectl create -f -
      wait:
        - namespace: skywalking-system
          resource: deployment/demo
          for: condition=Available 
  kind:
    expose-ports:
      - namespace: skywalking-system
        resource: service/demo 
        port: 8085
      - namespace: default
        resource: service/default-oap
        port: 12800
      - namespace: skywalking-system
        resource: service/skywalking-system-ui
        port: 80
      - namespace: default
        resource: service/es-out
        port: 9200
  timeout: 20m

cleanup:
  # always never success failure
  on: always

trigger:
  action: http
  interval: 10s
  times: 5
  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: 10s
  cases:
    - includes:
        - ../oapserver-cases.yaml
        - ../ui-cases.yaml
    # confirm whether the data are stored in the es
    - query: 'curl -u "elastic:changeme" -k "http://${service_es_out_host}:${service_es_out_9200}/_cat/indices?v" 2>&1 | grep sw_metrics | cut -d " " -f 5 | sed ''/^$/d'' | yq e ''{"indices": .}'' - | yq e ''to_entries'' -'
      expected: ../verify/indices.yaml