# file : tests/cfg-link.testscript # license : MIT; see accompanying LICENSE file .include common.testscript cfg_create += 2>! cfg_info += --link uuid1 = '18f48b4b-b5d9-4712-b98c-1930df1c4228' uuid2 = '28f48b4b-b5d9-4712-b98c-1930df1c4228' uuid3 = '38f48b4b-b5d9-4712-b98c-1930df1c4228' +$cfg_create -d cfg1 --name 'main' --uuid "$uuid1" &cfg1/*** +$cfg_create -d cfg2 --name 'shared' --uuid "$uuid2" &cfg2/*** clone_cfgs = cp -r ../cfg1 ../cfg2 ./ sp = ' ' : self : { $cfg_create -d cfg1 --uuid "$uuid1" &cfg1/***; $* -d cfg1 cfg1 2>>/"EOE" != 0 error: linking configuration $~/cfg1/ with itself info: uuid: $uuid1 EOE } : same-name : { $cfg_create -d cfg1 --name 'main' &cfg1/***; $cfg_create -d cfg2 --name 'shared' &cfg2/***; $* -d cfg1 cfg2 --name 'main' 2>>/"EOE" != 0 error: linking configuration $~/cfg2/ using current configuration name 'main' info: consider specifying alternative name with --name EOE } : basic : { $clone_cfgs; $* -d cfg1 cfg2 2>>/"EOE"; linked with configuration $~/cfg2/ uuid: $uuid2 type: target name: shared id: 1 EOE $cfg_info -d cfg1 >>/"EOO"; path: $~/cfg1/ uuid: $uuid1 type: target name: main path: $~/cfg2/ uuid: $uuid2 type: target name: shared EOO $cfg_info -d cfg2 --backlink >>/"EOO"; path: $~/cfg2/ uuid: $uuid2 type: target name: shared path: $~/cfg1/ uuid: $uuid1 type: target name: main EOO # While at it, test that an implicit link is unnamed. # mv cfg1 cfg1.tmp; $cfg_info -d cfg2 --dangling >>/"EOO" path: $~/cfg2/ uuid: $uuid2 type: target name: shared path: $~/cfg1/ uuid: $uuid1 type: target name:$sp EOO } : implicit-relink : { $clone_cfgs; $* -d cfg1 cfg2 2>!; rm -r cfg1/; $cfg_create -d cfg1 --name 'foo' --uuid "$uuid1"; $* -d cfg1 cfg2 2>>/"EOE"; warning: current configuration $~/cfg1/ is already implicitly linked with $~/cfg2/ linked with configuration $~/cfg2/ uuid: $uuid2 type: target name: shared id: 1 EOE $cfg_info -d cfg1 >>/"EOO" path: $~/cfg1/ uuid: $uuid1 type: target name: foo path: $~/cfg2/ uuid: $uuid2 type: target name: shared EOO } : turn-implicit-explicit : { $clone_cfgs; $* -d cfg1 cfg2 2>!; $* -d cfg2 cfg1 2>>/"EOE"; linked with configuration $~/cfg1/ uuid: $uuid1 type: target name: main id: 1 EOE $cfg_info -d cfg2 >>/"EOO"; path: $~/cfg2/ uuid: $uuid2 type: target name: shared path: $~/cfg1/ uuid: $uuid1 type: target name: main EOO $cfg_info -d cfg1 >>/"EOO"; path: $~/cfg1/ uuid: $uuid1 type: target name: main path: $~/cfg2/ uuid: $uuid2 type: target name: shared EOO # While at it, test that relink attempt is reported. # $* -d cfg2 cfg1 2>>/"EOE" != 0 error: configuration with uuid $uuid1 is already linked as ../cfg1/ EOE } : uuid-clash : { $clone_cfgs; $* -d cfg1 cfg2 2>!; $* -d cfg1 cfg2 2>>/"EOE" != 0 error: configuration with uuid $uuid2 is already linked as ../cfg2/ EOE } : path-clash : { $clone_cfgs; $* -d cfg1 cfg2 2>!; mv cfg2 cfg2.tmp; $cfg_create -d cfg2 --name 'shared' --uuid "$uuid3" &cfg2/***; $* -d cfg1 cfg2 2>>/"EOE" != 0 error: configuration with path $~/cfg2/ is already linked EOE } : name-clash : { $clone_cfgs; $* -d cfg1 cfg2 2>!; $cfg_create -d cfg3 --name 'shared' --uuid "$uuid3" &cfg3/***; $* -d cfg1 cfg3 --name 'shared' 2>>/"EOE" != 0; error: configuration with name shared is already linked as ../cfg2/ info: consider specifying alternative name with --name EOE $* -d cfg1 cfg3 2>>/"EOE" warning: configuration with name shared is already linked as ../cfg2/, linking as unnamed linked with configuration $~/cfg3/ uuid: $uuid3 type: target id: 2 EOE } : implicit-link-path-clash : { $clone_cfgs; $* -d cfg1 cfg2 2>!; $* -d cfg2 cfg1 2>!; mv cfg1 cfg1.tmp; $cfg_create -d cfg1 --name 'main' --uuid "$uuid3" &cfg1/***; $* -d cfg1 cfg2 2>>/"EOE" != 0 error: current configuration $~/cfg1/ is already linked with $~/cfg2/ EOE } : uuid-mismatch : { $clone_cfgs; $* -d cfg1 cfg2 2>!; mv cfg2 cfg2.tmp; $cfg_create -d cfg2 --name 'shared' --uuid "$uuid3"; $cfg_info -d cfg1 >- 2>>/"EOE" != 0; error: configuration cfg2/ uuid mismatch info: uuid $uuid3 info: linked with cfg1/ as $uuid2 EOE rm -r cfg2; mv cfg2.tmp cfg2; $cfg_info -d cfg1 >>/"EOO" path: $~/cfg1/ uuid: $uuid1 type: target name: main path: $~/cfg2/ uuid: $uuid2 type: target name: shared EOO } : type-mismatch : { $clone_cfgs; $* -d cfg1 cfg2 2>!; rm -r cfg2; $cfg_create -d cfg2 --name 'shared' --uuid "$uuid2" --type 'shared'; $cfg_info -d cfg1 >- 2>>/"EOE" != 0 error: configuration cfg2/ type mismatch info: type shared info: linked with cfg1/ as target EOE }