You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ho...@apache.org on 2022/04/20 09:04:19 UTC
[skywalking-kubernetes-event-exporter] 01/01: add e2e tests
This is an automated email from the ASF dual-hosted git repository.
hoshea pushed a commit to branch add-e2e
in repository https://gitbox.apache.org/repos/asf/skywalking-kubernetes-event-exporter.git
commit cb9bf5f618db36fd69f2b65d577234dd8cc7e083
Author: Hoshea <fg...@gmail.com>
AuthorDate: Wed Apr 20 17:03:58 2022 +0800
add e2e tests
---
.github/workflows/build-and-test.yaml | 21 ++++-
Makefile | 17 ++++
deployments/base/deployment.yaml | 2 +-
.../deployment.yaml => test/config/config.yaml} | 52 ++++-------
.../deployment.yaml => test/kustomization.yaml} | 52 ++++-------
.../{base/deployment.yaml => test/namespace.yaml} | 34 +------
scripts/prepare-e2e.sh | 100 +++++++++++++++++++++
test/e2e/e2e.yaml | 59 ++++++++++++
test/e2e/env | 2 +
test/e2e/expected/events.yaml | 42 +++++++++
test/e2e/kind.yaml | 21 +++++
11 files changed, 301 insertions(+), 101 deletions(-)
diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml
index ac62b95..5bda351 100644
--- a/.github/workflows/build-and-test.yaml
+++ b/.github/workflows/build-and-test.yaml
@@ -20,6 +20,13 @@ name: Check
on:
pull_request:
+ paths-ignore:
+ - "**.md"
+ - "**.txt"
+
+concurrency:
+ group: sw-k8s-event-exporter-${{ github.event.pull_request.number || github.ref }}
+ cancel-in-progress: true
jobs:
build-and-test:
@@ -39,14 +46,22 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Test
+ - name: Lint
+ run: make lint
+
+ - name: Unit tests
run: make test
- name: Build
- run: make
+ run: make build
- name: Build Docker Image
- run: make -C build/package/docker
+ run: VERSION=test HUB=apache make -C build/package/docker
+
+ - name: E2E tests
+ uses: apache/skywalking-infra-e2e@main
+ with:
+ e2e-file: $GITHUB_WORKSPACE/test/e2e/e2e.yaml
gateway:
name: Gateway
diff --git a/Makefile b/Makefile
index 73aa083..76859ce 100644
--- a/Makefile
+++ b/Makefile
@@ -18,6 +18,11 @@
include scripts/base.mk
+E2E_CLI_VERSION=${E2E_CLI_VERSION:-'2a33478'}
+
+# Whether to skip docker build in E2E tests
+E2E_SKIP_BUILD ?= 0
+
all: clean lint test build
.PHONY: lint
@@ -88,3 +93,15 @@ release: verify release-src release-bin
shasum -a 512 $(RELEASE_SRC).tgz > $(RELEASE_SRC).tgz.sha512
gpg --batch --yes --armor --detach-sig $(RELEASE_BIN).tgz
shasum -a 512 $(RELEASE_BIN).tgz > $(RELEASE_BIN).tgz.sha512
+
+### Run E2E tests locally.
+.PHONY: e2e
+e2e: check-e2e-cli
+ ifeq ($(E2E_SKIP_BUILD), 0)
+ VERSION=test HUB=apache make -C build/package/docker build
+ endif
+ e2e run -c test/e2e/e2e.yaml
+
+.PHONY: check-e2e-cli
+check-e2e-cli:
+ e2e -h || go install github.com/apache/skywalking-infra-e2e/cmd/e2e@$(E2E_CLI_VERSION)
diff --git a/deployments/base/deployment.yaml b/deployments/base/deployment.yaml
index fab2b61..c8cf5f6 100644
--- a/deployments/base/deployment.yaml
+++ b/deployments/base/deployment.yaml
@@ -34,7 +34,7 @@ spec:
containers:
- name: skywalking-event-exporter
image: skywalking-event-exporter
- imagePullPolicy: Always
+ imagePullPolicy: IfNotPresent
args:
- start
- -v=debug
diff --git a/deployments/base/deployment.yaml b/deployments/test/config/config.yaml
similarity index 50%
copy from deployments/base/deployment.yaml
copy to deployments/test/config/config.yaml
index fab2b61..183e644 100644
--- a/deployments/base/deployment.yaml
+++ b/deployments/test/config/config.yaml
@@ -17,36 +17,22 @@
# under the License.
#
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: skywalking-event-exporter
-spec:
- replicas: 1
- template:
- metadata:
- labels:
- app: skywalking-event-exporter
- version: v1
- spec:
- serviceAccountName: skywalking-event-exporter
- containers:
- - name: skywalking-event-exporter
- image: skywalking-event-exporter
- imagePullPolicy: Always
- args:
- - start
- - -v=debug
- - -c=/data/config.yaml
- volumeMounts:
- - mountPath: /data
- name: config
- volumes:
- - name: config
- configMap:
- name: skywalking-event-exporter-cm
- selector:
- matchLabels:
- app: skywalking-event-exporter
- version: v1
+filters:
+ - namespace: test
+ exporters:
+ - skywalking
+
+exporters:
+ skywalking:
+ template:
+ source:
+ service: "{{ .Service.Name }}"
+ serviceInstance: "{{ .Pod.Name }}"
+ endpoint: ""
+ message: "{{ .Event.Message }}"
+ address: "skywalking-oap.skywalking:11800"
+ enableTLS: false
+ insecureSkipVerify: true
+ trustedCertPath: "/certs/ca.crt"
+ clientCertPath: "/certs/tls.crt"
+ clientKeyPath: "/certs/tls.key"
diff --git a/deployments/base/deployment.yaml b/deployments/test/kustomization.yaml
similarity index 50%
copy from deployments/base/deployment.yaml
copy to deployments/test/kustomization.yaml
index fab2b61..ca25a2d 100644
--- a/deployments/base/deployment.yaml
+++ b/deployments/test/kustomization.yaml
@@ -17,36 +17,22 @@
# under the License.
#
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: skywalking-event-exporter
-spec:
- replicas: 1
- template:
- metadata:
- labels:
- app: skywalking-event-exporter
- version: v1
- spec:
- serviceAccountName: skywalking-event-exporter
- containers:
- - name: skywalking-event-exporter
- image: skywalking-event-exporter
- imagePullPolicy: Always
- args:
- - start
- - -v=debug
- - -c=/data/config.yaml
- volumeMounts:
- - mountPath: /data
- name: config
- volumes:
- - name: config
- configMap:
- name: skywalking-event-exporter-cm
- selector:
- matchLabels:
- app: skywalking-event-exporter
- version: v1
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+resources:
+ - ../base
+ - ./namespace.yaml
+
+namespace: e2e-test
+
+configMapGenerator:
+ - files:
+ - config.yaml=config/config.yaml
+ name: skywalking-event-exporter-cm
+
+generatorOptions:
+ disableNameSuffixHash: true
+images:
+ - name: skywalking-event-exporter
+ newName: apache/skywalking-kubernetes-event-exporter
+ newTag: test
diff --git a/deployments/base/deployment.yaml b/deployments/test/namespace.yaml
similarity index 51%
copy from deployments/base/deployment.yaml
copy to deployments/test/namespace.yaml
index fab2b61..c33d14a 100644
--- a/deployments/base/deployment.yaml
+++ b/deployments/test/namespace.yaml
@@ -18,35 +18,7 @@
#
---
-apiVersion: apps/v1
-kind: Deployment
+apiVersion: v1
+kind: Namespace
metadata:
- name: skywalking-event-exporter
-spec:
- replicas: 1
- template:
- metadata:
- labels:
- app: skywalking-event-exporter
- version: v1
- spec:
- serviceAccountName: skywalking-event-exporter
- containers:
- - name: skywalking-event-exporter
- image: skywalking-event-exporter
- imagePullPolicy: Always
- args:
- - start
- - -v=debug
- - -c=/data/config.yaml
- volumeMounts:
- - mountPath: /data
- name: config
- volumes:
- - name: config
- configMap:
- name: skywalking-event-exporter-cm
- selector:
- matchLabels:
- app: skywalking-event-exporter
- version: v1
+ name: e2e-test
diff --git a/scripts/prepare-e2e.sh b/scripts/prepare-e2e.sh
new file mode 100755
index 0000000..e2454de
--- /dev/null
+++ b/scripts/prepare-e2e.sh
@@ -0,0 +1,100 @@
+#!/usr/bin/env bash
+#
+# 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.
+
+OS=$(go env GOOS)
+ARCH=$(go env GOHOSTARCH)
+
+# prepare base dir
+TMP_DIR=/tmp/sw-event-exporter-e2e
+BIN_DIR=$TMP_DIR/bin
+mkdir -p $TMP_DIR $BIN_DIR && cd $TMP_DIR
+
+export PATH=$BIN_DIR:$PATH
+
+KUBECTL_VERSION=${KUBECTL_VERSION:-'v1.19.1'}
+SWCTL_VERSION=${SWCTL_VERSION:-'0.10.0'}
+HELM_VERSION=${HELM_VERSION:-'helm-v3.0.0'}
+
+prepare_ok=true
+
+function error_check() {
+ if [ $? -ne 0 ]; then
+ echo "[ERROR] Failed to install $1, please check"
+ prepare_ok=false
+ fi
+}
+
+function install_kubectl()
+{
+ if ! command -v kubectl &> /dev/null; then
+ echo "Installing kubectl"
+ mkdir -p $TMP_DIR/kubectl && cd $TMP_DIR/kubectl
+ curl -LO https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${OS}/${ARCH}/kubectl && chmod +x ./kubectl && mv ./kubectl ${BIN_DIR}
+ error_check "kubectl"
+ fi
+}
+
+function install_swctl()
+{
+ if ! command -v swctl &> /dev/null; then
+ echo "Installing swctl"
+ mkdir -p $TMP_DIR/swctl && cd $TMP_DIR/swctl
+ curl -kLo skywalking-cli.tar.gz https://github.com/apache/skywalking-cli/archive/${SWCTL_VERSION}.tar.gz
+ tar -zxf skywalking-cli.tar.gz --strip=1
+ VERSION=${SWCTL_VERSION} make install DESTDIR=${BIN_DIR}
+ error_check "swctl"
+ fi
+}
+
+function install_yq()
+{
+ if ! command -v yq &> /dev/null; then
+ echo "Installing yq"
+ mkdir -p $TMP_DIR/yq && cd $TMP_DIR/yq
+ wget https://github.com/mikefarah/yq/releases/download/v4.11.1/yq_${OS}_${ARCH}.tar.gz -O - |\
+ tar xz && mv yq_${OS}_${ARCH} ${BIN_DIR}/yq
+ error_check "yq"
+ fi
+}
+
+function install_helm() {
+ if ! command -v helm &> /dev/null; then
+ echo "Installing helm"
+ mkdir -p $TMP_DIR/helm && cd $TMP_DIR/helm
+ curl -sSL https://get.helm.sh/${HELM_VERSION}-${OS}-${ARCH}.tar.gz | tar xz -C $BIN_DIR --strip-components=1 ${OS}-${ARCH}/helm
+ mv ${OS}-${ARCH}/helm ${BIN_DIR}/helm
+ error_check "helm"
+ fi
+}
+
+function install_all()
+{
+ install_kubectl
+ install_swctl
+ install_yq
+ install_helm
+
+ if [ "$prepare_ok" = false ]; then
+ echo "Install e2e dependencies failed"
+ exit 1
+ else
+ echo "Install e2e dependencies successfully"
+ exit 0
+ fi
+}
+
+install_all
diff --git a/test/e2e/e2e.yaml b/test/e2e/e2e.yaml
new file mode 100644
index 0000000..212c339
--- /dev/null
+++ b/test/e2e/e2e.yaml
@@ -0,0 +1,59 @@
+# 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
+ init-system-environment: ./env
+ kind:
+ import-images:
+ - apache/skywalking-kubernetes-event-exporter:test
+ expose-ports:
+ - namespace: skywalking
+ resource: service/skywalking-oap
+ port: 12800
+ steps:
+ - name: Install tools
+ command: bash scripts/prepare-e2e.sh
+ - name: Deploy SkyWalking OAP and UI
+ command: |
+ helm repo add skywalking https://apache.jfrog.io/artifactory/skywalking-helm
+ helm install --create-namespace skywalking skywalking/skywalking -n skywalking \
+ --set oap.replicas=1 \
+ --set oap.storageType=h2 \
+ --set oap.image.tag=$OAP_IMAGE_TAG \
+ --set ui.image.tag=$UI_IMAGE_TAG \
+ --set elasticsearch.enabled=false \
+ --set oap.env.JAVA_OPTS='-Dmode='
+ wait:
+ - namespace: skywalking
+ resource: pod
+ for: condition=Ready
+ - name: Deploy k8s event exporter
+ command: kubectl apply -k deployments/test
+ wait:
+ - namespace: e2e-test
+ resource: pod
+ for: condition=Ready
+ timeout: 10m
+
+verify:
+ retry:
+ count: 10
+ interval: 5s
+ cases:
+# - query: /Users/hoshea/swctl --display yaml --base-url=http://localhost:12800/graphql event ls
+ - query: swctl --display yaml --base-url=http://${service_skywalking_oap_host}:${service_skywalking_oap_12800}/graphql event ls
+ expected: expected/events.yaml
diff --git a/test/e2e/env b/test/e2e/env
new file mode 100644
index 0000000..3d952dc
--- /dev/null
+++ b/test/e2e/env
@@ -0,0 +1,2 @@
+OAP_IMAGE_TAG=9.0.0
+UI_IMAGE_TAG=9.0.0
diff --git a/test/e2e/expected/events.yaml b/test/e2e/expected/events.yaml
new file mode 100644
index 0000000..b7ea899
--- /dev/null
+++ b/test/e2e/expected/events.yaml
@@ -0,0 +1,42 @@
+# 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.
+
+events:
+ {{- contains .events }}
+ - uuid: {{ notEmpty .uuid }}
+ source:
+ service: ""
+ serviceinstance: ""
+ endpoint: ""
+ name: Started
+ type: Normal
+ message: Started container skywalking-event-exporter
+ parameters: []
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ - uuid: {{ notEmpty .uuid }}
+ source:
+ service: ""
+ serviceinstance: ""
+ endpoint: ""
+ name: Created
+ type: Normal
+ message: Created container skywalking-event-exporter
+ parameters: []
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ {{- end }}
+total: {{ ge .total 2 }}
+
diff --git a/test/e2e/kind.yaml b/test/e2e/kind.yaml
new file mode 100644
index 0000000..a04057c
--- /dev/null
+++ b/test/e2e/kind.yaml
@@ -0,0 +1,21 @@
+# 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.
+
+kind: Cluster
+apiVersion: kind.x-k8s.io/v1alpha4
+nodes:
+ - role: control-plane
+ - role: worker
+ - role: worker