1{ system ? builtins.currentSystem }:
2with import ../lib/testing.nix { inherit system; };
3with pkgs.lib;
4let
5 postgresql-versions = pkgs.callPackages ../../pkgs/servers/sql/postgresql { };
6 test-sql = pkgs.writeText "postgresql-test" ''
7 CREATE EXTENSION pgcrypto; -- just to check if lib loading works
8 CREATE TABLE sth (
9 id int
10 );
11 INSERT INTO sth (id) VALUES (1);
12 INSERT INTO sth (id) VALUES (1);
13 INSERT INTO sth (id) VALUES (1);
14 INSERT INTO sth (id) VALUES (1);
15 INSERT INTO sth (id) VALUES (1);
16 CREATE TABLE xmltest ( doc xml );
17 INSERT INTO xmltest (doc) VALUES ('<test>ok</test>'); -- check if libxml2 enabled
18 '';
19 make-postgresql-test = postgresql-name: postgresql-package: makeTest {
20 name = postgresql-name;
21 meta = with pkgs.stdenv.lib.maintainers; {
22 maintainers = [ zagy ];
23 };
24
25 machine = {...}:
26 {
27 services.postgresql.package=postgresql-package;
28 services.postgresql.enable = true;
29
30 services.postgresqlBackup.enable = true;
31 services.postgresqlBackup.databases = [ "postgres" ];
32 };
33
34 testScript = ''
35 sub check_count {
36 my ($select, $nlines) = @_;
37 return 'test $(sudo -u postgres psql postgres -tAc "' . $select . '"|wc -l) -eq ' . $nlines;
38 }
39
40 $machine->start;
41 $machine->waitForUnit("postgresql");
42 # postgresql should be available just after unit start
43 $machine->succeed("cat ${test-sql} | sudo -u postgres psql");
44 $machine->shutdown; # make sure that postgresql survive restart (bug #1735)
45 sleep(2);
46 $machine->start;
47 $machine->waitForUnit("postgresql");
48 $machine->fail(check_count("SELECT * FROM sth;", 3));
49 $machine->succeed(check_count("SELECT * FROM sth;", 5));
50 $machine->fail(check_count("SELECT * FROM sth;", 4));
51 $machine->succeed(check_count("SELECT xpath(\'/test/text()\', doc) FROM xmltest;", 1));
52
53 # Check backup service
54 $machine->succeed("systemctl start postgresqlBackup-postgres.service");
55 $machine->succeed("zcat /var/backup/postgresql/postgres.sql.gz | grep '<test>ok</test>'");
56 $machine->shutdown;
57 '';
58
59 };
60in
61 mapAttrs' (p-name: p-package: {name=p-name; value=make-postgresql-test p-name p-package;}) postgresql-versions