Skip to content

Commit

Permalink
cmd/snap-update-ns: add opt-foo-bar test case data
Browse files Browse the repository at this point in the history
This test case uses a layout on /opt/foo/bar to expose content from another
snap. The refresh test case is more interesting, as it shows how the content is
refreshed to a new revision, and that new revision is actually visible in
practice.

This test case is similar to opt-foo but it shows that only one mimic was
required, namely that on /opt. Both /opt/foo and /opt/foo/bar are then normal
directories. This is reflected in the data set.

The data set is not yet used in practice, but shows a new way of collecting
data that is less repetetive, and how the tested release of snapd is faulty.

Test data was generated with snapd 2.66

Signed-off-by: Zygmunt Krynicki <[email protected]>
  • Loading branch information
zyga committed Oct 16, 2024
1 parent e4594df commit 2d086cd
Show file tree
Hide file tree
Showing 27 changed files with 255 additions and 0 deletions.
7 changes: 7 additions & 0 deletions cmd/snap-update-ns/testdata/opt-foo-bar/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Mountinfo files are useful for debugging but not reproducible
# and not useful for being stored in history.
*.mountinfo
# Snap files are built from local files.
*.snap
# Find files are logs from running find in the mount namespace of the snap.
*.find
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x2/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x2/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x1/opt none bind,ro 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-layout/x1/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tmpfs / tmpfs x-snapd.origin=rootfs 0 0
tmpfs /opt tmpfs x-snapd.synthetic,x-snapd.needed-by=/opt/foo/bar,mode=0755,uid=0,gid=0 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x2/opt none bind,ro 0 0
/snap/test-snapd-layout/x2/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/snap/test-snapd-layout/x2/opt/foo/bar /opt/foo/bar none rbind,rw,x-snapd.origin=layout 0 0
/snap/test-snapd-content/x1/opt /snap/test-snapd-layout/x2/opt none bind,ro 0 0
146 changes: 146 additions & 0 deletions cmd/snap-update-ns/testdata/opt-foo-bar/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# This makefiles uses grouped-target feature and relies on it for correctness.
ifeq (,$(findstring grouped-target,$(.FEATURES)))
$(error You need make with the grouped-taget feature to build this dataset)
endif

fstab_files = \
1-initially-connected.current.fstab \
1-initially-connected.desired.fstab \
2-after-disconnect.desired.fstab \
2-after-disconnect.current.fstab \
3-after-reconnect.desired.fstab \
3-after-reconnect.current.fstab \
4-initially-disconnected-then-connected.before.current.fstab \
4-initially-disconnected-then-connected.desired.fstab \
4-initially-disconnected-then-connected.current.fstab \
5-initially-connected-then-content-refreshed.before.current.fstab \
5-initially-connected-then-content-refreshed.desired.fstab \
5-initially-connected-then-content-refreshed.current.fstab \
6-initially-connected-then-app-refreshed.before.current.fstab \
6-initially-connected-then-app-refreshed.desired.fstab \
6-initially-connected-then-app-refreshed.current.fstab

# None of the fstab files can be built in parallel as the depend on global system state.
.NOTPARALLEL: $(fstab_files)
.PHONY: all
all: $(fstab_files)

.PHONY:
clean:
rm -f $(fstab_files)
rm -f *.snap
rm -f *.mountinfo
rm -f *.find

$(addprefix 1-initially-connected,.desired.fstab .current.fstab .mountinfo) &: PREFIX=1-initially-connected
$(addprefix 1-initially-connected,.desired.fstab .current.fstab .mountinfo) &: test-snapd-layout_a_all.snap test-snapd-content_a_all.snap
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content
sudo snap install --dangerous $(word 1,$^)
sudo snap install --dangerous $(word 2,$^)
sudo snap connect test-snapd-layout:content test-snapd-content:content
snap run test-snapd-layout.sh -c true
cp /var/lib/snapd/mount/snap.test-snapd-layout.fstab $(PREFIX).desired.fstab
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).current.fstab
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt cat /proc/self/mountinfo >$(PREFIX).mountinfo
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /opt >$(PREFIX).opt.find
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content

$(addprefix 2-after-disconnect,.desired.fstab .current.fstab .mountinfo) &: PREFIX=2-after-disconnect
$(addprefix 2-after-disconnect,.desired.fstab .current.fstab .mountinfo) &: test-snapd-layout_a_all.snap test-snapd-content_a_all.snap
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content
sudo snap install --dangerous $(word 1,$^)
sudo snap install --dangerous $(word 2,$^)
sudo snap connect test-snapd-layout:content test-snapd-content:content
snap run test-snapd-layout.sh -c true
sudo snap disconnect test-snapd-layout:content test-snapd-content:content
cp /var/lib/snapd/mount/snap.test-snapd-layout.fstab $(PREFIX).desired.fstab
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).current.fstab
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt cat /proc/self/mountinfo >$(PREFIX).mountinfo
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /opt >$(PREFIX).opt.find
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content

