From 7b057d8c0f2a924797bb759b784a52b70d0a8ff0 Mon Sep 17 00:00:00 2001 From: David Arnold Date: Thu, 13 May 2021 22:58:11 -0400 Subject: [PATCH] adapt remaining tests to kubetest --- examples/nginx-deployment/test.nix | 22 +++++-- tests/helm/simple.nix | 28 ++++++--- tests/k8s/crd.nix | 24 +++++-- tests/metacontroller/compositecontroller.nix | 25 -------- tests/module.nix | 66 -------------------- 5 files changed, 53 insertions(+), 112 deletions(-) delete mode 100644 tests/metacontroller/compositecontroller.nix delete mode 100644 tests/module.nix diff --git a/examples/nginx-deployment/test.nix b/examples/nginx-deployment/test.nix index 63967bc..8608ba8 100644 --- a/examples/nginx-deployment/test.nix +++ b/examples/nginx-deployment/test.nix @@ -8,13 +8,23 @@ with lib; test = { name = "nginx-deployment"; description = "Test testing nginx deployment"; - testScript = '' - kube.wait_until_succeeds("docker load --input='${config.docker.images.nginx.image}'") - kube.wait_until_succeeds("kubectl apply -f ${config.kubernetes.result}") + script = '' + @pytest.mark.applymanifest('${config.kubernetes.resultYAML}') + def test_nginx_deployment(kube): + """Tests whether nginx deployment gets successfully created""" - kube.succeed("kubectl get deployment | grep -i nginx") - kube.wait_until_succeeds("kubectl get deployment -o go-template nginx --template={{.status.readyReplicas}} | grep 10") - kube.wait_until_succeeds({pkgs.curl}/bin/curl http://nginx.default.svc.cluster.local | grep -i hello") + kube.wait_for_registered(timeout=30) + + deployments = kube.get_deployments() + nginx_deploy = deployments.get('nginx') + assert nginx_deploy is not None + + status = nginx_deploy.status() + assert status.readyReplicas == 10 + + # TODO: implement those kind of checks from the host machine into the cluster + # via port forwarding, prepare all runtimes accordingly + # ${pkgs.curl}/bin/curl http://nginx.default.svc.cluster.local | grep -i hello ''; }; } diff --git a/tests/helm/simple.nix b/tests/helm/simple.nix index c363105..1ccdd8d 100644 --- a/tests/helm/simple.nix +++ b/tests/helm/simple.nix @@ -32,7 +32,13 @@ let }; in { - imports = [ kubenix.modules.test kubenix.modules.helm kubenix.modules.k8s ]; + imports = [ kubenix.modules.test kubenix.modules.helm kubenix.modules.k8s kubenix.modules.docker ]; + + docker.images = { + postgresql.image = inherit postgresql; + postgresqlExporter.image = inherit postgresqlExporter; + bitnamiShell.image = inherit bitnamiShell; + }; test = { name = "helm-simple"; @@ -54,19 +60,21 @@ in assertion = appsv1.StatefulSet.app-psql-postgresql-primary.metadata.namespace == "test"; }]; - testScript = '' - kube.wait_until_succeeds("docker load < ${postgresql}") - kube.wait_until_succeeds("docker load < ${postgresqlExporter}") - kube.wait_until_succeeds("docker load < ${bitnamiShell}") - kube.wait_until_succeeds("kubectl apply -f ${config.kubernetes.result}") - kube.wait_until_succeeds("PGPASSWORD=postgres ${pkgs.postgresql}/bin/psql -h app-psql-postgresql.test.svc.cluster.local -U postgres -l") + script = '' + @pytest.mark.applymanifest('${config.kubernetes.resultYAML}') + def test_helm_deployment(kube): + """Tests whether helm deployment gets successfully created""" + + kube.wait_for_registered(timeout=30) + + # TODO: implement those kind of checks from the host machine into the cluster + # via port forwarding, prepare all runtimes accordingly + # PGPASSWORD=postgres ${pkgs.postgresql}/bin/psql -h app-psql-postgresql.test.svc.cluster.local -U postgres -l ''; }; - kubernetes.resources.namespaces.test = { }; - kubernetes.helm.instances.app-psql = { - namespace = "test"; + namespace = "some-overridden-by-kubetest"; chart = helm.fetch { repo = "https://charts.bitnami.com/bitnami"; chart = "postgresql"; diff --git a/tests/k8s/crd.nix b/tests/k8s/crd.nix index 60b274d..b7b7cd1 100644 --- a/tests/k8s/crd.nix +++ b/tests/k8s/crd.nix @@ -15,11 +15,25 @@ in message = "Custom resource should have correct version set"; assertion = latestCrontab.apiVersion == "stable.example.com/v2"; }]; - testScript = '' - kube.wait_until_succeeds("kubectl apply -f ${config.kubernetes.result}") - kube.succeed("kubectl get crds | grep -i crontabs") - kube.succeed("kubectl get crontabs | grep -i versioned") - kube.succeed("kubectl get crontabs | grep -i latest") + script = '' + @pytest.mark.applymanifest('${config.kubernetes.resultYAML}') + def test_testing_module(kube): + """Tests whether deployment gets successfully created""" + + kube.wait_for_registered(timeout=30) + + kube.get_crds() + crds = kube.get_crds() + crontabs_crd = crds.get('crontabs') + assert contrabs_crd is not None + + # TODO: verify + # kubectl get crontabs | grep -i versioned + crontabs_crd_versioned = crontabs_crd.get('versioned') + assert crontabs_crd_versioned is not None + # kubectl get crontabs | grep -i latest + crontabs_crd_latest = crontabs_crd.get('latest') + assert crontabs_crd_latest is not None ''; }; diff --git a/tests/metacontroller/compositecontroller.nix b/tests/metacontroller/compositecontroller.nix deleted file mode 100644 index f45c52d..0000000 --- a/tests/metacontroller/compositecontroller.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, kubenix, ... }: - -{ - imports = [ kubenix.modules.test kubenix.modules.metacontroller ]; - - test = { - name = "metacontroller-controllers"; - description = "Testing metacontroller custom resources"; - }; - - kubernetes.api.compositecontrollers.test = { - spec = { - generateSelector = true; - parentResource = { - apiVersion = "ctl.enisoc.com/v1"; - resource = "things"; - }; - childResources = [{ - apiVersion = "v1"; - resource = "pods"; - }]; - hooks.sync.webhook.url = "http://thing-controller.metacontroller/sync"; - }; - }; -} diff --git a/tests/module.nix b/tests/module.nix deleted file mode 100644 index 19cbb52..0000000 --- a/tests/module.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ name, config, lib, kubenix, images, ... }: - -with lib; -let - cfg = config.submodules.instances.test.config; - deployment = cfg.kubernetes.api.deployments.nginx; -in -{ - imports = [ kubenix.modules.test kubenix.module ]; - - test = { - name = "module"; - description = "Test testing kubenix module"; - assertions = [{ - message = "Namespace not propagated"; - assertion = deployment.metadata.namespace == "test"; - } - { - message = "Version not propagated"; - assertion = cfg.kubernetes.version == config.kubernetes.version; - } - { - message = "docker image should be added to exported images"; - assertion = (head config.docker.export) == images.nginx; - }]; - testScript = '' - kube.wait_until_succeeds("docker load < ${images.nginx}") - kube.wait_until_succeeds("kubectl apply -f ${config.kubernetes.result}") - - kube.succeed("kubectl get deployment -n test | grep -i test-nginx") - kube.wait_until_succeeds("kubectl get deployment -n test -o go-template test-nginx --template={{.status.readyReplicas}} | grep 1") - ''; - }; - - submodules.imports = [{ - module = { name, config, ... }: { - submodule.name = "nginx"; - kubernetes.api.deployments.nginx = { - metadata = { - name = "${name}-nginx"; - labels.app = name; - }; - spec = { - replicas = 1; - selector.matchLabels.app = "nginx"; - template.metadata.labels.app = "nginx"; - template.spec = { - containers.nginx = { - image = config.docker.images.nginx.path; - imagePullPolicy = "Never"; - }; - }; - }; - }; - - docker.images.nginx.image = images.nginx; - }; - }]; - - kubernetes.api.namespaces.test = { }; - - submodules.instances.test = { - submodule = "nginx"; - namespace = "test"; - }; -}