2014-04-14 16:02:44 +04:00
|
|
|
import ./make-test.nix (
|
2010-01-11 18:58:15 +03:00
|
|
|
|
|
|
|
let
|
|
|
|
|
2011-09-14 22:20:50 +04:00
|
|
|
backend =
|
2010-01-11 18:58:15 +03:00
|
|
|
{ config, pkgs, ... }:
|
|
|
|
|
2014-04-11 19:15:56 +04:00
|
|
|
{ services.httpd.enable = true;
|
2010-01-11 18:58:15 +03:00
|
|
|
services.httpd.adminAddr = "foo@example.org";
|
|
|
|
services.httpd.documentRoot = "${pkgs.valgrind}/share/doc/valgrind/html";
|
2014-04-11 19:15:56 +04:00
|
|
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
2010-01-11 18:58:15 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
in
|
|
|
|
|
|
|
|
{
|
2014-06-28 18:04:49 +04:00
|
|
|
name = "proxy";
|
2010-01-11 18:58:15 +03:00
|
|
|
|
|
|
|
nodes =
|
|
|
|
{ proxy =
|
|
|
|
{ config, pkgs, nodes, ... }:
|
|
|
|
|
2014-04-11 19:15:56 +04:00
|
|
|
{ services.httpd.enable = true;
|
2010-01-11 18:58:15 +03:00
|
|
|
services.httpd.adminAddr = "bar@example.org";
|
|
|
|
services.httpd.extraModules = ["proxy_balancer"];
|
|
|
|
|
|
|
|
services.httpd.extraConfig =
|
|
|
|
''
|
|
|
|
ExtendedStatus on
|
|
|
|
|
|
|
|
<Location /server-status>
|
|
|
|
Order deny,allow
|
|
|
|
Allow from all
|
|
|
|
SetHandler server-status
|
|
|
|
</Location>
|
|
|
|
|
|
|
|
<Proxy balancer://cluster>
|
|
|
|
Allow from all
|
|
|
|
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
|
|
|
|
'';
|
2014-04-11 19:15:56 +04:00
|
|
|
|
|
|
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
2010-01-11 18:58:15 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
backend1 = backend;
|
|
|
|
backend2 = backend;
|
|
|
|
|
|
|
|
client = { config, pkgs, ... }: { };
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript =
|
|
|
|
''
|
|
|
|
startAll;
|
|
|
|
|
2012-10-24 20:22:53 +04:00
|
|
|
$proxy->waitForUnit("httpd");
|
|
|
|
$backend1->waitForUnit("httpd");
|
|
|
|
$backend2->waitForUnit("httpd");
|
2010-01-11 18:58:15 +03:00
|
|
|
|
|
|
|
# With the back-ends up, the proxy should work.
|
2012-10-24 20:22:53 +04:00
|
|
|
$client->succeed("curl --fail http://proxy/");
|
2010-01-11 18:58:15 +03:00
|
|
|
|
2012-10-24 20:22:53 +04:00
|
|
|
$client->succeed("curl --fail http://proxy/server-status");
|
2010-01-11 18:58:15 +03:00
|
|
|
|
|
|
|
# Block the first back-end.
|
|
|
|
$backend1->block;
|
|
|
|
|
|
|
|
# The proxy should still work.
|
2012-10-24 20:22:53 +04:00
|
|
|
$client->succeed("curl --fail http://proxy/");
|
2010-01-11 18:58:15 +03:00
|
|
|
|
2012-10-24 20:22:53 +04:00
|
|
|
$client->succeed("curl --fail http://proxy/");
|
2010-01-11 18:58:15 +03:00
|
|
|
|
|
|
|
# Block the second back-end.
|
|
|
|
$backend2->block;
|
|
|
|
|
|
|
|
# Now the proxy should fail as well.
|
2012-10-24 20:22:53 +04:00
|
|
|
$client->fail("curl --fail http://proxy/");
|
2010-01-11 18:58:15 +03:00
|
|
|
|
|
|
|
# But if the second back-end comes back, the proxy should start
|
|
|
|
# working again.
|
|
|
|
$backend2->unblock;
|
2012-10-24 20:22:53 +04:00
|
|
|
$client->succeed("curl --fail http://proxy/");
|
2010-01-11 18:58:15 +03:00
|
|
|
'';
|
|
|
|
|
2014-04-14 16:02:44 +04:00
|
|
|
})
|