aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/tests/proxy.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/tests/proxy.nix')
-rw-r--r--nixpkgs/nixos/tests/proxy.nix96
1 files changed, 96 insertions, 0 deletions
diff --git a/nixpkgs/nixos/tests/proxy.nix b/nixpkgs/nixos/tests/proxy.nix
new file mode 100644
index 00000000000..1f39e903cdd
--- /dev/null
+++ b/nixpkgs/nixos/tests/proxy.nix
@@ -0,0 +1,96 @@
+import ./make-test.nix ({ pkgs, ...} :
+
+let
+
+ backend =
+ { pkgs, ... }:
+
+ { services.httpd.enable = true;
+ services.httpd.adminAddr = "foo@example.org";
+ services.httpd.documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html";
+ networking.firewall.allowedTCPPorts = [ 80 ];
+ };
+
+in
+
+{
+ name = "proxy";
+ meta = with pkgs.stdenv.lib.maintainers; {
+ maintainers = [ eelco ];
+ };
+
+ nodes =
+ { proxy =
+ { nodes, ... }:
+
+ { services.httpd.enable = true;
+ services.httpd.adminAddr = "bar@example.org";
+ services.httpd.extraModules = [ "proxy_balancer" "lbmethod_byrequests" ];
+
+ services.httpd.extraConfig =
+ ''
+ ExtendedStatus on
+
+ <Location /server-status>
+ Require all granted
+ SetHandler server-status
+ </Location>
+
+ <Proxy balancer://cluster>
+ Require all granted
+ BalancerMember http://${nodes.backend1.config.networking.hostName} retry=0
+ BalancerMember http://${nodes.backend2.config.networking.hostName} retry=0
+ </Proxy>
+
+ ProxyStatus full
+ ProxyPass /server-status !
+ ProxyPass / balancer://cluster/
+ ProxyPassReverse / balancer://cluster/
+
+ # For testing; don't want to wait forever for dead backend servers.
+ ProxyTimeout 5
+ '';
+
+ networking.firewall.allowedTCPPorts = [ 80 ];
+ };
+
+ backend1 = backend;
+ backend2 = backend;
+
+ client = { ... }: { };
+ };
+
+ testScript =
+ ''
+ startAll;
+
+ $proxy->waitForUnit("httpd");
+ $backend1->waitForUnit("httpd");
+ $backend2->waitForUnit("httpd");
+ $client->waitForUnit("network.target");
+
+ # With the back-ends up, the proxy should work.
+ $client->succeed("curl --fail http://proxy/");
+
+ $client->succeed("curl --fail http://proxy/server-status");
+
+ # Block the first back-end.
+ $backend1->block;
+
+ # The proxy should still work.
+ $client->succeed("curl --fail http://proxy/");
+
+ $client->succeed("curl --fail http://proxy/");
+
+ # Block the second back-end.
+ $backend2->block;
+
+ # Now the proxy should fail as well.
+ $client->fail("curl --fail http://proxy/");
+
+ # But if the second back-end comes back, the proxy should start
+ # working again.
+ $backend2->unblock;
+ $client->succeed("curl --fail http://proxy/");
+ '';
+})