python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / tests / nextcloud / with-declarative-redis-and-secrets.nix
blob93e655c3056becb541b75bd5e1e13a0f0a312674
1 import ../make-test-python.nix ({ pkgs, ...}: let
2   adminpass = "hunter2";
3   adminuser = "custom-admin-username";
4 in {
5   name = "nextcloud-with-declarative-redis";
6   meta = with pkgs.lib.maintainers; {
7     maintainers = [ eqyiel ];
8   };
10   nodes = {
11     # The only thing the client needs to do is download a file.
12     client = { ... }: {};
14     nextcloud = { config, pkgs, ... }: {
15       networking.firewall.allowedTCPPorts = [ 80 ];
17       services.nextcloud = {
18         enable = true;
19         hostName = "nextcloud";
20         caching = {
21           apcu = false;
22           redis = true;
23           memcached = false;
24         };
25         config = {
26           dbtype = "pgsql";
27           dbname = "nextcloud";
28           dbuser = "nextcloud";
29           dbhost = "/run/postgresql";
30           inherit adminuser;
31           adminpassFile = toString (pkgs.writeText "admin-pass-file" ''
32             ${adminpass}
33           '');
34         };
35         secretFile = "/etc/nextcloud-secrets.json";
37         extraOptions.redis = {
38           host = "/run/redis/redis.sock";
39           port = 0;
40           dbindex = 0;
41           timeout = 1.5;
42           # password handled via secretfile below
43         };
44         extraOptions.memcache = {
45           local = "\OC\Memcache\Redis";
46           locking = "\OC\Memcache\Redis";
47         };
48       };
50       services.redis.servers."nextcloud".enable = true;
51       services.redis.servers."nextcloud".port = 6379;
53       systemd.services.nextcloud-setup= {
54         requires = ["postgresql.service"];
55         after = [
56           "postgresql.service"
57         ];
58       };
60       services.postgresql = {
61         enable = true;
62         ensureDatabases = [ "nextcloud" ];
63         ensureUsers = [
64           { name = "nextcloud";
65             ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
66           }
67         ];
68       };
70       # This file is meant to contain secret options which should
71       # not go into the nix store. Here it is just used to set the
72       # databyse type to postgres.
73       environment.etc."nextcloud-secrets.json".text = ''
74         {
75           "redis": {
76             "password": "secret"
77           }
78         }
79       '';
80     };
81   };
83   testScript = let
84     withRcloneEnv = pkgs.writeScript "with-rclone-env" ''
85       #!${pkgs.runtimeShell}
86       export RCLONE_CONFIG_NEXTCLOUD_TYPE=webdav
87       export RCLONE_CONFIG_NEXTCLOUD_URL="http://nextcloud/remote.php/webdav/"
88       export RCLONE_CONFIG_NEXTCLOUD_VENDOR="nextcloud"
89       export RCLONE_CONFIG_NEXTCLOUD_USER="${adminuser}"
90       export RCLONE_CONFIG_NEXTCLOUD_PASS="$(${pkgs.rclone}/bin/rclone obscure ${adminpass})"
91       "''${@}"
92     '';
93     copySharedFile = pkgs.writeScript "copy-shared-file" ''
94       #!${pkgs.runtimeShell}
95       echo 'hi' | ${pkgs.rclone}/bin/rclone rcat nextcloud:test-shared-file
96     '';
98     diffSharedFile = pkgs.writeScript "diff-shared-file" ''
99       #!${pkgs.runtimeShell}
100       diff <(echo 'hi') <(${pkgs.rclone}/bin/rclone cat nextcloud:test-shared-file)
101     '';
102   in ''
103     start_all()
104     nextcloud.wait_for_unit("multi-user.target")
105     nextcloud.succeed("curl -sSf http://nextcloud/login")
106     nextcloud.succeed(
107         "${withRcloneEnv} ${copySharedFile}"
108     )
109     client.wait_for_unit("multi-user.target")
110     client.succeed(
111         "${withRcloneEnv} ${diffSharedFile}"
112     )
114     # redis cache should not be empty
115     nextcloud.fail("redis-cli KEYS * | grep -q 'empty array'")
116   '';