aboutsummaryrefslogtreecommitdiff
path: root/tests/cfg-link.testscript
blob: b396c1a1f6b8abafd026a19f0cda1a388d2fb2b8 (plain)
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# file      : tests/cfg-link.testscript
# license   : MIT; see accompanying LICENSE file

.include common.testscript

cfg_create += 2>!

# @@ To verify the linking result use cfg-list command rather than pkg-status,
#    when implemented.
#

test.arguments += -d cfg

cfg_uuid  = '18f48b4b-b5d9-4712-b98c-1930df1c4228'
acfg_uuid = '28f48b4b-b5d9-4712-b98c-1930df1c4228'

: success
:
{
  $cfg_create -d  cfg --name 'main';
  $cfg_create -d acfg --name 'shared' --config-uuid "$acfg_uuid" &acfg/***;

  # Try to link configuration under the same name.
  #
  $* cfg 2>>/~"%EOE%" != 0;
    %error: linking configuration .+/cfg/ with itself%
    %  info: uuid: .{36}%
    EOE

  # Try to link configuration under the same name.
  #
  $* acfg --name 'main' 2>>/~"%EOE%" != 0;
    %error: linking configuration .+/acfg/ using current configuration name 'main'%
      info: consider specifying alternative name with --name
    EOE

  # Link configuration.
  #
  $* acfg 2>>/~"%EOE%";
    %linked configuration .+/acfg/%
      info: uuid: $acfg_uuid
      info: type: target
      info: name: shared
      info: id:   1
    EOE

  $pkg_status -d cfg  libfoo >'libfoo unknown';
  $pkg_status -d acfg libfoo >'libfoo unknown';

  # Test that the recreated configuration can be implicitly re-linked.
  #
  rm -r cfg;
  $cfg_create -d cfg --name 'test' --config-uuid "$cfg_uuid" &cfg/***;

  $* acfg 2>>/~"%EOE%";
    %warning: current configuration .+/cfg/ is already implicitly linked with .+/acfg/%
    %linked configuration .+/acfg/%
      info: uuid: $acfg_uuid
      info: type: target
      info: name: shared
      info: id:   1
    EOE

  # Test that the repeated link is reported.
  #
  $* acfg 2>>/~%EOE% != 0;
    %error: configuration with uuid .{36} is already linked as \.\./acfg/%
    EOE

  rm -r acfg;

  $cfg_create -d acfg --name 'shared' &acfg/***;

  # Test that the path clash is reported.
  #
  $* acfg 2>>/~%EOE% != 0;
    %error: configuration with path .+/acfg/ is already linked%
    EOE

  # Test that the name clash is reported.
  #
  $cfg_create -d acfg2 --name 'shared' &acfg2/***;

  $* acfg2 --name 'shared' 2>>/EOE != 0;
    error: configuration with name shared is already linked as ../acfg/
      info: consider specifying alternative name with --name
    EOE

  $* acfg2 2>>/~%EOE%;
    warning: configuration with name shared is already linked as ../acfg/, linking as unnamed
    %linked configuration .+/acfg2/%
    %  info: uuid: .{36}%
      info: type: target
      info: id:   2
    EOE

  # Test that the integrity check fails.
  #
  $pkg_status -d cfg libfoo 2>>/~"%EOE%" != 0;
    error: configuration acfg/ uuid mismatch
    %  info: uuid .+%
      info: linked with cfg/ as $acfg_uuid
    EOE

  # Link the second configuration.
  #
  rm -r acfg;
  $cfg_create -d acfg --name 'shared' --config-uuid "$acfg_uuid" &acfg/***;

  $pkg_status -d cfg   libfoo >'libfoo unknown';
  $pkg_status -d acfg2 libfoo >'libfoo unknown';

  # Test that the configuration type mismatch is reported.
  #
  mv cfg cfg.tmp;
  $cfg_create -d cfg --type host --config-uuid "$cfg_uuid";

  $* -d acfg2 cfg 2>>/EOE != 0;
    error: configuration cfg/ type mismatch
      info: type host
      info: implicitly linked with acfg2/ as target
    EOE

  rm -r cfg;
  mv cfg.tmp cfg;

  # Make the implicit link explicit.
  #
  $* -d acfg2 cfg 2>>/~"%EOE%";
    %linked configuration .+/cfg/%
      info: uuid: $cfg_uuid
      info: type: target
      info: name: test
      info: id:   1
    EOE

  $pkg_status -d cfg libfoo >'libfoo unknown';
  $pkg_status -d acfg2 libfoo >'libfoo unknown';

  $* -d acfg2 cfg 2>>/~%EOE% != 0;
    %error: configuration with uuid .{36} is already linked as \.\./cfg/%
    EOE

  # Test that the implicit link path clash is reported.
  #
  rm -r cfg;
  $cfg_create -d cfg --name 'test' &cfg/***;

  $* acfg2 2>>/~%EOE% != 0;
    %error: current configuration .+/cfg/ is already linked with .+/acfg2/%
    EOE

  # Test that the repeated implicit link is reported.
  #
  $cfg_create -d cfg2 --config-uuid "$cfg_uuid";

  $* -d cfg2 acfg2 2>>/~"%EOE%" != 0;
    %error: current configuration $cfg_uuid is already linked with .+/acfg2/%
    EOE

  # Make sure that current configuration is implicitly linked as unnamed.
  #
  # @@ Make sure that's really the case when the cfg-list command is
  #    implemented.
  #
  rm -r cfg2;
  $cfg_create -d cfg2 --name 'test' &cfg2/***;

  $* -d cfg2 acfg2 2>>/~%EOE%;
    %linked configuration .+/acfg2/%
    %  info: uuid: .{36}%
      info: type: target
      info: name: shared
      info: id:   1
    EOE

  # Test that the integrity check fails.
  #
  $pkg_status -d cfg2 libfoo 2>>/~"%EOE%" != 0;
    error: configuration cfg/ uuid mismatch
    %  info: uuid .+%
      info: linked with acfg2/ as $cfg_uuid
    EOE

  rm -r cfg;
  $cfg_create -d cfg --name 'test' --config-uuid "$cfg_uuid" &cfg/***;

  $pkg_status -d cfg2  libfoo >'libfoo unknown';
  $pkg_status -d acfg2 libfoo >'libfoo unknown'
}