* Added a test for a simple load-balancing web server. The tests
verify whether the reverse proxy works correctly if the back-ends go down and come up. (Moved from the varia repo.) svn path=/nixos/trunk/; revision=19356
This commit is contained in:
parent
ee005424bf
commit
73bdc861b7
@ -128,6 +128,7 @@ let
|
|||||||
installer.separateBoot = t.installer.separateBoot.test;
|
installer.separateBoot = t.installer.separateBoot.test;
|
||||||
installer.simple = t.installer.simple.test;
|
installer.simple = t.installer.simple.test;
|
||||||
kde4 = t.kde4.test;
|
kde4 = t.kde4.test;
|
||||||
|
proxy = t.proxy.test;
|
||||||
quake3 = t.quake3.test;
|
quake3 = t.quake3.test;
|
||||||
subversion = t.subversion.report;
|
subversion = t.subversion.report;
|
||||||
trac = t.trac.test;
|
trac = t.trac.test;
|
||||||
|
@ -31,6 +31,7 @@ in
|
|||||||
firefox = apply (import ./firefox.nix);
|
firefox = apply (import ./firefox.nix);
|
||||||
installer = pkgs.lib.mapAttrs (name: complete) (call (import ./installer.nix));
|
installer = pkgs.lib.mapAttrs (name: complete) (call (import ./installer.nix));
|
||||||
kde4 = apply (import ./kde4.nix);
|
kde4 = apply (import ./kde4.nix);
|
||||||
|
proxy = apply (import ./proxy.nix);
|
||||||
quake3 = apply (import ./quake3.nix);
|
quake3 = apply (import ./quake3.nix);
|
||||||
subversion = apply (import ./subversion.nix);
|
subversion = apply (import ./subversion.nix);
|
||||||
trac = apply (import ./trac.nix);
|
trac = apply (import ./trac.nix);
|
||||||
|
94
tests/proxy.nix
Normal file
94
tests/proxy.nix
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
backend =
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.sshd.enable = true;
|
||||||
|
|
||||||
|
services.httpd.enable = true;
|
||||||
|
services.httpd.adminAddr = "foo@example.org";
|
||||||
|
services.httpd.documentRoot = "${pkgs.valgrind}/share/doc/valgrind/html";
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
nodes =
|
||||||
|
{ proxy =
|
||||||
|
{ config, pkgs, nodes, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.httpd.enable = true;
|
||||||
|
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
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
backend1 = backend;
|
||||||
|
backend2 = backend;
|
||||||
|
|
||||||
|
client = { config, pkgs, ... }: { };
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript =
|
||||||
|
''
|
||||||
|
startAll;
|
||||||
|
|
||||||
|
$proxy->waitForJob("httpd");
|
||||||
|
$backend1->waitForJob("httpd");
|
||||||
|
$backend2->waitForJob("httpd");
|
||||||
|
|
||||||
|
# With the back-ends up, the proxy should work.
|
||||||
|
$client->mustSucceed("curl --fail http://proxy/");
|
||||||
|
|
||||||
|
$client->mustSucceed("curl --fail http://proxy/server-status");
|
||||||
|
|
||||||
|
# Block the first back-end.
|
||||||
|
$backend1->block;
|
||||||
|
|
||||||
|
# The proxy should still work.
|
||||||
|
$client->mustSucceed("curl --fail http://proxy/");
|
||||||
|
|
||||||
|
$client->mustSucceed("curl --fail http://proxy/");
|
||||||
|
|
||||||
|
# Block the second back-end.
|
||||||
|
$backend2->block;
|
||||||
|
|
||||||
|
# Now the proxy should fail as well.
|
||||||
|
$client->mustFail("curl --fail http://proxy/");
|
||||||
|
|
||||||
|
# But if the second back-end comes back, the proxy should start
|
||||||
|
# working again.
|
||||||
|
$backend2->unblock;
|
||||||
|
$client->mustSucceed("curl --fail http://proxy/");
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user