aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/tests/nextcloud/with-postgresql-and-redis.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/tests/nextcloud/with-postgresql-and-redis.nix')
-rw-r--r--nixpkgs/nixos/tests/nextcloud/with-postgresql-and-redis.nix100
1 files changed, 100 insertions, 0 deletions
diff --git a/nixpkgs/nixos/tests/nextcloud/with-postgresql-and-redis.nix b/nixpkgs/nixos/tests/nextcloud/with-postgresql-and-redis.nix
new file mode 100644
index 00000000000..95219cac9be
--- /dev/null
+++ b/nixpkgs/nixos/tests/nextcloud/with-postgresql-and-redis.nix
@@ -0,0 +1,100 @@
+import ../make-test-python.nix ({ pkgs, ...}: let
+ adminpass = "hunter2";
+ adminuser = "custom-admin-username";
+in {
+ name = "nextcloud-with-postgresql-and-redis";
+ meta = with pkgs.stdenv.lib.maintainers; {
+ maintainers = [ eqyiel ];
+ };
+
+ nodes = {
+ # The only thing the client needs to do is download a file.
+ client = { ... }: {};
+
+ nextcloud = { config, pkgs, ... }: {
+ networking.firewall.allowedTCPPorts = [ 80 ];
+
+ services.nextcloud = {
+ enable = true;
+ hostName = "nextcloud";
+ nginx.enable = true;
+ caching = {
+ apcu = false;
+ redis = true;
+ memcached = false;
+ };
+ config = {
+ dbtype = "pgsql";
+ dbname = "nextcloud";
+ dbuser = "nextcloud";
+ dbhost = "/run/postgresql";
+ inherit adminuser;
+ adminpassFile = toString (pkgs.writeText "admin-pass-file" ''
+ ${adminpass}
+ '');
+ };
+ };
+
+ services.redis = {
+ enable = true;
+ };
+
+ systemd.services.nextcloud-setup= {
+ requires = ["postgresql.service"];
+ after = [
+ "postgresql.service"
+ ];
+ };
+
+ services.postgresql = {
+ enable = true;
+ ensureDatabases = [ "nextcloud" ];
+ ensureUsers = [
+ { name = "nextcloud";
+ ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
+ }
+ ];
+ };
+ };
+ };
+
+ testScript = let
+ configureRedis = pkgs.writeScript "configure-redis" ''
+ #!${pkgs.runtimeShell}
+ nextcloud-occ config:system:set redis 'host' --value 'localhost' --type string
+ nextcloud-occ config:system:set redis 'port' --value 6379 --type integer
+ nextcloud-occ config:system:set memcache.local --value '\OC\Memcache\Redis' --type string
+ nextcloud-occ config:system:set memcache.locking --value '\OC\Memcache\Redis' --type string
+ '';
+ withRcloneEnv = pkgs.writeScript "with-rclone-env" ''
+ #!${pkgs.runtimeShell}
+ export RCLONE_CONFIG_NEXTCLOUD_TYPE=webdav
+ export RCLONE_CONFIG_NEXTCLOUD_URL="http://nextcloud/remote.php/webdav/"
+ export RCLONE_CONFIG_NEXTCLOUD_VENDOR="nextcloud"
+ export RCLONE_CONFIG_NEXTCLOUD_USER="${adminuser}"
+ export RCLONE_CONFIG_NEXTCLOUD_PASS="$(${pkgs.rclone}/bin/rclone obscure ${adminpass})"
+ "''${@}"
+ '';
+ copySharedFile = pkgs.writeScript "copy-shared-file" ''
+ #!${pkgs.runtimeShell}
+ echo 'hi' | ${pkgs.rclone}/bin/rclone rcat nextcloud:test-shared-file
+ '';
+
+ diffSharedFile = pkgs.writeScript "diff-shared-file" ''
+ #!${pkgs.runtimeShell}
+ diff <(echo 'hi') <(${pkgs.rclone}/bin/rclone cat nextcloud:test-shared-file)
+ '';
+ in ''
+ start_all()
+ nextcloud.wait_for_unit("multi-user.target")
+ nextcloud.succeed("${configureRedis}")
+ nextcloud.succeed("curl -sSf http://nextcloud/login")
+ nextcloud.succeed(
+ "${withRcloneEnv} ${copySharedFile}"
+ )
+ client.wait_for_unit("multi-user.target")
+ client.succeed(
+ "${withRcloneEnv} ${diffSharedFile}"
+ )
+ '';
+})