aboutsummaryrefslogtreecommitdiff
path: root/tests/cfg-link.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cfg-link.testscript')
-rw-r--r--tests/cfg-link.testscript290
1 files changed, 290 insertions, 0 deletions
diff --git a/tests/cfg-link.testscript b/tests/cfg-link.testscript
new file mode 100644
index 0000000..6d98f03
--- /dev/null
+++ b/tests/cfg-link.testscript
@@ -0,0 +1,290 @@
+# 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
+}