librepcb: 1.1.0 -> 1.2.0
[NixPkgs.git] / nixos / tests / nextcloud / with-declarative-redis-and-secrets.nix
blob80041ed481b4536c83bc5211dd9b401508b649ec
1 { name, pkgs, testBase, system, ... }:
3 with import ../../lib/testing-python.nix { inherit system pkgs; };
4 runTest ({ config, ... }: let inherit (config) adminuser; in {
5   inherit name;
6   meta = with pkgs.lib.maintainers; {
7     maintainers = [ eqyiel ma27 ];
8   };
10   imports = [ testBase ];
12   nodes = {
13     nextcloud = { config, pkgs, ... }: {
14       environment.systemPackages = [ pkgs.jq ];
15       services.nextcloud = {
16         caching = {
17           apcu = false;
18           redis = true;
19           memcached = false;
20         };
21         # This test also validates that we can use an "external" database
22         database.createLocally = false;
23         config = {
24           dbtype = "pgsql";
25           dbname = "nextcloud";
26           dbuser = adminuser;
27           dbpassFile = config.services.nextcloud.config.adminpassFile;
28         };
30         secretFile = "/etc/nextcloud-secrets.json";
32         settings = {
33           allow_local_remote_servers = true;
34           redis = {
35             dbindex = 0;
36             timeout = 1.5;
37             # password handled via secretfile below
38           };
39         };
40         configureRedis = true;
41       };
43       services.redis.servers."nextcloud" = {
44         enable = true;
45         port = 6379;
46         requirePass = "secret";
47       };
49       systemd.services.nextcloud-setup= {
50         requires = ["postgresql.service"];
51         after = [ "postgresql.service" ];
52       };
54       services.postgresql = {
55         enable = true;
56         package = pkgs.postgresql_14;
57       };
58       systemd.services.postgresql.postStart = pkgs.lib.mkAfter ''
59         password=$(cat ${config.services.nextcloud.config.dbpassFile})
60         ${config.services.postgresql.package}/bin/psql <<EOF
61           CREATE ROLE ${adminuser} WITH LOGIN PASSWORD '$password' CREATEDB;
62           CREATE DATABASE nextcloud;
63           GRANT ALL PRIVILEGES ON DATABASE nextcloud TO ${adminuser};
64         EOF
65       '';
67       # This file is meant to contain secret options which should
68       # not go into the nix store. Here it is just used to set the
69       # redis password.
70       environment.etc."nextcloud-secrets.json".text = ''
71         {
72           "redis": {
73             "password": "secret"
74           }
75         }
76       '';
77     };
78   };
80   test-helpers.extraTests = ''
81     with subtest("non-empty redis cache"):
82         # redis cache should not be empty
83         nextcloud.fail('test 0 -lt "$(redis-cli --pass secret --json KEYS "*" | jq "len")"')
84   '';