at master 2.2 kB view raw
1{ lib, pkgs, ... }: 2{ 3 name = "bees"; 4 5 nodes.machine = 6 { config, pkgs, ... }: 7 { 8 virtualisation.emptyDiskImages = [ 9 { 10 size = 4096; 11 driveConfig.deviceExtraOpts.serial = "aux1"; 12 } 13 { 14 size = 4096; 15 driveConfig.deviceExtraOpts.serial = "aux2"; 16 } 17 ]; 18 virtualisation.fileSystems = { 19 "/aux1" = { 20 # filesystem configured to be deduplicated 21 device = "/dev/disk/by-id/virtio-aux1"; 22 fsType = "btrfs"; 23 autoFormat = true; 24 }; 25 "/aux2" = { 26 # filesystem not configured to be deduplicated 27 device = "/dev/disk/by-id/virtio-aux2"; 28 fsType = "btrfs"; 29 autoFormat = true; 30 }; 31 }; 32 services.beesd.filesystems = { 33 aux1 = { 34 spec = "/dev/disk/by-id/virtio-aux1"; 35 hashTableSizeMB = 16; 36 verbosity = "debug"; 37 }; 38 }; 39 }; 40 41 testScript = 42 let 43 someContentIsShared = 44 loc: 45 pkgs.writeShellScript "some-content-is-shared" '' 46 [[ $(btrfs fi du -s --raw ${lib.escapeShellArg loc}/dedup-me-{1,2} | awk 'BEGIN { count=0; } NR>1 && $3 == 0 { count++ } END { print count }') -eq 0 ]] 47 ''; 48 in 49 '' 50 # shut down the instance started by systemd at boot, so we can test our test procedure 51 machine.succeed("systemctl stop beesd@aux1.service") 52 53 machine.succeed( 54 "dd if=/dev/urandom of=/aux1/dedup-me-1 bs=1M count=8", 55 "cp --reflink=never /aux1/dedup-me-1 /aux1/dedup-me-2", 56 "cp --reflink=never /aux1/* /aux2/", 57 "sync", 58 ) 59 machine.fail( 60 "${someContentIsShared "/aux1"}", 61 "${someContentIsShared "/aux2"}", 62 ) 63 machine.succeed("systemctl start beesd@aux1.service") 64 65 # assert that "Set Shared" column is nonzero 66 machine.wait_until_succeeds( 67 "${someContentIsShared "/aux1"}", 68 ) 69 machine.fail("${someContentIsShared "/aux2"}") 70 71 # assert that 16MB hash table size requested was honored 72 machine.succeed( 73 "[[ $(stat -c %s /aux1/.beeshome/beeshash.dat) = $(( 16 * 1024 * 1024)) ]]" 74 ) 75 ''; 76}