This is an automated email from the ASF dual-hosted git repository.
hoshea pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/skywalking-kubernetes-event-exporter.git
The following commit(s) were added to refs/heads/main by this push:
new 9644310 Add E2E tests (#15)
9644310 is described below
commit 96443105e1b95ed09b2c4607baea85747a7a3715
Author: Hoshea Jiang <[email protected]>
AuthorDate: Thu Apr 21 16:02:40 2022 +0800
Add E2E tests (#15)
---
.../deployment.yaml => .github/file-filters.yaml | 46 +++-------
.github/workflows/build-and-test.yaml | 27 +++++-
Makefile | 17 ++++
assets/default-config.yaml | 3 +-
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 | 98 ++++++++++++++++++++++
test/e2e/e2e.yaml | 66 +++++++++++++++
test/e2e/env | 17 ++++
test/e2e/expected/events.yaml | 41 +++++++++
test/e2e/kind.yaml | 21 +++++
13 files changed, 338 insertions(+), 138 deletions(-)
diff --git a/deployments/base/deployment.yaml b/.github/file-filters.yaml
similarity index 50%
copy from deployments/base/deployment.yaml
copy to .github/file-filters.yaml
index fab2b61..db6526c 100644
--- a/deployments/base/deployment.yaml
+++ b/.github/file-filters.yaml
@@ -1,4 +1,3 @@
-#
# 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
@@ -15,38 +14,15 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# 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
+src:
+ - '**/*.go'
+ - 'go.mod'
+ - '.golangci.yml'
+ - '.github/*.yml'
+ - '.github/*.yaml'
+ - 'assets/*.yaml'
+ - 'assets/*.yml'
+ - 'deployments/*.yaml'
+ - 'deployments/*.yml'
+ - 'scripts/*.sh'
diff --git a/.github/workflows/build-and-test.yaml
b/.github/workflows/build-and-test.yaml
index ac62b95..913352f 100644
--- a/.github/workflows/build-and-test.yaml
+++ b/.github/workflows/build-and-test.yaml
@@ -21,14 +21,22 @@ name: Check
on:
pull_request:
+concurrency:
+ group: sw-k8s-event-exporter-${{ github.event.pull_request.number ||
github.ref }}
+ cancel-in-progress: true
+
jobs:
build-and-test:
name: Build and Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
+
+ - name: Check for non-document changes
+ uses: getsentry/paths-filter@v2
+ id: changes
with:
- submodules: true
+ filters: .github/file-filters.yaml
- uses: actions/setup-go@v2
with:
@@ -39,14 +47,25 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Test
+ - name: Lint
+ if: steps.changes.outputs.src == 'true'
+ run: make lint
+
+ - name: Unit tests
+ if: steps.changes.outputs.src == 'true'
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
+ if: steps.changes.outputs.src == 'true'
+ 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/assets/default-config.yaml b/assets/default-config.yaml
index d3bd1f6..35ad499 100644
--- a/assets/default-config.yaml
+++ b/assets/default-config.yaml
@@ -17,13 +17,14 @@
#
filters:
+ # Note: for the following filters that support regular expression, please
use "^<string>$" to exact match.
- reason: "" # filter events of the specified reason, regular expression
like "Killing|Killed" is supported.
message: "" # filter events of the specified message, regular
expression like "Pulling container.*" is supported.
minCount: 1 # filter events whose count is >= the specified value.
type: "" # filter events of the specified type, regular expression
like "Normal|Error" is supported.
action: "" # filter events of the specified action, regular expression
is supported.
kind: "Pod|Service" # filter events of the specified kind, regular
expression like "Pod|Service" is supported.
- namespace: "default" # filter events from the specified namespace,
regular expression like "default|bookinfo" is supported, empty means all
namespaces.
+ namespace: "^default$" # filter events from the specified namespace,
regular expression like "default|bookinfo" is supported, empty means all
namespaces.
name: "" # filter events of the specified involved object name,
regular expression like ".*bookinfo.*" is supported.
service: "[^\\s]{1,}" # filter events belonging to services whose name is
not empty.
exporters: # events satisfy this filter can be exported into several
exporters that are defined in the `exporters` section below.
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..5cb09e0 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: ^e2e-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..bba8e7d
--- /dev/null
+++ b/scripts/prepare-e2e.sh
@@ -0,0 +1,98 @@
+#!/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
+
+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..fdcf01c
--- /dev/null
+++ b/test/e2e/e2e.yaml
@@ -0,0 +1,66 @@
+# 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: Set PATH
+ command: export PATH=/tmp/sw-event-exporter-e2e/bin:$PATH
+ - 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
+ - name: Trigger k8s events
+ command: kubectl -n e2e-test run test --image=apache/skywalking:not-exist
+ wait:
+ - namespace: e2e-test
+ resource: pod
+ for: condition=PodScheduled
+ timeout: 10m
+
+verify:
+ retry:
+ count: 20
+ interval: 10s
+ cases:
+ - query: swctl --display yaml
--base-url=http://${service_skywalking_oap_host}:${service_skywalking_oap_12800}/graphql
event ls --type Error
+ expected: expected/events.yaml
diff --git a/test/e2e/env b/test/e2e/env
new file mode 100644
index 0000000..e569006
--- /dev/null
+++ b/test/e2e/env
@@ -0,0 +1,17 @@
+# 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.
+
+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..cc72811
--- /dev/null
+++ b/test/e2e/expected/events.yaml
@@ -0,0 +1,41 @@
+# 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: Failed
+ type: Error
+ message: "Error: ImagePullBackOff"
+ parameters: []
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ - uuid: {{ notEmpty .uuid }}
+ source:
+ service: ""
+ serviceinstance: ""
+ endpoint: ""
+ name: Failed
+ type: Error
+ message: "Error: ErrImagePull"
+ 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