1import ./make-test-python.nix (
2 { pkgs, ... }:
3 let
4 creds = pkgs.writeText ".monetdb" ''
5 user=monetdb
6 password=monetdb
7 '';
8 createUser = pkgs.writeText "createUser.sql" ''
9 CREATE USER "voc" WITH PASSWORD 'voc' NAME 'VOC Explorer' SCHEMA "sys";
10 CREATE SCHEMA "voc" AUTHORIZATION "voc";
11 ALTER USER "voc" SET SCHEMA "voc";
12 '';
13 credsVoc = pkgs.writeText ".monetdb" ''
14 user=voc
15 password=voc
16 '';
17 transaction = pkgs.writeText "transaction" ''
18 START TRANSACTION;
19 CREATE TABLE test (id int, data varchar(30));
20 ROLLBACK;
21 '';
22 vocData = pkgs.fetchzip {
23 url = "https://dev.monetdb.org/Assets/VOC/voc_dump.zip";
24 hash = "sha256-sQ5acTsSAiXQfOgt2PhN7X7Z9TZGZtLrPPxgQT2pCGQ=";
25 };
26 onboardPeople = pkgs.writeText "onboardPeople" ''
27 CREATE VIEW onboard_people AS
28 SELECT * FROM (
29 SELECT 'craftsmen' AS type, craftsmen.* FROM craftsmen
30 UNION ALL
31 SELECT 'impotenten' AS type, impotenten.* FROM impotenten
32 UNION ALL
33 SELECT 'passengers' AS type, passengers.* FROM passengers
34 UNION ALL
35 SELECT 'seafarers' AS type, seafarers.* FROM seafarers
36 UNION ALL
37 SELECT 'soldiers' AS type, soldiers.* FROM soldiers
38 UNION ALL
39 SELECT 'total' AS type, total.* FROM total
40 ) AS onboard_people_table;
41 SELECT type, COUNT(*) AS total
42 FROM onboard_people GROUP BY type ORDER BY type;
43 '';
44 onboardExpected = pkgs.lib.strings.replaceStrings [ "\n" ] [ "\\n" ] ''
45 +------------+-------+
46 | type | total |
47 +============+=======+
48 | craftsmen | 2349 |
49 | impotenten | 938 |
50 | passengers | 2813 |
51 | seafarers | 4468 |
52 | soldiers | 4177 |
53 | total | 2467 |
54 +------------+-------+
55 '';
56 in
57 {
58 name = "monetdb";
59 meta = with pkgs.lib.maintainers; {
60 maintainers = [ StillerHarpo ];
61 };
62 nodes.machine.services.monetdb.enable = true;
63 testScript = ''
64 machine.start()
65 machine.wait_for_unit("monetdb")
66 machine.succeed("monetdbd create mydbfarm")
67 machine.succeed("monetdbd start mydbfarm")
68 machine.succeed("monetdb create voc")
69 machine.succeed("monetdb release voc")
70 machine.succeed("cp ${creds} ./.monetdb")
71 assert "hello world" in machine.succeed("mclient -d voc -s \"SELECT 'hello world'\"")
72 machine.succeed("mclient -d voc ${createUser}")
73 machine.succeed("cp ${credsVoc} ./.monetdb")
74 machine.succeed("mclient -d voc ${transaction}")
75 machine.succeed("mclient -d voc ${vocData}/voc_dump.sql")
76 assert "8131" in machine.succeed("mclient -d voc -s \"SELECT count(*) FROM voyages\"")
77 assert "${onboardExpected}" in machine.succeed("mclient -d voc ${onboardPeople}")
78
79 '';
80 }
81)