diff --git a/flake.nix b/flake.nix index 71e9e48..4b235cb 100644 --- a/flake.nix +++ b/flake.nix @@ -40,7 +40,8 @@ }; }; - integratedTests = pkgs.callPackage ./vm.nix { inherit self; }; + test0 = pkgs.callPackage ./nix/test0.nix { inherit self; }; + test1 = pkgs.callPackage ./nix/test1.nix { inherit self; }; }; devShells.default = pkgs.haskellPackages.shellFor { diff --git a/keter.nix b/nix/keter.nix similarity index 100% rename from keter.nix rename to nix/keter.nix diff --git a/vm.nix b/nix/test0.nix similarity index 100% rename from vm.nix rename to nix/test0.nix diff --git a/nix/test1.nix b/nix/test1.nix new file mode 100644 index 0000000..6038ee1 --- /dev/null +++ b/nix/test1.nix @@ -0,0 +1,139 @@ +{ testers, self }: + +testers.nixosTest { + name = "vm-test"; + + nodes.server = { pkgs, ... }: { + + environment = { + etc = { + + "app1.sh" = { + text = '' + #!/bin/sh + while true; do + ${pkgs.netcat}/bin/nc -l "$PORT" <<'EOF' + HTTP/1.1 200 OK + Content-Length: 17 + Connection: close + + I am version one. + EOF + done + ''; + mode = "0755"; + }; + + "app2.sh" = { + text = '' + #!/bin/sh + while true; do + ${pkgs.netcat}/bin/nc -l "$PORT" <<'EOF' + HTTP/1.1 200 OK + Content-Length: 17 + Connection: close + + I am version two. + EOF + done + ''; + mode = "0755"; + }; + + "broken.sh" = { + text = '' + #!/bin/sh + exit 1 + ''; + mode = "0755"; + }; + + "keter.yaml".text = '' + stanzas: + - type: webapp + exec: ../app.sh + hosts: + - localhost + ''; + + "deploy_app1.sh" = { + text = '' + rm -rf /tmp/bundle /tmp/app.keter + mkdir -p /tmp/bundle/config + cp /etc/app1.sh /tmp/bundle/app.sh + cp /etc/keter.yaml /tmp/bundle/config/keter.yaml + tar -C /tmp/bundle -czvf /tmp/app.keter . + cp /tmp/app.keter /opt/keter/incoming + ''; + mode = "0755"; + }; + + "deploy_app2.sh" = { + text = '' + rm -rf /tmp/bundle /tmp/app.keter + mkdir -p /tmp/bundle/config + cp /etc/app2.sh /tmp/bundle/app.sh + cp /etc/keter.yaml /tmp/bundle/config/keter.yaml + tar -C /tmp/bundle -czvf /tmp/app.keter . + cp /tmp/app.keter /opt/keter/incoming + ''; + mode = "0755"; + }; + + "deploy_broken.sh" = { + text = '' + rm -rf /tmp/bundle /tmp/app.keter + mkdir -p /tmp/bundle/config + cp /etc/broken.sh /tmp/bundle/app.sh + cp /etc/keter.yaml /tmp/bundle/config/keter.yaml + tar -C /tmp/bundle -czvf /tmp/app.keter . + cp /tmp/app.keter /opt/keter/incoming + ''; + mode = "0755"; + }; + + }; + + systemPackages = [ pkgs.netcat ]; + }; + + imports = [ + ./keter.nix + ]; + + nix.settings = { + experimental-features = [ "nix-command" "flakes" ]; + auto-optimise-store = true; + }; + + services.keter-ng = { + enable = true; + package = self.packages.x86_64-linux.keter; + globalKeterConfig = '' + root: /opt/keter + rotate-logs: true + listeners: + - host: "*4" + port: 80 + ''; + }; + + }; + + testScript = '' + server.start() + server.wait_for_unit("keter-ng.service") + server.wait_for_open_port(80) + server.succeed(". /etc/deploy_app1.sh") + server.sleep(10) + server.succeed("curl localhost | grep 'I am version one.'") + + server.succeed(". /etc/deploy_broken.sh") + server.sleep(10) + server.succeed("curl localhost | grep 'I am version one.'") + + server.succeed(". /etc/deploy_app2.sh") + server.sleep(120) + server.succeed("curl localhost | grep 'I am version two.'") + ''; +}