mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 08:00:06 +01:00
adapt remaining tests to kubetest
This commit is contained in:
parent
8a20c93b21
commit
7b057d8c0f
5 changed files with 53 additions and 112 deletions
|
|
@ -8,13 +8,23 @@ with lib;
|
||||||
test = {
|
test = {
|
||||||
name = "nginx-deployment";
|
name = "nginx-deployment";
|
||||||
description = "Test testing nginx deployment";
|
description = "Test testing nginx deployment";
|
||||||
testScript = ''
|
script = ''
|
||||||
kube.wait_until_succeeds("docker load --input='${config.docker.images.nginx.image}'")
|
@pytest.mark.applymanifest('${config.kubernetes.resultYAML}')
|
||||||
kube.wait_until_succeeds("kubectl apply -f ${config.kubernetes.result}")
|
def test_nginx_deployment(kube):
|
||||||
|
"""Tests whether nginx deployment gets successfully created"""
|
||||||
|
|
||||||
kube.succeed("kubectl get deployment | grep -i nginx")
|
kube.wait_for_registered(timeout=30)
|
||||||
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")
|
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
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,13 @@ let
|
||||||
};
|
};
|
||||||
in
|
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 = {
|
test = {
|
||||||
name = "helm-simple";
|
name = "helm-simple";
|
||||||
|
|
@ -54,19 +60,21 @@ in
|
||||||
assertion =
|
assertion =
|
||||||
appsv1.StatefulSet.app-psql-postgresql-primary.metadata.namespace == "test";
|
appsv1.StatefulSet.app-psql-postgresql-primary.metadata.namespace == "test";
|
||||||
}];
|
}];
|
||||||
testScript = ''
|
script = ''
|
||||||
kube.wait_until_succeeds("docker load < ${postgresql}")
|
@pytest.mark.applymanifest('${config.kubernetes.resultYAML}')
|
||||||
kube.wait_until_succeeds("docker load < ${postgresqlExporter}")
|
def test_helm_deployment(kube):
|
||||||
kube.wait_until_succeeds("docker load < ${bitnamiShell}")
|
"""Tests whether helm deployment gets successfully created"""
|
||||||
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")
|
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 = {
|
kubernetes.helm.instances.app-psql = {
|
||||||
namespace = "test";
|
namespace = "some-overridden-by-kubetest";
|
||||||
chart = helm.fetch {
|
chart = helm.fetch {
|
||||||
repo = "https://charts.bitnami.com/bitnami";
|
repo = "https://charts.bitnami.com/bitnami";
|
||||||
chart = "postgresql";
|
chart = "postgresql";
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,25 @@ in
|
||||||
message = "Custom resource should have correct version set";
|
message = "Custom resource should have correct version set";
|
||||||
assertion = latestCrontab.apiVersion == "stable.example.com/v2";
|
assertion = latestCrontab.apiVersion == "stable.example.com/v2";
|
||||||
}];
|
}];
|
||||||
testScript = ''
|
script = ''
|
||||||
kube.wait_until_succeeds("kubectl apply -f ${config.kubernetes.result}")
|
@pytest.mark.applymanifest('${config.kubernetes.resultYAML}')
|
||||||
kube.succeed("kubectl get crds | grep -i crontabs")
|
def test_testing_module(kube):
|
||||||
kube.succeed("kubectl get crontabs | grep -i versioned")
|
"""Tests whether deployment gets successfully created"""
|
||||||
kube.succeed("kubectl get crontabs | grep -i latest")
|
|
||||||
|
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
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -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";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue