31-template.t (8432B)
1 #!/usr/bin/env perl 2 3 use 5.16.0; 4 use strict; 5 use warnings FATAL => 'all'; 6 use Test::More; 7 use Capture::Tiny qw/ capture_merged /; 8 use FindBin '$RealBin'; 9 use lib $RealBin; 10 use Test::Sbotools qw/ make_slackbuilds_txt set_lo sboinstall sboremove restore_perf_dummy /; 11 use File::Temp qw/ tempdir /; 12 13 if ($ENV{TEST_INSTALL}) { 14 plan tests => 29; 15 } else { 16 plan skip_all => 'Only run these tests if TEST_INSTALL=1'; 17 } 18 19 sub cleanup { 20 capture_merged { 21 system(qw!/sbin/removepkg envsettingtest!); 22 system(qw!/sbin/removepkg envsettingtest2!); 23 system(qw!/sbin/removepkg commandinreadme!); 24 system(qw!/sbin/removepkg commandinreadmespanslines!); 25 unlink "$RealBin/LO-readme/envsettingtest/perf.dummy"; 26 unlink "$RealBin/LO-readme/envsettingtest2/perf.dummy"; 27 unlink "$RealBin/LO-readme/commandinreadme/perf.dummy"; 28 unlink "$RealBin/LO-readme/commandinreadmespanslines/perf.dummy"; 29 system(qw!rm -rf /tmp/SBo/envsettingtest-1.0!); 30 system(qw!rm -rf /tmp/SBo/envsettingtest2-1.0!); 31 system(qw!rm -rf /tmp/SBo/commandinreadme-1.0!); 32 system(qw!rm -rf /tmp/SBo/commandinreadmespanslines-1.0!); 33 system(qw!rm -rf /tmp/package-envsettingtest!); 34 system(qw!rm -rf /tmp/package-envsettingtest2!); 35 system(qw!rm -rf /tmp/package-commandinreadme!); 36 system(qw!rm -rf /tmp/package-commandinreadmespanslines!); 37 }; 38 } 39 40 cleanup(); 41 make_slackbuilds_txt(); 42 set_lo("$RealBin/LO-readme"); 43 restore_perf_dummy(); 44 45 my $tempdir = tempdir(CLEANUP => 1); 46 47 # 1-3: sboinstall envsettingtest - fail 48 sboinstall '-i', '--create-template', "$tempdir/1.temp", 'envsettingtest', { input => "n\ny\ny", expected => qr!Template \Q$tempdir/1.temp saved.\E\n!, exit => 3 }; 49 is (scalar capture_merged { system cat => "$tempdir/1.temp" }, <<"TEMP1", "1.temp is correct"); 50 { 51 "build_queue" : [ 52 "envsettingtest" 53 ], 54 "commands" : { 55 "envsettingtest" : null 56 }, 57 "options" : { 58 "envsettingtest" : null 59 } 60 } 61 TEMP1 62 sboinstall '--use-template', "$tempdir/1.temp", { exit => 3, expected => qr{FOO isn't bar!.*envsettingtest: envsettingtest.SlackBuild return non-zero}s }; 63 64 # 4-6: sboinstall envsettingtest - fail 2 65 sboinstall '-i', '--create-template', "$tempdir/2.temp", 'envsettingtest', { input => "y\nFOO=foo\ny\ny", expected => qr!Template \Q$tempdir/2.temp saved.\E\n!, exit => 3 }; 66 is (scalar capture_merged { system cat => "$tempdir/2.temp" }, <<"TEMP2", "2.temp is correct"); 67 { 68 "build_queue" : [ 69 "envsettingtest" 70 ], 71 "commands" : { 72 "envsettingtest" : null 73 }, 74 "options" : { 75 "envsettingtest" : "FOO=foo" 76 } 77 } 78 TEMP2 79 sboinstall '--use-template', "$tempdir/2.temp", { exit => 3, expected => qr{FOO isn't bar!.*envsettingtest: envsettingtest.SlackBuild return non-zero}s }; 80 81 # 7-9: sboinstall envsettingtest - success 82 sboinstall '-i', '--create-template', "$tempdir/3.temp", 'envsettingtest', { input => "y\nFOO=bar\ny\ny", expected => qr!Template \Q$tempdir/3.temp saved.\E\n! }; 83 is (scalar capture_merged { system cat => "$tempdir/3.temp" }, <<"TEMP3", "3.temp is correct"); 84 { 85 "build_queue" : [ 86 "envsettingtest" 87 ], 88 "commands" : { 89 "envsettingtest" : null 90 }, 91 "options" : { 92 "envsettingtest" : "FOO=bar" 93 } 94 } 95 TEMP3 96 sboinstall '--use-template', "$tempdir/3.temp", { expected => qr{Install queue: envsettingtest.*Cleaning for envsettingtest-1[.]0}s }; 97 sboremove 'envsettingtest', { input => "y\ny", test => 0 }; 98 99 # 10-12: sboinstall envsettingtest2 - fail prereq 100 sboinstall '-i', '--create-template', "$tempdir/4.temp", 'envsettingtest2', { input => "n\ny\ny\nFOO=quux\ny\ny\nn", expected => qr!Template \Q$tempdir/4.temp saved.\E\n!, exit => 3 }; 101 is (scalar capture_merged { system cat => "$tempdir/4.temp" }, <<"TEMP4", "4.temp is correct"); 102 { 103 "build_queue" : [ 104 "envsettingtest", 105 "envsettingtest2" 106 ], 107 "commands" : { 108 "envsettingtest" : null, 109 "envsettingtest2" : null 110 }, 111 "options" : { 112 "envsettingtest" : null, 113 "envsettingtest2" : "FOO=quux" 114 } 115 } 116 TEMP4 117 sboinstall '--use-template', "$tempdir/4.temp", { exit => 3, expected => qr{Install queue: envsettingtest envsettingtest2.*FOO isn't bar!.*envsettingtest: envsettingtest.SlackBuild return non-zero}s }; 118 119 # 13-15: sboinstall envsettingtest2 - success 120 sboinstall '-i', '--create-template', "$tempdir/5.temp", 'envsettingtest2', { input => "y\nFOO=bar\ny\ny\nFOO=quux\ny\ny", expected => qr!Template \Q$tempdir/5.temp saved.\E\n! }; 121 is (scalar capture_merged { system cat => "$tempdir/5.temp" }, <<"TEMP5", "5.temp is correct"); 122 { 123 "build_queue" : [ 124 "envsettingtest", 125 "envsettingtest2" 126 ], 127 "commands" : { 128 "envsettingtest" : null, 129 "envsettingtest2" : null 130 }, 131 "options" : { 132 "envsettingtest" : "FOO=bar", 133 "envsettingtest2" : "FOO=quux" 134 } 135 } 136 TEMP5 137 sboinstall '--use-template', "$tempdir/5.temp", { expected => qr{Install queue: envsettingtest envsettingtest2.*Cleaning for envsettingtest2-1[.]0}s }; 138 sboremove 'envsettingtest2', { input => "n\ny\ny\ny", test => 0 }; 139 140 # 16-18: sboinstall commandinreadme 141 SKIP: { 142 skip "Only run useradd/groupadd commands under Travis CI", 3 unless (defined $ENV{TRAVIS} and $ENV{TRAVIS} eq 'true'); 143 skip "Only run useradd/groupadd commands if there is no test user/group", 3, if (defined getgrnam('test') or defined getpwnam('test')); 144 145 sboinstall '-i', '--create-template', "$tempdir/6.temp", 'commandinreadme', { input => "y\ny\ny", expected => qr!Template \Q$tempdir/6.temp saved.\E\n! }; 146 capture_merged { system(qw/ userdel test /); system(qw/ groupdel test /); }; 147 is (scalar capture_merged { system cat => "$tempdir/6.temp" }, <<"TEMP6", "6.temp is correct"); 148 { 149 "build_queue" : [ 150 "commandinreadme" 151 ], 152 "commands" : { 153 "commandinreadme" : [ 154 "groupadd -g 199 test", 155 "useradd -u 199 -g 199 -d /tmp test" 156 ] 157 }, 158 "options" : { 159 "commandinreadme" : 0 160 } 161 } 162 TEMP6 163 sboinstall '--use-template', "$tempdir/6.temp", { expected => sub { ! m/exited non-zero/ } }; 164 sboremove 'commandinreadme', { input => "y\ny", test => 0 }; 165 166 capture_merged { system(qw/ userdel test /); system(qw/ groupdel test /); }; 167 } 168 169 # 19-22: sboinstall envsettingtest - unreadable template 170 mkdir "$tempdir/7.temp"; 171 sboinstall '--create-template', "$tempdir/7.temp", 'envsettingtest', { input => "n\ny\ny", expected => qr!Unable to open \Q$tempdir/7.temp.\E\n!, exit => 6 }; 172 sboinstall '--use-template', "$tempdir/7.temp", { expected => qr!Could not read template from \Q$tempdir/7.temp.\E\n!, exit => 6 }; 173 system touch => "$tempdir/8.temp"; 174 sboinstall '--use-template', "$tempdir/8.temp", { expected => qr!Could not read template from \Q$tempdir/8.temp.\E\n!, exit => 6 }; 175 system "echo foo > $tempdir/9.temp"; 176 sboinstall '--use-template', "$tempdir/9.temp", { expected => qr!Could not read template from \Q$tempdir/9.temp.\E\n!, exit => 6 }; 177 178 # 23-26: sboinstall with erroneous arguments for --use-template and --create-template 179 sboinstall '--use-template', { expected => qr/Usage/, exit => 1 }; 180 sboinstall '--use-template', '', { expected => qr/Usage/, exit => 1 }; 181 sboinstall '--use-template', '', '', { expected => qr/Usage/, exit => 1 }; 182 sboinstall '--create-template', '', '', { expected => qr/Usage/, exit => 1 }; 183 184 # 27-29: sboinstall commandinreadmespanslines 185 SKIP: { 186 skip "Only run useradd/groupadd commands under Travis CI", 3 unless (defined $ENV{TRAVIS} and $ENV{TRAVIS} eq 'true'); 187 skip "Only run useradd/groupadd commands if there is no test user/group", 3 if (defined getgrnam('test') or defined getpwnam('test')); 188 189 sboinstall '-i', '--create-template', "$tempdir/10.temp", 'commandinreadmespanslines', { input => "y\ny\ny", expected => qr!Template \Q$tempdir/10.temp saved.\E\n! }; 190 capture_merged { system(qw/ userdel test /); system(qw/ groupdel test /); }; 191 is (scalar capture_merged { system cat => "$tempdir/10.temp" }, <<'TEMP10', "10.temp is correct"); 192 { 193 "build_queue" : [ 194 "commandinreadmespanslines" 195 ], 196 "commands" : { 197 "commandinreadmespanslines" : [ 198 "groupadd -g 199 test", 199 "useradd -u 199 -g 199 -d /tmp \\\n -s /bin/sh test" 200 ] 201 }, 202 "options" : { 203 "commandinreadmespanslines" : 0 204 } 205 } 206 TEMP10 207 sboinstall '--use-template', "$tempdir/10.temp", { expected => sub { ! m/exited non-zero/ } }; 208 sboremove 'commandinreadmespanslines', { input => "y\ny", test => 0 }; 209 210 capture_merged { system(qw/ userdel test /); system(qw/ groupdel test /); }; 211 } 212 213 # Cleanup 214 END { 215 cleanup(); 216 }