aboutsummaryrefslogtreecommitdiffhomepage
path: root/hst/fsoverlay_test.go
blob: 1b14e7c9063a0809a16776a4ecba3381fb561b54 (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package hst_test

import (
	"testing"

	"hakurei.app/check"
	"hakurei.app/container"
	"hakurei.app/hst"
)

func TestFSOverlay(t *testing.T) {
	t.Parallel()

	checkFs(t, []fsTestCase{
		{"nil", (*hst.FSOverlay)(nil), false, nil, nil, nil, "<invalid>"},
		{"nil lower", &hst.FSOverlay{Target: m("/etc"), Lower: []*check.Absolute{nil}}, false, nil, nil, nil, "<invalid>"},
		{"zero lower", &hst.FSOverlay{Target: m("/etc"), Upper: m("/"), Work: m("/")}, false, nil, nil, nil, "<invalid>"},
		{"zero lower ro", &hst.FSOverlay{Target: m("/etc")}, false, nil, nil, nil, "<invalid>"},
		{"short lower", &hst.FSOverlay{Target: m("/etc"), Lower: ms("/etc")}, false, nil, nil, nil, "<invalid>"},

		{"full", &hst.FSOverlay{
			Target: m("/nix/store"),
			Lower:  ms("/mnt-root/nix/.ro-store"),
			Upper:  m("/mnt-root/nix/.rw-store/upper"),
			Work:   m("/mnt-root/nix/.rw-store/work"),
		}, true, container.Ops{&container.MountOverlayOp{
			Target: m("/nix/store"),
			Lower:  ms("/mnt-root/nix/.ro-store"),
			Upper:  m("/mnt-root/nix/.rw-store/upper"),
			Work:   m("/mnt-root/nix/.rw-store/work"),
		}}, m("/nix/store"), ms("/mnt-root/nix/.rw-store/upper", "/mnt-root/nix/.rw-store/work", "/mnt-root/nix/.ro-store"),
			"w*/nix/store:/mnt-root/nix/.rw-store/upper:/mnt-root/nix/.rw-store/work:/mnt-root/nix/.ro-store"},

		{"ro", &hst.FSOverlay{
			Target: m("/mnt/src"),
			Lower:  ms("/tmp/.src0", "/tmp/.src1"),
		}, true, container.Ops{&container.MountOverlayOp{
			Target: m("/mnt/src"),
			Lower:  ms("/tmp/.src0", "/tmp/.src1"),
		}}, m("/mnt/src"), ms("/tmp/.src0", "/tmp/.src1"),
			"*/mnt/src:/tmp/.src0:/tmp/.src1"},

		{"ro work", &hst.FSOverlay{
			Target: m("/mnt/src"),
			Lower:  ms("/tmp/.src0", "/tmp/.src1"),
			Work:   m("/tmp"),
		}, true, container.Ops{&container.MountOverlayOp{
			Target: m("/mnt/src"),
			Lower:  ms("/tmp/.src0", "/tmp/.src1"),
		}}, m("/mnt/src"), ms("/tmp/.src0", "/tmp/.src1"),
			"*/mnt/src:/tmp/.src0:/tmp/.src1"},

		{"no remount root", &hst.FSOverlay{
			Target: m("/"),
			Lower:  ms("/tmp/.src0", "/tmp/.src1"),
			Upper:  m("/tmp/upper"),
			Work:   m("/tmp/work"),
		}, true, container.Ops{&container.MountOverlayOp{
			Target: m("/"),
			Lower:  ms("/tmp/.src0", "/tmp/.src1"),
			Upper:  m("/tmp/upper"),
			Work:   m("/tmp/work"),
		}}, m("/"), ms("/tmp/upper", "/tmp/work", "/tmp/.src0", "/tmp/.src1"),
			"w*/:/tmp/upper:/tmp/work:/tmp/.src0:/tmp/.src1"},
	})
}