mirror of https://github.com/fluxcd/flux2.git
Refactor e2e tests
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>pull/1721/head
parent
cec8b5336c
commit
d1982e64b2
@ -0,0 +1,57 @@
|
|||||||
|
// +build e2e
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestHelmReleaseFromGit(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
args string
|
||||||
|
goldenFile string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"create source git thrfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.0.0",
|
||||||
|
"testdata/helmrelease/create_source_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"create helmrelease thrfg --source=GitRepository/thrfg --chart=./charts/podinfo",
|
||||||
|
"testdata/helmrelease/create_helmrelease_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"get helmrelease thrfg",
|
||||||
|
"testdata/helmrelease/get_helmrelease_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"reconcile helmrelease thrfg --with-source",
|
||||||
|
"testdata/helmrelease/reconcile_helmrelease_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"suspend helmrelease thrfg",
|
||||||
|
"testdata/helmrelease/suspend_helmrelease_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resume helmrelease thrfg",
|
||||||
|
"testdata/helmrelease/resume_helmrelease_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"delete helmrelease thrfg --silent",
|
||||||
|
"testdata/helmrelease/delete_helmrelease_from_git.golden",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace := "thrfg"
|
||||||
|
del, err := setupTestNamespace(namespace)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer del()
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
cmd := cmdTestCase{
|
||||||
|
args: tc.args + " -n=" + namespace,
|
||||||
|
goldenFile: tc.goldenFile,
|
||||||
|
testClusterMode: ExistingClusterMode,
|
||||||
|
}
|
||||||
|
cmd.runTestCmd(t)
|
||||||
|
}
|
||||||
|
}
|
@ -1,54 +0,0 @@
|
|||||||
// +build e2e
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestInstallNoArgs(t *testing.T) {
|
|
||||||
cmd := cmdTestCase{
|
|
||||||
args: "install",
|
|
||||||
wantError: false,
|
|
||||||
testClusterMode: ExistingClusterMode,
|
|
||||||
goldenFile: "testdata/install/install_no_args.golden",
|
|
||||||
}
|
|
||||||
cmd.runTestCmd(t)
|
|
||||||
|
|
||||||
testUninstallSilent(t)
|
|
||||||
time.Sleep(30 * time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInstallExtraComponents(t *testing.T) {
|
|
||||||
cmd := cmdTestCase{
|
|
||||||
args: "install --components-extra=image-reflector-controller,image-automation-controller",
|
|
||||||
wantError: false,
|
|
||||||
testClusterMode: ExistingClusterMode,
|
|
||||||
goldenFile: "testdata/install/install_extra_components.golden",
|
|
||||||
}
|
|
||||||
cmd.runTestCmd(t)
|
|
||||||
|
|
||||||
testUninstallSilentForExtraComponents(t)
|
|
||||||
time.Sleep(30 * time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testUninstallSilent(t *testing.T) {
|
|
||||||
cmd := cmdTestCase{
|
|
||||||
args: "uninstall -s",
|
|
||||||
wantError: false,
|
|
||||||
testClusterMode: ExistingClusterMode,
|
|
||||||
goldenFile: "testdata/uninstall/uninstall.golden",
|
|
||||||
}
|
|
||||||
cmd.runTestCmd(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testUninstallSilentForExtraComponents(t *testing.T) {
|
|
||||||
cmd := cmdTestCase{
|
|
||||||
args: "uninstall -s",
|
|
||||||
wantError: false,
|
|
||||||
testClusterMode: ExistingClusterMode,
|
|
||||||
goldenFile: "testdata/uninstall/uninstall_extra_components.golden",
|
|
||||||
}
|
|
||||||
cmd.runTestCmd(t)
|
|
||||||
}
|
|
@ -0,0 +1,57 @@
|
|||||||
|
// +build e2e
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestKustomizationFromGit(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
args string
|
||||||
|
goldenFile string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"create source git tkfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.0.0",
|
||||||
|
"testdata/kustomization/create_source_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"create kustomization tkfg --source=tkfg --path=./deploy/overlays/dev --prune=true --interval=5m --validation=client --health-check=Deployment/frontend.dev --health-check=Deployment/backend.dev --health-check-timeout=3m",
|
||||||
|
"testdata/kustomization/create_kustomization_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"get kustomization tkfg",
|
||||||
|
"testdata/kustomization/get_kustomization_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"reconcile kustomization tkfg --with-source",
|
||||||
|
"testdata/kustomization/reconcile_kustomization_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"suspend kustomization tkfg",
|
||||||
|
"testdata/kustomization/suspend_kustomization_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resume kustomization tkfg",
|
||||||
|
"testdata/kustomization/resume_kustomization_from_git.golden",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"delete kustomization tkfg --silent",
|
||||||
|
"testdata/kustomization/delete_kustomization_from_git.golden",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace := "tkfg"
|
||||||
|
del, err := setupTestNamespace(namespace)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer del()
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
cmd := cmdTestCase{
|
||||||
|
args: tc.args + " -n=" + namespace,
|
||||||
|
goldenFile: tc.goldenFile,
|
||||||
|
testClusterMode: ExistingClusterMode,
|
||||||
|
}
|
||||||
|
cmd.runTestCmd(t)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
// +build e2e
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/fluxcd/flux2/internal/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
// Ensure tests print consistent timestamps regardless of timezone
|
||||||
|
os.Setenv("TZ", "UTC")
|
||||||
|
|
||||||
|
// Install Flux
|
||||||
|
km, err := NewTestEnvKubeManager(ExistingClusterMode)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Errorf("error creating kube manager: '%w'", err))
|
||||||
|
}
|
||||||
|
rootCtx.kubeManager = km
|
||||||
|
output, err := executeCommand("install --components-extra=image-reflector-controller,image-automation-controller")
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Errorf("install falied: %s error:'%w'", output, err))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run tests
|
||||||
|
code := m.Run()
|
||||||
|
|
||||||
|
// Uninstall Flux
|
||||||
|
output, err = executeCommand("uninstall -s --keep-namespace")
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Errorf("uninstall falied: %s error:'%w'", output, err))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete namespace and wait for finalisation
|
||||||
|
kubectlArgs := []string{"delete", "namespace", "flux-system"}
|
||||||
|
_, err = utils.ExecKubectlCommand(context.TODO(), utils.ModeStderrOS, rootArgs.kubeconfig, rootArgs.kubecontext, kubectlArgs...)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Errorf("delete namespace error:'%w'", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Exit(code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupTestNamespace(namespace string) (func(), error) {
|
||||||
|
kubectlArgs := []string{"create", "namespace", namespace}
|
||||||
|
_, err := utils.ExecKubectlCommand(context.TODO(), utils.ModeStderrOS, rootArgs.kubeconfig, rootArgs.kubecontext, kubectlArgs...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return func() {
|
||||||
|
kubectlArgs := []string{"delete", "namespace", namespace}
|
||||||
|
utils.ExecKubectlCommand(context.TODO(), utils.ModeCapture, rootArgs.kubeconfig, rootArgs.kubecontext, kubectlArgs...)
|
||||||
|
}, nil
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
// +build unit
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
// Ensure tests print consistent timestamps regardless of timezone
|
||||||
|
os.Setenv("TZ", "UTC")
|
||||||
|
os.Exit(m.Run())
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
✚ generating HelmRelease
|
||||||
|
► applying HelmRelease
|
||||||
|
✔ HelmRelease created
|
||||||
|
◎ waiting for HelmRelease reconciliation
|
||||||
|
✔ HelmRelease thrfg is ready
|
||||||
|
✔ applied revision 6.0.0
|
@ -0,0 +1,6 @@
|
|||||||
|
✚ generating GitRepository source
|
||||||
|
► applying GitRepository source
|
||||||
|
✔ GitRepository source created
|
||||||
|
◎ waiting for GitRepository source reconciliation
|
||||||
|
✔ GitRepository source reconciliation completed
|
||||||
|
✔ fetched revision: 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
@ -0,0 +1,2 @@
|
|||||||
|
► deleting helmreleases thrfg in thrfg namespace
|
||||||
|
✔ helmreleases deleted
|
@ -0,0 +1,2 @@
|
|||||||
|
NAME READY MESSAGE REVISION SUSPENDED
|
||||||
|
thrfg True Release reconciliation succeeded 6.0.0 False
|
@ -0,0 +1,10 @@
|
|||||||
|
► annotating GitRepository thrfg in thrfg namespace
|
||||||
|
✔ GitRepository annotated
|
||||||
|
◎ waiting for GitRepository reconciliation
|
||||||
|
✔ GitRepository reconciliation completed
|
||||||
|
✔ fetched revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
||||||
|
► annotating HelmRelease thrfg in thrfg namespace
|
||||||
|
✔ HelmRelease annotated
|
||||||
|
◎ waiting for HelmRelease reconciliation
|
||||||
|
✔ HelmRelease reconciliation completed
|
||||||
|
✔ applied revision 6.0.0
|
@ -0,0 +1,5 @@
|
|||||||
|
► resuming helmreleases thrfg in thrfg namespace
|
||||||
|
✔ helmreleases resumed
|
||||||
|
◎ waiting for HelmRelease reconciliation
|
||||||
|
✔ HelmRelease reconciliation completed
|
||||||
|
✔ applied revision 6.0.0
|
@ -0,0 +1,2 @@
|
|||||||
|
► suspending helmreleases thrfg in thrfg namespace
|
||||||
|
✔ helmreleases suspended
|
@ -1,11 +0,0 @@
|
|||||||
✚ generating manifests
|
|
||||||
✔ manifests build completed
|
|
||||||
► installing components in flux-system namespace
|
|
||||||
◎ verifying installation
|
|
||||||
✔ helm-controller: deployment ready
|
|
||||||
✔ image-automation-controller: deployment ready
|
|
||||||
✔ image-reflector-controller: deployment ready
|
|
||||||
✔ kustomize-controller: deployment ready
|
|
||||||
✔ notification-controller: deployment ready
|
|
||||||
✔ source-controller: deployment ready
|
|
||||||
✔ install finished
|
|
@ -1,9 +0,0 @@
|
|||||||
✚ generating manifests
|
|
||||||
✔ manifests build completed
|
|
||||||
► installing components in flux-system namespace
|
|
||||||
◎ verifying installation
|
|
||||||
✔ helm-controller: deployment ready
|
|
||||||
✔ kustomize-controller: deployment ready
|
|
||||||
✔ notification-controller: deployment ready
|
|
||||||
✔ source-controller: deployment ready
|
|
||||||
✔ install finished
|
|
@ -0,0 +1,6 @@
|
|||||||
|
✚ generating Kustomization
|
||||||
|
► applying Kustomization
|
||||||
|
✔ Kustomization created
|
||||||
|
◎ waiting for Kustomization reconciliation
|
||||||
|
✔ Kustomization tkfg is ready
|
||||||
|
✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
@ -0,0 +1,6 @@
|
|||||||
|
✚ generating GitRepository source
|
||||||
|
► applying GitRepository source
|
||||||
|
✔ GitRepository source created
|
||||||
|
◎ waiting for GitRepository source reconciliation
|
||||||
|
✔ GitRepository source reconciliation completed
|
||||||
|
✔ fetched revision: 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
@ -0,0 +1,2 @@
|
|||||||
|
► deleting kustomizations tkfg in tkfg namespace
|
||||||
|
✔ kustomizations deleted
|
@ -0,0 +1,2 @@
|
|||||||
|
NAME READY MESSAGE REVISION SUSPENDED
|
||||||
|
tkfg True Applied revision: 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 False
|
@ -0,0 +1,10 @@
|
|||||||
|
► annotating GitRepository tkfg in tkfg namespace
|
||||||
|
✔ GitRepository annotated
|
||||||
|
◎ waiting for GitRepository reconciliation
|
||||||
|
✔ GitRepository reconciliation completed
|
||||||
|
✔ fetched revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
||||||
|
► annotating Kustomization tkfg in tkfg namespace
|
||||||
|
✔ Kustomization annotated
|
||||||
|
◎ waiting for Kustomization reconciliation
|
||||||
|
✔ Kustomization reconciliation completed
|
||||||
|
✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
@ -0,0 +1,5 @@
|
|||||||
|
► resuming kustomizations tkfg in tkfg namespace
|
||||||
|
✔ kustomizations resumed
|
||||||
|
◎ waiting for Kustomization reconciliation
|
||||||
|
✔ Kustomization reconciliation completed
|
||||||
|
✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951
|
@ -0,0 +1,2 @@
|
|||||||
|
► suspending kustomizations tkfg in tkfg namespace
|
||||||
|
✔ kustomizations suspended
|
@ -1,31 +0,0 @@
|
|||||||
► deleting components in flux-system namespace
|
|
||||||
✔ Deployment/flux-system/helm-controller deleted
|
|
||||||
✔ Deployment/flux-system/kustomize-controller deleted
|
|
||||||
✔ Deployment/flux-system/notification-controller deleted
|
|
||||||
✔ Deployment/flux-system/source-controller deleted
|
|
||||||
✔ Service/flux-system/notification-controller deleted
|
|
||||||
✔ Service/flux-system/source-controller deleted
|
|
||||||
✔ Service/flux-system/webhook-receiver deleted
|
|
||||||
✔ NetworkPolicy/flux-system/allow-egress deleted
|
|
||||||
✔ NetworkPolicy/flux-system/allow-scraping deleted
|
|
||||||
✔ NetworkPolicy/flux-system/allow-webhooks deleted
|
|
||||||
✔ ServiceAccount/flux-system/helm-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/kustomize-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/notification-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/source-controller deleted
|
|
||||||
✔ ClusterRole/crd-controller-flux-system deleted
|
|
||||||
✔ ClusterRoleBinding/cluster-reconciler-flux-system deleted
|
|
||||||
✔ ClusterRoleBinding/crd-controller-flux-system deleted
|
|
||||||
► deleting toolkit.fluxcd.io finalizers in all namespaces
|
|
||||||
► deleting toolkit.fluxcd.io custom resource definitions
|
|
||||||
✔ CustomResourceDefinition/alerts.notification.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/buckets.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/gitrepositories.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/helmcharts.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/helmreleases.helm.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/helmrepositories.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/kustomizations.kustomize.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/providers.notification.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/receivers.notification.toolkit.fluxcd.io deleted
|
|
||||||
✔ Namespace/flux-system deleted
|
|
||||||
✔ uninstall finished
|
|
@ -1,38 +0,0 @@
|
|||||||
► deleting components in flux-system namespace
|
|
||||||
✔ Deployment/flux-system/helm-controller deleted
|
|
||||||
✔ Deployment/flux-system/image-automation-controller deleted
|
|
||||||
✔ Deployment/flux-system/image-reflector-controller deleted
|
|
||||||
✔ Deployment/flux-system/kustomize-controller deleted
|
|
||||||
✔ Deployment/flux-system/notification-controller deleted
|
|
||||||
✔ Deployment/flux-system/source-controller deleted
|
|
||||||
✔ Service/flux-system/notification-controller deleted
|
|
||||||
✔ Service/flux-system/source-controller deleted
|
|
||||||
✔ Service/flux-system/webhook-receiver deleted
|
|
||||||
✔ NetworkPolicy/flux-system/allow-egress deleted
|
|
||||||
✔ NetworkPolicy/flux-system/allow-scraping deleted
|
|
||||||
✔ NetworkPolicy/flux-system/allow-webhooks deleted
|
|
||||||
✔ ServiceAccount/flux-system/helm-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/image-automation-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/image-reflector-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/kustomize-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/notification-controller deleted
|
|
||||||
✔ ServiceAccount/flux-system/source-controller deleted
|
|
||||||
✔ ClusterRole/crd-controller-flux-system deleted
|
|
||||||
✔ ClusterRoleBinding/cluster-reconciler-flux-system deleted
|
|
||||||
✔ ClusterRoleBinding/crd-controller-flux-system deleted
|
|
||||||
► deleting toolkit.fluxcd.io finalizers in all namespaces
|
|
||||||
► deleting toolkit.fluxcd.io custom resource definitions
|
|
||||||
✔ CustomResourceDefinition/alerts.notification.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/buckets.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/gitrepositories.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/helmcharts.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/helmreleases.helm.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/helmrepositories.source.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/imagepolicies.image.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/imagerepositories.image.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/imageupdateautomations.image.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/kustomizations.kustomize.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/providers.notification.toolkit.fluxcd.io deleted
|
|
||||||
✔ CustomResourceDefinition/receivers.notification.toolkit.fluxcd.io deleted
|
|
||||||
✔ Namespace/flux-system deleted
|
|
||||||
✔ uninstall finished
|
|
@ -0,0 +1,15 @@
|
|||||||
|
// +build unit
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestVersion(t *testing.T) {
|
||||||
|
cmd := cmdTestCase{
|
||||||
|
args: "--version",
|
||||||
|
goldenValue: "flux version 0.0.0-dev.0\n",
|
||||||
|
}
|
||||||
|
cmd.runTestCmd(t)
|
||||||
|
}
|
Loading…
Reference in New Issue