File Coverage

File:t/prereqs.t
Coverage:98.1%

linestmtbrancondsubpodtimecode
1
1
1
1
42614
19
60
use strict;
2
1
1
1
7
3
32
use warnings;
3
4
1
1
1
427
121718
14
use Test::Most;
5
1
1
1
148970
1172
8
use lib 't';
6
1
1
1
370
6
7978
use TestLib qw( t_module t_startup t_teardown t_capture t_action_files );
7
8
1
243667
exit main();
9
10sub main {
11
1
10
    require_ok( t_module() );
12
13
1
396
    t_startup();
14
1
36
    t_action_files(
15        [ 'adt/state_sixth',      'adt_alt/state_fifth',  undef                  ],
16        [ 'adt/state_first',      undef,                  'adt_alt/state_second' ],
17        [ 'adt/state_fourth',     'adt_alt/state_third',  'adt_alt/state_fifth'  ],
18        [ 'adt_alt/state_third',  'adt_alt/state_second', 'adt/state_fourth'     ],
19        [ 'adt_alt/state_fifth',  'adt/state_fourth',     'adt/state_sixth'      ],
20        [ 'adt_alt/state_second', 'adt/state_first',      'adt_alt/state_third'  ],
21    );
22
1
7
    t_module->init;
23
1
5
    t_module->add('adt');
24
1
5
    t_module->add('adt_alt');
25
26
1
6
    single_prereqs();
27
1
14748
    multi_prereqs();
28
1
363
    update();
29
30
1
557
    t_teardown();
31
1
26
    done_testing();
32
1
905
    return 0;
33}
34
35sub single_prereqs {
36    is(
37
1
1
4
9
        ( t_capture( sub { t_module->status } ) )[0],
38        join( "\n",
39            'diff - adt',
40            '  + adt/state_first',
41            '  + adt/state_fourth',
42            '  + adt/state_sixth',
43            'diff - adt_alt',
44            '  + adt_alt/state_fifth',
45            '  + adt_alt/state_second',
46            '  + adt_alt/state_third',
47        ) . "\n",
48        'status() of adt/* and adt_alt/* actions',
49    );
50
51    {
52
1
1
1
340
12
6
        my ( $out, $err, $exp ) = t_capture( sub { t_module->deploy('adt_alt/state_second') } );
53
54
1
268
        is(
55            $out,
56            join( "\n",
57                'begin - deploy: adt/state_first',
58                'ok - deploy: adt/state_first',
59                'ok - verify: adt/state_first',
60                'begin - deploy: adt_alt/state_second',
61                'ok - deploy: adt_alt/state_second',
62                'ok - verify: adt_alt/state_second',
63            ) . "\n",
64            'single deploy with single prereq',
65        );
66
67
1
23672
        ok( ! $err, 'no warnings in last command' );
68
1
2827
        ok( ! $exp, 'no exceptions in last command' );
69    }
70
71    is(
72
1
1
527
43
        ( t_capture( sub { t_module->status } ) )[0],
73        join( "\n",
74            'diff - adt',
75            '  + adt/state_fourth',
76            '  + adt/state_sixth',
77            'diff - adt_alt',
78            '  + adt_alt/state_fifth',
79            '  + adt_alt/state_third',
80        ) . "\n",
81        'status() of adt/* and adt_alt/* actions after limited deployment',
82    );
83
84
1
4864
    _revert_to_clean();
85}
86
87sub _revert_to_clean {
88    {
89
2
2
2
22
9
116
        my ( $out, $err, $exp ) = t_capture( sub { t_module->revert('adt/state_first') } );
90
91
2
646
        is(
92            $out,
93            join( "\n",
94                'begin - revert: adt_alt/state_second',
95                'ok - revert: adt_alt/state_second',
96                'begin - revert: adt/state_first',
97                'ok - revert: adt/state_first',
98            ) . "\n",
99            'single revert with single prereq',
100        );
101
102
2
15859
        ok( ! $err, 'no warnings in last command' );
103
2
919
        ok( ! $exp, 'no exceptions in last command' );
104    }
105
106    is(
107
2
2
8101
82
        ( t_capture( sub { t_module->status } ) )[0],
108        join( "\n",
109            'diff - adt',
110            '  + adt/state_first',
111            '  + adt/state_fourth',
112            '  + adt/state_sixth',
113            'diff - adt_alt',
114            '  + adt_alt/state_fifth',
115            '  + adt_alt/state_second',
116            '  + adt_alt/state_third',
117        ) . "\n",
118        'status() of adt/* and adt_alt/* actions after revert',
119    );
120}
121
122sub multi_prereqs {
123    {
124
1
1
1
6
6
16
        my ( $out, $err, $exp ) = t_capture( sub { t_module->deploy('adt_alt/state_fifth') } );
125
126
1
201
        is(
127            $out,
128            join( "\n",
129                'begin - deploy: adt/state_first',
130                'ok - deploy: adt/state_first',
131                'ok - verify: adt/state_first',
132                'begin - deploy: adt_alt/state_second',
133                'ok - deploy: adt_alt/state_second',
134                'ok - verify: adt_alt/state_second',
135                'begin - deploy: adt_alt/state_third',
136                'ok - deploy: adt_alt/state_third',
137                'ok - verify: adt_alt/state_third',
138                'begin - deploy: adt/state_fourth',
139                'ok - deploy: adt/state_fourth',
140                'ok - verify: adt/state_fourth',
141                'begin - deploy: adt_alt/state_fifth',
142                'ok - deploy: adt_alt/state_fifth',
143                'ok - verify: adt_alt/state_fifth',
144            ) . "\n",
145            'single deploy with multiple prereqs',
146        );
147
148
1
15100
        ok( ! $err, 'no warnings in last command' );
149
1
552
        ok( ! $exp, 'no exceptions in last command' );
150    }
151
152    is(
153
1
1
813
59
        ( t_capture( sub { t_module->status } ) )[0],
154        join( "\n",
155            'diff - adt',
156            '  + adt/state_sixth',
157            'ok - adt_alt',
158        ) . "\n",
159        'status() of adt/* and adt_alt/* actions after revert',
160    );
161
162    {
163
1
1
1
570
10
30
        my ( $out, $err, $exp ) = t_capture( sub { t_module->revert('adt_alt/state_third') } );
164
165
1
393
        is(
166            $out,
167            join( "\n",
168                'begin - revert: adt_alt/state_fifth',
169                'ok - revert: adt_alt/state_fifth',
170                'begin - revert: adt/state_fourth',
171                'ok - revert: adt/state_fourth',
172                'begin - revert: adt_alt/state_third',
173                'ok - revert: adt_alt/state_third',
174            ) . "\n",
175            'single deploy with multiple prereqs',
176        );
177
178
1
3839
        ok( ! $err, 'no warnings in last command' );
179
1
252
        ok( ! $exp, 'no exceptions in last command' );
180    }
181
182    is(
183
1
1
278
41
        ( t_capture( sub { t_module->status } ) )[0],
184        join( "\n",
185            'diff - adt',
186            '  + adt/state_fourth',
187            '  + adt/state_sixth',
188            'diff - adt_alt',
189            '  + adt_alt/state_fifth',
190            '  + adt_alt/state_third',
191        ) . "\n",
192        'status() of adt/* and adt_alt/* actions after revert',
193    );
194
195
1
339
    _revert_to_clean();
196}
197
198sub update {
199    is(
200
1
1
6
67
        ( t_capture( sub { t_module->update } ) )[0],
201        join( "\n",
202            'begin - deploy: adt/state_first',
203            'ok - deploy: adt/state_first',
204            'ok - verify: adt/state_first',
205            'begin - deploy: adt_alt/state_second',
206            'ok - deploy: adt_alt/state_second',
207            'ok - verify: adt_alt/state_second',
208            'begin - deploy: adt_alt/state_third',
209            'ok - deploy: adt_alt/state_third',
210            'ok - verify: adt_alt/state_third',
211            'begin - deploy: adt/state_fourth',
212            'ok - deploy: adt/state_fourth',
213            'ok - verify: adt/state_fourth',
214            'begin - deploy: adt_alt/state_fifth',
215            'ok - deploy: adt_alt/state_fifth',
216            'ok - verify: adt_alt/state_fifth',
217            'begin - deploy: adt/state_sixth',
218            'ok - deploy: adt/state_sixth',
219            'ok - verify: adt/state_sixth',
220        ) . "\n",
221        'update() of clean state',
222    );
223
224    is(
225
1
1
2526
94
        ( t_capture( sub { t_module->status } ) )[0],
226        join( "\n",
227            'ok - adt',
228            'ok - adt_alt',
229        ) . "\n",
230        'status() of adt/* and adt_alt/* actions after revert',
231    );
232
233
1
575
    t_action_files('adt_new/state');
234
1
25
    my $watch_file;
235
1
28
    ok( open( $watch_file, '>', 'dest.watch' ) or 0, 'write out new dest.watch file' );
236
1
484
    print $watch_file "adt\nadt_alt\nadt_new";
237
1
25
    close $watch_file;
238
239    {
240
1
1
1
5
29
24
        my ( $out, $err, $exp ) = t_capture( sub { t_module->update } );
241
242
1
265
        is(
243            $err,
244            "Added adt_new to the watch list\n",
245            'update() based on changed dest.watch file adds new watch',
246        );
247
248
1
1545
        is(
249            $out,
250            join( "\n",
251                'begin - deploy: adt_new/state',
252                'ok - deploy: adt_new/state',
253                'ok - verify: adt_new/state',
254            ) . "\n",
255            'update() based on changed dest.watch file runs OK',
256        );
257    }
258}