# Tests the contents attribute of nixos/lib/make-disk-image.nix
# including its user, group, and mode attributes.
{
  system ? builtins.currentSystem,
  config ? { },
  pkgs ? import ../.. { inherit system config; },
}:

with import ../lib/testing-python.nix { inherit system pkgs; };
with pkgs.lib;

with import common/ec2.nix { inherit makeTest pkgs; };

let
  config =
    (import ../lib/eval-config.nix {
      system = null;
      modules = [
        ../modules/testing/test-instrumentation.nix
        ../modules/profiles/qemu-guest.nix
        {
          fileSystems."/" = {
            device = "/dev/disk/by-label/nixos";
            fsType = "ext4";
          };
          boot.loader.grub.device = "/dev/vda";
          boot.loader.timeout = 0;
          nixpkgs.pkgs = pkgs;
        }
      ];
    }).config;
  image =
    (import ../lib/make-disk-image.nix {
      inherit pkgs config;
      lib = pkgs.lib;
      format = "qcow2";
      contents = [
        {
          source = pkgs.writeText "testFile" "contents";
          target = "/testFile";
          user = "1234";
          group = "5678";
          mode = "755";
        }
        {
          source = ./.;
          target = "/testDir";
        }
      ];
    })
    + "/nixos.qcow2";

in
makeEc2Test {
  name = "image-contents";
  inherit image;
  script = ''
    machine.start()
    # Test that if contents includes a file, it is copied to the target.
    assert "content" in machine.succeed("cat /testFile")
    fileDetails = machine.succeed("ls -l /testFile")
    assert "1234" in fileDetails
    assert "5678" in fileDetails
    assert "rwxr-xr-x" in fileDetails

    # Test that if contents includes a directory, it is copied to the target.
    dirList = machine.succeed("ls /testDir")
    assert "image-contents.nix" in dirList
  '';
}
