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