python312Packages.millheater: 0.11.8 -> 0.12.0
[NixPkgs.git] / nixos / tests / nextcloud / default.nix
bloba1aba5c1ab6497b0b3733ea53b0a1d9c4505135a
1 { system ? builtins.currentSystem
2 , config ? { }
3 , pkgs ? import ../../.. { inherit system config; }
4 }:
6 with pkgs.lib;
8 let
9   baseModule = { config, ... }: {
10     imports = [
11       {
12         options.test-helpers = {
13           rclone = mkOption { type = types.str; };
14           upload-sample = mkOption { type = types.str; };
15           check-sample = mkOption { type = types.str; };
16           init = mkOption { type = types.str; default = ""; };
17           extraTests = mkOption { type = types.either types.str (types.functionTo types.str); default = ""; };
18         };
19         options.adminuser = mkOption { type = types.str; };
20         options.adminpass = mkOption { type = types.str; };
21       }
22     ];
24     adminuser = "root";
25     adminpass = "hunter2";
27     test-helpers.rclone = "${pkgs.writeShellScript "rclone" ''
28       set -euo pipefail
29       export PATH="${pkgs.rclone}/bin:$PATH"
30       export RCLONE_CONFIG_NEXTCLOUD_TYPE=webdav
31       export RCLONE_CONFIG_NEXTCLOUD_URL="http://nextcloud/remote.php/dav/files/${config.adminuser}"
32       export RCLONE_CONFIG_NEXTCLOUD_VENDOR="nextcloud"
33       export RCLONE_CONFIG_NEXTCLOUD_USER="${config.adminuser}"
34       export RCLONE_CONFIG_NEXTCLOUD_PASS="$(rclone obscure ${config.adminpass})"
35       exec "$@"
36     ''}";
37     test-helpers.upload-sample = "${pkgs.writeShellScript "rclone-upload" ''
38       <<<'hi' rclone rcat nextcloud:test-shared-file
39     ''}";
40     test-helpers.check-sample = "${pkgs.writeShellScript "check-sample" ''
41       set -e
42       diff <(echo 'hi') <(rclone cat nextcloud:test-shared-file)
43     ''}";
45     nodes = {
46       client = { ... }: {};
47       nextcloud = { lib, ... }: {
48         networking.firewall.allowedTCPPorts = [ 80 ];
49         services.nextcloud = {
50           enable = true;
51           hostName = "nextcloud";
52           https = false;
53           database.createLocally = lib.mkDefault true;
54           config = {
55             adminpassFile = "${pkgs.writeText "adminpass" config.adminpass}"; # Don't try this at home!
56           };
57         };
58       };
59     };
61     testScript = args@{ nodes, ... }: let
62       inherit (config) test-helpers;
63     in mkBefore ''
64       nextcloud.start()
65       client.start()
66       nextcloud.wait_for_unit("multi-user.target")
68       ${test-helpers.init}
70       with subtest("Ensure nextcloud-occ is working"):
71           nextcloud.succeed("nextcloud-occ status")
72           nextcloud.succeed("curl -sSf http://nextcloud/login")
74       with subtest("Upload/Download test"):
75           nextcloud.succeed(
76               "${test-helpers.rclone} ${test-helpers.upload-sample}"
77           )
78           client.wait_for_unit("multi-user.target")
79           client.succeed(
80               "${test-helpers.rclone} ${test-helpers.check-sample}"
81           )
83       ${if builtins.isFunction test-helpers.extraTests then test-helpers.extraTests args else test-helpers.extraTests}
84     '';
85   };
87   genTests = version:
88     let
89       testBase.imports = [
90         baseModule
91         {
92           nodes.nextcloud = { pkgs, ... }: {
93             services.nextcloud.package = pkgs.${"nextcloud${toString version}"};
94           };
95         }
96       ];
98       callNextcloudTest = path:
99         let
100           name = "${removeSuffix ".nix" (baseNameOf path)}${toString version}";
101         in nameValuePair name (import path {
102           inherit system pkgs testBase;
103           name = "nextcloud-${name}";
104         });
105     in map callNextcloudTest [
106       ./basic.nix
107       ./with-declarative-redis-and-secrets.nix
108       ./with-mysql-and-memcached.nix
109       ./with-postgresql-and-redis.nix
110       ./with-objectstore.nix
111     ];
113 listToAttrs (concatMap genTests [ 28 29 30 ])