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