223 lines
7.4 KiB
Go
223 lines
7.4 KiB
Go
//go:build e2e
|
|
// +build e2e
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
. "github.com/kedacore/http-add-on/tests/helper"
|
|
)
|
|
|
|
var (
|
|
OtlpConfig = `mode: deployment
|
|
image:
|
|
repository: "otel/opentelemetry-collector-contrib"
|
|
config:
|
|
exporters:
|
|
logging:
|
|
loglevel: debug
|
|
prometheus:
|
|
endpoint: 0.0.0.0:8889
|
|
receivers:
|
|
jaeger: null
|
|
prometheus: null
|
|
zipkin: null
|
|
service:
|
|
pipelines:
|
|
traces: null
|
|
metrics:
|
|
receivers:
|
|
- otlp
|
|
exporters:
|
|
- logging
|
|
- prometheus
|
|
logs: null
|
|
`
|
|
OtlpServicePatch = `apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: opentelemetry-collector
|
|
spec:
|
|
selector:
|
|
app.kubernetes.io/name: opentelemetry-collector
|
|
ports:
|
|
- protocol: TCP
|
|
port: 8889
|
|
targetPort: 8889
|
|
name: prometheus
|
|
type: ClusterIP
|
|
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: opentelemetry-collector
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: opentelemetry-collector
|
|
ports:
|
|
- containerPort: 8889
|
|
name: prometheus
|
|
protocol: TCP
|
|
`
|
|
)
|
|
|
|
func TestVerifyCommands(t *testing.T) {
|
|
commands := []string{"kubectl"}
|
|
for _, cmd := range commands {
|
|
_, err := exec.LookPath(cmd)
|
|
require.NoErrorf(t, err, "%s is required for setup - %s", cmd, err)
|
|
}
|
|
}
|
|
|
|
func TestKubernetesConnection(t *testing.T) {
|
|
KubeClient = GetKubernetesClient(t)
|
|
}
|
|
|
|
func TestKubernetesVersion(t *testing.T) {
|
|
out, err := ExecuteCommand("kubectl version")
|
|
require.NoErrorf(t, err, "error getting kubernetes version - %s", err)
|
|
|
|
t.Logf("kubernetes version: %s", string(out))
|
|
}
|
|
|
|
func TestSetupHelm(t *testing.T) {
|
|
_, err := exec.LookPath("helm")
|
|
if err == nil {
|
|
t.Skip("helm is already installed. skipping setup.")
|
|
}
|
|
|
|
_, err = ExecuteCommand("curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3")
|
|
require.NoErrorf(t, err, "cannot download helm installation shell script - %s", err)
|
|
|
|
_, err = ExecuteCommand("chmod 700 get_helm.sh")
|
|
require.NoErrorf(t, err, "cannot change permissions for helm installation script - %s", err)
|
|
|
|
_, err = ExecuteCommand("./get_helm.sh")
|
|
require.NoErrorf(t, err, "cannot download helm - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm version")
|
|
require.NoErrorf(t, err, "cannot get helm version - %s", err)
|
|
}
|
|
|
|
func TestCreateKEDANamespace(t *testing.T) {
|
|
KubeClient = GetKubernetesClient(t)
|
|
CreateNamespace(t, KubeClient, KEDANamespace)
|
|
}
|
|
|
|
func TestSetupArgoRollouts(t *testing.T) {
|
|
KubeClient = GetKubernetesClient(t)
|
|
CreateNamespace(t, KubeClient, ArgoRolloutsNamespace)
|
|
_, err := ExecuteCommand("helm version")
|
|
require.NoErrorf(t, err, "helm is not installed - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo add argo https://argoproj.github.io/argo-helm")
|
|
require.NoErrorf(t, err, "cannot add argo helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo update argo")
|
|
require.NoErrorf(t, err, "cannot update argo helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand(fmt.Sprintf("helm upgrade --install %s argo/argo-rollouts --namespace %s --wait",
|
|
ArgoRolloutsName,
|
|
ArgoRolloutsNamespace))
|
|
require.NoErrorf(t, err, "cannot install argo-rollouts - %s", err)
|
|
}
|
|
|
|
func TestSetupIngress(t *testing.T) {
|
|
KubeClient = GetKubernetesClient(t)
|
|
CreateNamespace(t, KubeClient, IngressNamespace)
|
|
_, err := ExecuteCommand("helm version")
|
|
require.NoErrorf(t, err, "helm is not installed - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx")
|
|
require.NoErrorf(t, err, "cannot add ingress-nginx helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo update ingress-nginx")
|
|
require.NoErrorf(t, err, "cannot update ingress-nginx helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand(fmt.Sprintf("helm upgrade --install %s ingress-nginx/ingress-nginx --set fullnameOverride=%s --set controller.service.type=ClusterIP --namespace %s --wait",
|
|
IngressReleaseName, IngressReleaseName, IngressNamespace))
|
|
require.NoErrorf(t, err, "cannot install ingress - %s", err)
|
|
}
|
|
|
|
func TestSetupKEDA(t *testing.T) {
|
|
_, err := ExecuteCommand("helm version")
|
|
require.NoErrorf(t, err, "helm is not installed - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo add kedacore https://kedacore.github.io/charts")
|
|
require.NoErrorf(t, err, "cannot add kedacore helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo update kedacore")
|
|
require.NoErrorf(t, err, "cannot update kedacore helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand(fmt.Sprintf("helm upgrade --install keda kedacore/keda --namespace %s --set extraArgs.keda.kube-api-qps=200 --set extraArgs.keda.kube-api-burst=300",
|
|
KEDANamespace))
|
|
require.NoErrorf(t, err, "cannot install KEDA - %s", err)
|
|
|
|
KubeClient = GetKubernetesClient(t)
|
|
assert.True(t, WaitForDeploymentReplicaReadyCount(t, KubeClient, "keda-operator", KEDANamespace, 1, 30, 6),
|
|
"replica count should be 1 after 3 minutes")
|
|
assert.True(t, WaitForDeploymentReplicaReadyCount(t, KubeClient, "keda-operator-metrics-apiserver", KEDANamespace, 1, 30, 6),
|
|
"replica count should be 1 after 3 minutes")
|
|
assert.True(t, WaitForDeploymentReplicaReadyCount(t, KubeClient, "keda-admission-webhooks", KEDANamespace, 1, 30, 6),
|
|
"replica count should be 1 after 3 minutes")
|
|
}
|
|
|
|
func TestSetupTLSConfiguration(t *testing.T) {
|
|
out, err := ExecuteCommandWithDir("make test-certs", "../..")
|
|
require.NoErrorf(t, err, "error generating test certs - %s", err)
|
|
t.Log(string(out))
|
|
t.Log("test certificates successfully generated")
|
|
|
|
_, err = ExecuteCommand("kubectl -n keda create secret tls keda-tls --cert ../../certs/tls.crt --key ../../certs/tls.key")
|
|
require.NoErrorf(t, err, "could not create tls cert secret in keda namespace - %s", err)
|
|
}
|
|
|
|
func TestDeployKEDAHttpAddOn(t *testing.T) {
|
|
out, err := ExecuteCommandWithDir("make deploy", "../..")
|
|
require.NoErrorf(t, err, "error deploying KEDA Http Add-on - %s", err)
|
|
|
|
t.Log(string(out))
|
|
t.Log("KEDA Http Add-on deployed successfully using 'make deploy' command")
|
|
}
|
|
|
|
func TestSetupOpentelemetryComponents(t *testing.T) {
|
|
OpentelemetryNamespace := "open-telemetry-system"
|
|
otlpTempFileName := "otlp.yml"
|
|
otlpServiceTempFileName := "otlpServicePatch.yml"
|
|
defer os.Remove(otlpTempFileName)
|
|
defer os.Remove(otlpServiceTempFileName)
|
|
err := os.WriteFile(otlpTempFileName, []byte(OtlpConfig), 0755)
|
|
assert.NoErrorf(t, err, "cannot create otlp config file - %s", err)
|
|
|
|
err = os.WriteFile(otlpServiceTempFileName, []byte(OtlpServicePatch), 0755)
|
|
assert.NoErrorf(t, err, "cannot create otlp service patch file - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm version")
|
|
require.NoErrorf(t, err, "helm is not installed - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts")
|
|
require.NoErrorf(t, err, "cannot add open-telemetry helm repo - %s", err)
|
|
|
|
_, err = ExecuteCommand("helm repo update open-telemetry")
|
|
require.NoErrorf(t, err, "cannot update open-telemetry helm repo - %s", err)
|
|
|
|
KubeClient = GetKubernetesClient(t)
|
|
CreateNamespace(t, KubeClient, OpentelemetryNamespace)
|
|
|
|
_, err = ExecuteCommand(fmt.Sprintf("helm upgrade --install opentelemetry-collector open-telemetry/opentelemetry-collector -f %s --namespace %s", otlpTempFileName, OpentelemetryNamespace))
|
|
require.NoErrorf(t, err, "cannot install opentelemetry - %s", err)
|
|
|
|
_, err = ExecuteCommand(fmt.Sprintf("kubectl apply -f %s -n %s", otlpServiceTempFileName, OpentelemetryNamespace))
|
|
require.NoErrorf(t, err, "cannot update opentelemetry ports - %s", err)
|
|
}
|