sbotools2

Maintenance fork of the original sbotools version 2
git clone git://git.server.ky/slackcoder/sbotools2
Log | Files | Refs | README

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 }