aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/initoverlay_test.go
blob: 68377dd4493d5509284a99ba6653b9db70fea7fe (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package container

import "testing"

func TestMountOverlayOp(t *testing.T) {
	checkOpsValid(t, []opValidTestCase{
		{"nil", (*MountOverlayOp)(nil), false},
		{"zero", new(MountOverlayOp), false},
		{"nil lower", &MountOverlayOp{Target: MustAbs("/"), Lower: []*Absolute{nil}}, false},
		{"ro", &MountOverlayOp{Target: MustAbs("/"), Lower: []*Absolute{MustAbs("/")}}, true},
		{"ro work", &MountOverlayOp{Target: MustAbs("/"), Work: MustAbs("/tmp/")}, false},
		{"rw", &MountOverlayOp{Target: MustAbs("/"), Lower: []*Absolute{MustAbs("/")}, Upper: MustAbs("/"), Work: MustAbs("/")}, true},
	})

	checkOpsBuilder(t, []opsBuilderTestCase{
		{"full", new(Ops).Overlay(
			MustAbs("/nix/store"),
			MustAbs("/mnt-root/nix/.rw-store/upper"),
			MustAbs("/mnt-root/nix/.rw-store/work"),
			MustAbs("/mnt-root/nix/.ro-store"),
		), Ops{
			&MountOverlayOp{
				Target: MustAbs("/nix/store"),
				Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
				Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
				Work:   MustAbs("/mnt-root/nix/.rw-store/work"),
			},
		}},

		{"ephemeral", new(Ops).OverlayEphemeral(MustAbs("/nix/store"), MustAbs("/mnt-root/nix/.ro-store")), Ops{
			&MountOverlayOp{
				Target: MustAbs("/nix/store"),
				Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
				Upper:  MustAbs("/"),
			},
		}},

		{"readonly", new(Ops).OverlayReadonly(MustAbs("/nix/store"), MustAbs("/mnt-root/nix/.ro-store")), Ops{
			&MountOverlayOp{
				Target: MustAbs("/nix/store"),
				Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			},
		}},
	})

	checkOpIs(t, []opIsTestCase{
		{"zero", new(MountOverlayOp), new(MountOverlayOp), false},

		{"differs target", &MountOverlayOp{
			Target: MustAbs("/nix/store/differs"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work"),
		}, &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work")}, false},

		{"differs lower", &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store/differs")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work"),
		}, &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work")}, false},

		{"differs upper", &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper/differs"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work"),
		}, &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work")}, false},

		{"differs work", &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work/differs"),
		}, &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work")}, false},

		{"equals ro", &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
		}, &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")}}, true},

		{"equals", &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work"),
		}, &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work")}, true},
	})

	checkOpMeta(t, []opMetaTestCase{
		{"nix", &MountOverlayOp{
			Target: MustAbs("/nix/store"),
			Lower:  []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
			Upper:  MustAbs("/mnt-root/nix/.rw-store/upper"),
			Work:   MustAbs("/mnt-root/nix/.rw-store/work"),
		}, "mounting", `overlay on "/nix/store" with 1 layers`},
	})
}