$(addprefix 3-after-reconnect,.desired.fstab .current.fstab .mountinfo) &: PREFIX=3-after-reconnect
$(addprefix 3-after-reconnect,.desired.fstab .current.fstab .mountinfo) &: test-snapd-layout_a_all.snap test-snapd-content_a_all.snap
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content
sudo snap install --dangerous $(word 1,$^)
sudo snap install --dangerous $(word 2,$^)
sudo snap connect test-snapd-layout:content test-snapd-content:content
snap run test-snapd-layout.sh -c true
sudo snap disconnect test-snapd-layout:content test-snapd-content:content
sudo snap connect test-snapd-layout:content test-snapd-content:content
cp /var/lib/snapd/mount/snap.test-snapd-layout.fstab $(PREFIX).desired.fstab
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).current.fstab
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt cat /proc/self/mountinfo >$(PREFIX).mountinfo
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /opt >$(PREFIX).opt.find
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content

$(addprefix 4-initially-disconnected-then-connected,.before.current.fstab .desired.fstab .current.fstab .mountinfo) &: PREFIX=4-initially-disconnected-then-connected
$(addprefix 4-initially-disconnected-then-connected,.before.current.fstab .desired.fstab .current.fstab .mountinfo) &: test-snapd-layout_a_all.snap test-snapd-content_a_all.snap
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content
sudo snap install --dangerous $(word 1,$^)
sudo snap install --dangerous $(word 2,$^)
snap connections test-snapd-layout | grep -xF 'content test-snapd-layout:content - -'
snap run test-snapd-layout.sh -c true
# This file is used by unit tests model the changes needed after the refresh below.
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).before.current.fstab
sudo snap connect test-snapd-layout:content test-snapd-content:content
cp /var/lib/snapd/mount/snap.test-snapd-layout.fstab $(PREFIX).desired.fstab
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).current.fstab
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt cat /proc/self/mountinfo >$(PREFIX).mountinfo
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /opt >$(PREFIX).opt.find
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content

$(addprefix 5-initially-connected-then-content-refreshed,.before.current.fstab .desired.fstab .current.fstab .mountinfo) &: PREFIX=5-initially-connected-then-content-refreshed
$(addprefix 5-initially-connected-then-content-refreshed,.before.current.fstab .desired.fstab .current.fstab .mountinfo) &: test-snapd-layout_a_all.snap test-snapd-content_a_all.snap test-snapd-content_b_all.snap
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content
sudo snap install --dangerous $(word 1,$^)
sudo snap install --dangerous $(word 2,$^)
sudo snap connect test-snapd-layout:content test-snapd-content:content
snap run test-snapd-layout.sh -c true
# This file is used by unit tests model the changes needed after the refresh below.
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).before.current.fstab
sudo snap install --dangerous $(word 3,$^) # Refresh the content.
cp /var/lib/snapd/mount/snap.test-snapd-layout.fstab $(PREFIX).desired.fstab
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).current.fstab
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt cat /proc/self/mountinfo >$(PREFIX).mountinfo
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /snap/test-snapd-content/x1/ >$(PREFIX).content-x1.find
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /snap/test-snapd-content/x2/ >$(PREFIX).content-x2.find
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /opt >$(PREFIX).opt.find
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content

$(addprefix 6-initially-connected-then-app-refreshed,.before.current.fstab .desired.fstab .current.fstab .mountinfo) &: PREFIX=6-initially-connected-then-app-refreshed
$(addprefix 6-initially-connected-then-app-refreshed,.before.current.fstab .desired.fstab .current.fstab .mountinfo) &: test-snapd-layout_a_all.snap test-snapd-content_a_all.snap
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content
sudo snap install --dangerous $(word 1,$^)
sudo snap install --dangerous $(word 2,$^)
sudo snap connect test-snapd-layout:content test-snapd-content:content
snap run test-snapd-layout.sh -c true
# This file is used by unit tests model the changes needed after the refresh below.
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).before.current.fstab
sudo snap install --dangerous $(word 1,$^) # Refresh the app.
cp /var/lib/snapd/mount/snap.test-snapd-layout.fstab $(PREFIX).desired.fstab
cp /run/snapd/ns/snap.test-snapd-layout.fstab $(PREFIX).current.fstab
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt cat /proc/self/mountinfo >$(PREFIX).mountinfo
sudo nsenter -m/run/snapd/ns/test-snapd-layout.mnt find /opt >$(PREFIX).opt.find
sudo snap remove --purge test-snapd-layout
sudo snap remove --purge test-snapd-content

test-snapd-layout_a_all.snap: test-snapd-layout
snap pack $<

test-snapd-content_a_all.snap: test-snapd-content-a
snap pack $<

test-snapd-content_b_all.snap: test-snapd-content-b
snap pack $<
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: test-snapd-content
version: a

confinement: strict
base: core24
architecture: all

slots:
content:
interface: content
content: content
read:
- /opt
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: test-snapd-content
version: b

confinement: strict
base: core24
architecture: all

slots:
content:
interface: content
content: content
read:
- /opt
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh
PS1='$ '
exec /bin/bash "$@"
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh
PS1='$ '
exec /bin/sh "$@"
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: test-snapd-layout
version: a

confinement: strict
base: core24
architecture: all

apps:
sh:
command: bin/sh
bash:
command: bin/bash

plugs:
content: # Note that this plug is always called "content" for convenience.
content: content
interface: content
target: $SNAP/opt

layout:
# /opt is a real directory but /opt/foo needs to be created as a mimic.
# On the other hand /opt/foo/bar should not be a mimic and is created as a
# regular subdirectory having constructed /opt/foo.
/opt/foo/bar:
bind: $SNAP/opt/foo/bar

0 comments on commit 2d086cd

Please sign in to comment.