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
|
summary: Check snap alias and snap unalias across different instances of the same snap
details: |
Snapd contains an alias system, whereas an application from a snap may be
called with an unqualified name that is different from that of the snap. The
alias system is closely related to snap names, and once snap instances were
introduced, where the same snap name may be installed under different names,
by combining snap name and the so-called instance key, then aliases could
misbehave and act on the wrong instance.
The test installs a snap twice, with different instance keys and uses
aliases in diverse ways to check that aliases from one snap instance do not
break or get confused with the other snap instance.
prepare: |
snap set system experimental.parallel-instances=true
"$TESTSTOOLS"/snaps-state install-local aliases
"$TESTSTOOLS"/snaps-state install-local-as aliases aliases_foo
restore: |
snap set system experimental.parallel-instances=null
execute: |
echo "Create manual aliases"
snap alias aliases.cmd1 alias1|MATCH ".*- aliases.cmd1 as alias1.*"
snap alias aliases.cmd2 alias2
echo "Test the aliases"
SNAP_MOUNT_DIR="$(os.paths snap-mount-dir)"
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias1)" = "aliases.cmd1"
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias2)" = "aliases.cmd2"
alias1|MATCH "ok command 1"
alias2|MATCH "ok command 2"
echo "Attempting to create the same aliases for aliases_foo should conflict"
not snap alias aliases_foo.cmd1 alias1
snap change --last=alias | MATCH 'cannot enable alias "alias1" for "aliases_foo", already enabled for "aliases"'
not snap alias aliases_foo.cmd2 alias2
snap change --last=alias | MATCH 'cannot enable alias "alias2" for "aliases_foo", already enabled for "aliases"'
echo "Check listing"
snap aliases > aliases.out
MATCH "aliases.cmd1 +alias1 +manual" < aliases.out
MATCH "aliases.cmd2 +alias2 +manual" < aliases.out
NOMATCH aliases_foo < aliases.out
echo "Disable one alias for aliases snap"
snap unalias alias2|MATCH ".*- aliases.cmd2 as alias2.*"
echo "Creating an alias for aliases_foo should work now"
snap alias aliases_foo.cmd2 alias2
echo "The symlinks should be updated and pointing to the right snaps"
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias1)" = "aliases.cmd1"
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias2)" = "aliases_foo.cmd2"
# precondition check if apps can still be run
alias1|MATCH "ok command 1"
alias2|MATCH "ok command 2"
echo "Listing should show both snaps having aliases"
snap aliases > aliases.out
MATCH "aliases.cmd1 +alias1 +manual" < aliases.out
MATCH "aliases_foo.cmd2 +alias2 +manual" < aliases.out
echo "Disable all aliases of aliases snap"
snap unalias aliases|MATCH ".*- aliases.cmd1 as alias1*"
test ! -h "$SNAP_MOUNT_DIR"/bin/alias1
echo "Aliases of aliases_foo remain unchanged"
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias2)" = "aliases_foo.cmd2"
snap aliases | MATCH "aliases_foo.cmd2 +alias2 +manual"
echo "Recreate an alias1 for aliases snap"
snap alias aliases.cmd1 alias1
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias1)" = "aliases.cmd1"
echo "Removing the aliases snap should remove its aliases"
snap remove --purge aliases
test ! -e "$SNAP_MOUNT_DIR/bin/alias1"
echo "Aliases of aliases_foo remain unchanged"
test "$(readlink "$SNAP_MOUNT_DIR"/bin/alias2)" = "aliases_foo.cmd2"
snap remove --purge aliases_foo
test ! -e "$SNAP_MOUNT_DIR/bin/alias2"
|