File: delete-layer.bats

package info (click to toggle)
golang-github-containers-storage 1.24.8%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,324 kB
  • sloc: sh: 812; ansic: 319; makefile: 175; awk: 12
file content (121 lines) | stat: -rw-r--r-- 3,641 bytes parent folder | download | duplicates (5)
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
121
#!/usr/bin/env bats

load helpers

@test "delete-layer" {
	# Create a layer.
	run storage --debug=false create-layer
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	lowerlayer="$output"
	# Mount the layer.
	run storage --debug=false mount $lowerlayer
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	lowermount="$output"
	# Create a random file in the layer.
	createrandom "$lowermount"/layer1file1
	# Unmount the layer.
	storage unmount $lowerlayer

	# Create a second layer based on the first one.
	run storage --debug=false create-layer "$lowerlayer"
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	midlayer="$output"
	# Mount the second layer.
	run storage --debug=false mount $midlayer
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	midmount="$output"
	# Make sure the file from the first layer is present in this layer, then remove it.
	test -s "$midmount"/layer1file1
	rm -f -v "$midmount"/layer1file1
	# Create a new file in this layer.
	createrandom "$midmount"/layer2file1
	# Unmount the second layer.
	storage unmount $midlayer

	# Create a third layer based on the second one.
	run storage --debug=false create-layer "$midlayer"
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	upperlayer="$output"
	# Mount the third layer.
	run storage --debug=false mount $upperlayer
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	uppermount="$output"
	# Make sure the file from the second layer is present in this layer,
	# and that the one from the first didn't come back somehow..
	test -s "$uppermount"/layer2file1
	run test -s "$uppermount"/layer1file1
	[ "$status" -ne 0 ]
	# Unmount the third layer.
	storage unmount $upperlayer

	# Try to delete the first layer, which should fail because it has children.
	run storage delete-layer $lowerlayer
	[ "$status" -ne 0 ]
	# Try to delete the second layer, which should fail because it has children.
	run storage delete-layer $midlayer
	[ "$status" -ne 0 ]
	# Try to delete the third layer, which should succeed because it has no children.
	storage delete-layer $upperlayer
	# Try to delete the second again, and it should succeed because that child is gone.
	storage delete-layer $midlayer
	# Try to delete the first again, and it should succeed because that child is gone.
	storage delete-layer $lowerlayer
}

@test "delete-layer-with-mappings" {
	case "$STORAGE_DRIVER" in
	btrfs|devicemapper|overlay*|vfs|zfs)
		;;
	*)
		skip "not supported by driver $STORAGE_DRIVER"
		;;
	esac
	case "$STORAGE_OPTION" in
	*mount_program*)
		skip "test not supported when using mount_program"
		;;
	esac
	run storage --debug=false create-layer -r
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	lowerlayer="$output"

	run storage --debug=false create-layer -r --uidmap 0:100:100000 --gidmap 0:100:100000  $lowerlayer
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	lowerlayer2="$output"

	run storage --debug=false create-layer -r --uidmap 0:200:100000 --gidmap 0:200:100000  $lowerlayer2
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	upperlayer="$output"

        # Expect an error as both lower layers are referenced
	run storage --debug=false delete-layer $lowerlayer2
	[ "$status" -ne 0 ]
	run storage --debug=false delete-layer $lowerlayer
	[ "$status" -ne 0 ]

	run storage --debug=false delete-layer $upperlayer
	[ "$status" -eq 0 ]
	run storage --debug=false delete-layer $lowerlayer2
	[ "$status" -eq 0 ]

        run storage --debug=false create-image $lowerlayer
	[ "$status" -eq 0 ]
	[ "$output" != "" ]
	image="$output"

        # The layer is referenced by the image, it cannot be deleted
	run storage --debug=false delete-layer $upperlayer
	[ "$status" -ne 0 ]

	run storage --debug=false delete-image $image
	[ "$status" -eq 0 ]
}