summaryrefslogtreecommitdiffstats
path: root/nixos/tests/web-apps/pixelfed/standard.nix
blob: cffedd40e2f74e467e69f051fc6fe01e60b2ecd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
  name = "pixelfed-standard";
  meta.maintainers = [ ];

  nodes = {
    server =
      { pkgs, lib, ... }:
      {
        services.pixelfed = {
          enable = true;
          domain = "pixelfed.local";
          # Configure NGINX.
          nginx = { };
          secretFile = (
            pkgs.writeText "secrets.env" ''
              # Snakeoil secret, can be any random 32-chars secret via CSPRNG.
              APP_KEY=adKK9EcY8Hcj3PLU7rzG9rJ6KKTOtYfA
            ''
          );
          settings."FORCE_HTTPS_URLS" = false;
        };

        # to prevent getting killed by oom
        virtualisation.memorySize = 2048;
        virtualisation.emptyDiskImages = [ 4096 ];
        swapDevices = [ { device = "/dev/vdb"; } ];

        # allows running nixos test on qemu without kvm, eg. github actions on aarch64-linux
        systemd.settings.Manager.DefaultDeviceTimeoutSec = lib.mkForce 1800;
        boot.initrd.kernelModules = [ "virtio_console" ];
      };
  };

  testScript = ''
    # Wait for Pixelfed PHP pool
    server.wait_for_unit("phpfpm-pixelfed.service", timeout=1800)
    # Wait for NGINX
    server.wait_for_unit("nginx.service", timeout=1800)
    # Wait for HTTP port
    server.wait_for_open_port(80, timeout=1800)
    # Access the homepage.
    server.succeed("curl -H 'Host: pixelfed.local' http://localhost")
    # Create an account
    server.succeed("pixelfed-manage user:create --name=test --username=test --email=test@test.com --password=test")
    # Create a OAuth token.
    # TODO: figure out how to use it to send a image/toot
    # server.succeed("pixelfed-manage passport:client --personal")
    # server.succeed("curl -H 'Host: pixefed.local' -H 'Accept: application/json' -H 'Authorization: Bearer secret' -F'status'='test' http://localhost/api/v1/statuses")
  '';
}