adapt remaining tests to kubetest

This commit is contained in:
David Arnold 2021-05-13 22:58:11 -04:00
parent 8a20c93b21
commit 7b057d8c0f
No known key found for this signature in database
GPG key ID: 6D6A936E69C59D08
5 changed files with 53 additions and 112 deletions

View file

@ -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
'';
};
}

View file

@ -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";

View file

@ -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
'';
};

View file

@ -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";
};
};
}

View file

@ -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";
};
}