|
3 | 3 | pname = "http"; |
4 | 4 | inherit (pkgs) lib; |
5 | 5 | mockServer = ../../tests/http-mock-server.py; |
6 | | - installedExtension = |
7 | | - postgresMajorVersion: |
8 | | - self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${ |
9 | | - pname |
10 | | - }"; |
11 | | - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; |
12 | | - postgresqlWithExtension = |
13 | | - postgresql: |
14 | | - let |
15 | | - majorVersion = |
16 | | - if postgresql.isOrioleDB then "orioledb-17" else lib.versions.major postgresql.version; |
17 | | - pkg = pkgs.pkgsLinux.buildEnv { |
18 | | - name = "postgresql-${majorVersion}-${pname}"; |
19 | | - paths = [ |
20 | | - postgresql |
21 | | - postgresql.lib |
22 | | - (installedExtension majorVersion) |
23 | | - ] |
24 | | - ++ lib.optional (postgresql.isOrioleDB |
25 | | - ) self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.psql_orioledb-17.exts.orioledb; |
26 | | - passthru = { |
27 | | - inherit (postgresql) version psqlSchema; |
28 | | - installedExtensions = [ (installedExtension majorVersion) ]; |
29 | | - lib = pkg; |
30 | | - withPackages = _: pkg; |
31 | | - withJIT = pkg; |
32 | | - withoutJIT = pkg; |
33 | | - }; |
34 | | - nativeBuildInputs = [ pkgs.pkgsLinux.makeWrapper ]; |
35 | | - pathsToLink = [ |
36 | | - "/" |
37 | | - "/bin" |
38 | | - "/lib" |
39 | | - ]; |
40 | | - postBuild = '' |
41 | | - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib |
42 | | - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib |
43 | | - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib |
44 | | - ''; |
45 | | - }; |
46 | | - in |
47 | | - pkg; |
48 | | - psql_15 = |
49 | | - postgresqlWithExtension |
50 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15; |
51 | | - psql_17 = |
52 | | - postgresqlWithExtension |
53 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17; |
54 | | - orioledb_17 = |
55 | | - postgresqlWithExtension |
56 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17; |
| 6 | + testLib = import ./lib.nix { |
| 7 | + inherit self pkgs; |
| 8 | + testedExtensionName = pname; |
| 9 | + }; |
| 10 | + inherit (testLib) |
| 11 | + versions |
| 12 | + installedExtension |
| 13 | + psql_15 |
| 14 | + psql_17 |
| 15 | + orioledb_17 |
| 16 | + ; |
57 | 17 | in |
58 | 18 | pkgs.testers.runNixOSTest { |
59 | 19 | name = pname; |
60 | 20 | nodes.server = |
61 | 21 | { config, ... }: |
62 | | - { |
63 | | - services.openssh = { |
64 | | - enable = true; |
65 | | - }; |
66 | | - |
67 | | - services.postgresql = { |
68 | | - enable = true; |
69 | | - package = |
70 | | - postgresqlWithExtension |
71 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15; |
72 | | - settings = (installedExtension "15").defaultSettings or { }; |
73 | | - authentication = '' |
74 | | - local all postgres peer map=postgres |
75 | | - local all all peer map=root |
76 | | - ''; |
77 | | - identMap = '' |
78 | | - root root supabase_admin |
79 | | - postgres postgres postgres |
80 | | - ''; |
81 | | - ensureUsers = [ |
82 | | - { |
83 | | - name = "supabase_admin"; |
84 | | - ensureClauses.superuser = true; |
85 | | - } |
86 | | - ]; |
87 | | - initialScript = pkgs.writeText "init-postgres" '' |
88 | | - CREATE TABLE IF NOT EXISTS test_config (key TEXT PRIMARY KEY, value TEXT); |
89 | | - ''; |
90 | | - }; |
91 | | - |
92 | | - systemd.services.http-mock-server = { |
93 | | - wantedBy = [ "multi-user.target" ]; |
94 | | - before = [ "postgresql.service" ]; |
95 | | - serviceConfig = { |
96 | | - Type = "simple"; |
97 | | - Restart = "on-failure"; |
98 | | - RestartSec = "2"; |
99 | | - TimeoutStartSec = "30"; |
100 | | - User = "root"; |
101 | | - }; |
102 | | - environment = { |
103 | | - HTTP_MOCK_PORT_FILE = "/tmp/http-mock-port"; |
104 | | - PYTHONUNBUFFERED = "1"; |
105 | | - }; |
106 | | - script = '' |
107 | | - # Ensure temp directory exists |
108 | | - mkdir -p /tmp |
109 | | -
|
110 | | - # Start the mock server |
111 | | - exec ${pkgs.pkgsLinux.python3}/bin/python3 ${mockServer} |
112 | | - ''; |
113 | | - }; |
114 | | - |
115 | | - systemd.services.postgresql = { |
116 | | - after = [ "http-mock-server.service" ]; |
117 | | - }; |
118 | | - |
119 | | - specialisation.postgresql17.configuration = { |
120 | | - services.postgresql = { |
121 | | - package = lib.mkForce ( |
122 | | - postgresqlWithExtension self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17 |
123 | | - ); |
124 | | - settings = ((installedExtension "17").defaultSettings or { }); |
125 | | - }; |
126 | | - |
127 | | - systemd.services.postgresql-migrate = { |
| 22 | + pkgs.lib.mkMerge [ |
| 23 | + (testLib.mkDefaultNixosTestNode { |
| 24 | + inherit |
| 25 | + config |
| 26 | + psql_15 |
| 27 | + psql_17 |
| 28 | + orioledb_17 |
| 29 | + ; |
| 30 | + }) |
| 31 | + { |
| 32 | + systemd.services.http-mock-server = { |
| 33 | + wantedBy = [ "multi-user.target" ]; |
| 34 | + before = [ "postgresql.service" ]; |
128 | 35 | serviceConfig = { |
129 | | - Type = "oneshot"; |
130 | | - RemainAfterExit = true; |
131 | | - User = "postgres"; |
132 | | - Group = "postgres"; |
133 | | - StateDirectory = "postgresql"; |
134 | | - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; |
| 36 | + Type = "simple"; |
| 37 | + Restart = "on-failure"; |
| 38 | + RestartSec = "2"; |
| 39 | + TimeoutStartSec = "30"; |
| 40 | + User = "root"; |
135 | 41 | }; |
136 | | - script = |
137 | | - let |
138 | | - oldPostgresql = |
139 | | - postgresqlWithExtension |
140 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15; |
141 | | - newPostgresql = |
142 | | - postgresqlWithExtension |
143 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17; |
144 | | - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; |
145 | | - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; |
146 | | - in |
147 | | - '' |
148 | | - if [[ ! -d ${newDataDir} ]]; then |
149 | | - install -d -m 0700 -o postgres -g postgres "${newDataDir}" |
150 | | - ${newPostgresql}/bin/initdb -D "${newDataDir}" |
151 | | - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ |
152 | | - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" |
153 | | - else |
154 | | - echo "${newDataDir} already exists" |
155 | | - fi |
156 | | - ''; |
157 | | - }; |
158 | | - |
159 | | - systemd.services.postgresql = { |
160 | | - after = [ "postgresql-migrate.service" ]; |
161 | | - requires = [ "postgresql-migrate.service" ]; |
162 | | - }; |
163 | | - }; |
164 | | - |
165 | | - specialisation.orioledb17.configuration = { |
166 | | - services.postgresql = { |
167 | | - package = lib.mkForce ( |
168 | | - postgresqlWithExtension |
169 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17 |
170 | | - ); |
171 | | - settings = lib.mkForce ( |
172 | | - ((installedExtension "17").defaultSettings or { }) |
173 | | - // { |
174 | | - jit = "off"; |
175 | | - shared_preload_libraries = [ |
176 | | - "orioledb" |
177 | | - ] |
178 | | - ++ (lib.toList ((installedExtension "17").defaultSettings.shared_preload_libraries or [ ])); |
179 | | - default_table_access_method = "orioledb"; |
180 | | - } |
181 | | - ); |
182 | | - initdbArgs = [ |
183 | | - "--allow-group-access" |
184 | | - "--locale-provider=icu" |
185 | | - "--encoding=UTF-8" |
186 | | - "--icu-locale=en_US.UTF-8" |
187 | | - ]; |
188 | | - initialScript = lib.mkForce ( |
189 | | - pkgs.writeText "init-postgres-with-orioledb" '' |
190 | | - CREATE EXTENSION orioledb CASCADE; |
191 | | - CREATE TABLE IF NOT EXISTS test_config (key TEXT PRIMARY KEY, value TEXT); |
192 | | - '' |
193 | | - ); |
194 | | - }; |
195 | | - |
196 | | - systemd.services.postgresql-migrate = { |
197 | | - # we don't support migrating from postgresql 17 to orioledb-17 so we just reinit the datadir |
198 | | - serviceConfig = { |
199 | | - Type = "oneshot"; |
200 | | - RemainAfterExit = true; |
201 | | - User = "postgres"; |
202 | | - Group = "postgres"; |
203 | | - StateDirectory = "postgresql"; |
204 | | - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; |
| 42 | + environment = { |
| 43 | + HTTP_MOCK_PORT_FILE = "/tmp/http-mock-port"; |
| 44 | + PYTHONUNBUFFERED = "1"; |
205 | 45 | }; |
206 | | - script = |
207 | | - let |
208 | | - newPostgresql = |
209 | | - postgresqlWithExtension |
210 | | - self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17; |
211 | | - in |
212 | | - '' |
213 | | - if [[ -z "${newPostgresql.psqlSchema}" ]]; then |
214 | | - echo "Error: psqlSchema is empty, refusing to rm -rf" |
215 | | - exit 1 |
216 | | - fi |
217 | | - rm -rf ${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema} |
218 | | - ''; |
| 46 | + script = '' |
| 47 | + # Ensure temp directory exists |
| 48 | + mkdir -p /tmp |
| 49 | +
|
| 50 | + # Start the mock server |
| 51 | + exec ${pkgs.pkgsLinux.python3}/bin/python3 ${mockServer} |
| 52 | + ''; |
219 | 53 | }; |
220 | 54 |
|
221 | 55 | systemd.services.postgresql = { |
222 | | - after = [ "postgresql-migrate.service" ]; |
223 | | - requires = [ "postgresql-migrate.service" ]; |
| 56 | + after = [ "http-mock-server.service" ]; |
224 | 57 | }; |
225 | | - }; |
226 | | - }; |
| 58 | + |
| 59 | + } |
| 60 | + ]; |
227 | 61 | testScript = |
228 | 62 | { nodes, ... }: |
229 | 63 | let |
@@ -269,7 +103,7 @@ pkgs.testers.runNixOSTest { |
269 | 103 | echo "Waiting for HTTP mock server port file... ($i/30)" |
270 | 104 | sleep 1 |
271 | 105 | done |
272 | | - |
| 106 | +
|
273 | 107 | if [ ! -f /tmp/http-mock-port ]; then |
274 | 108 | echo "ERROR: HTTP mock server port file not found after 30 seconds" |
275 | 109 | systemctl status http-mock-server.service || true |
|
0 commit comments