Skip to content

Commit

Permalink
Reproduce #294
Browse files Browse the repository at this point in the history
This is an attempt to faithfully reproduce the failure described in
[#294][0].

I have observed that if you wait long enough, the second working
application (which outputs "I am version two.") actually _does_ start
serving requests. So it's possible the original issue is no longer
valid.

[0]: #294
  • Loading branch information
jezen committed Feb 20, 2025
1 parent d7dffe6 commit fc068e2
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 1 deletion.
3 changes: 2 additions & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
File renamed without changes.
File renamed without changes.
139 changes: 139 additions & 0 deletions nix/test1.nix
Original file line number Diff line number Diff line change
@@ -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(10)
server.succeed("curl localhost | grep 'I am version two.'")
'';
}

0 comments on commit fc068e2

Please sign in to comment.