aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/initoverlay_test.go
blob: ae4cd1bf5ea03c4aeeabbf6fdd83070ae8447079 (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
package container

import "testing"

func TestMountOverlayOp(t *testing.T) {
	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`},
	})
}