1# mostly copied from ./timescaledb.nix which was copied from ./postgresql.nix
2# as it seemed unapproriate to test additional extensions for postgresql there.
3
4{ system ? builtins.currentSystem
5, config ? { }
6, pkgs ? import ../.. { inherit system config; }
7}:
8
9with import ../lib/testing-python.nix { inherit system pkgs; };
10with pkgs.lib;
11
12let
13 postgresql-versions = import ../../pkgs/servers/sql/postgresql pkgs;
14 test-sql = pkgs.writeText "postgresql-test" ''
15 CREATE USER promscale SUPERUSER PASSWORD 'promscale';
16 CREATE DATABASE promscale OWNER promscale;
17 '';
18
19 make-postgresql-test = postgresql-name: postgresql-package: makeTest {
20 name = postgresql-name;
21 meta = with pkgs.lib.maintainers; {
22 maintainers = [ anpin ];
23 };
24
25 nodes.machine = { config, pkgs, ... }:
26 {
27 services.postgresql = {
28 enable = true;
29 package = postgresql-package;
30 extraPlugins = with postgresql-package.pkgs; [
31 timescaledb
32 promscale_extension
33 ];
34 settings = { shared_preload_libraries = "timescaledb, promscale"; };
35 };
36 environment.systemPackages = with pkgs; [ promscale ];
37 };
38
39 testScript = ''
40 machine.start()
41 machine.wait_for_unit("postgresql")
42 with subtest("Postgresql with extensions timescaledb and promscale is available just after unit start"):
43 print(machine.succeed("sudo -u postgres psql -f ${test-sql}"))
44 machine.succeed("sudo -u postgres psql promscale -c 'SHOW shared_preload_libraries;' | grep promscale")
45 machine.succeed(
46 "promscale --db.name promscale --db.password promscale --db.user promscale --db.ssl-mode allow --startup.install-extensions --startup.only"
47 )
48 machine.succeed("sudo -u postgres psql promscale -c 'SELECT ps_trace.get_trace_retention_period();' | grep '(1 row)'")
49 machine.shutdown()
50 '';
51 };
52 #version 15 is not supported yet
53 applicablePostgresqlVersions = filterAttrs (_: value: versionAtLeast value.version "12" && !(versionAtLeast value.version "15")) postgresql-versions;
54in
55mapAttrs'
56 (name: package: {
57 inherit name;
58 value = make-postgresql-test name package;
59 })
60 applicablePostgresqlVersions