21-slackware-version.t (2419B)
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 lib "$RealBin/../SBO-Lib/lib"; 11 use Test::Execute; 12 13 if ($ENV{TRAVIS}) { 14 plan tests => 2; 15 } else { 16 plan skip_all => "Only run these tests if we're running under Travis CI"; 17 } 18 19 $path = "$RealBin/../"; 20 21 sub cleanup { 22 capture_merged { 23 rename "/etc/slackware-version.moved", "/etc/slackware-version"; 24 }; 25 } 26 27 sub move_slackware_version { 28 state $moved = 0; 29 my $fname = "/etc/slackware-version"; 30 if ($_[0]) { 31 if ($moved) { return rename "$fname.moved", $fname; } 32 } else { rename($fname, "$fname.moved") and $moved = 1; } 33 } 34 35 sub set_ver { 36 state $set = 0; 37 state $ver; 38 if ($_[0]) { 39 if ($set) { script (qw/ sboconfig -V /, $ver, { test => 0 }); } 40 } else { 41 ($ver) = script (qw/ sboconfig -l /, { expected => qr/SLACKWARE_VERSION=(.*)/, test => 0 }); 42 $ver //= 'FALSE'; 43 note "Saving original value of SLACKWARE_VERSION: $ver"; 44 $set = 1; 45 script (qw/ sboconfig -V FALSE /, { test => 0 }); 46 } 47 } 48 49 sub set_repo { 50 state $set = 0; 51 state $orig; 52 if ($_[0]) { 53 if ($set) { 54 capture_merged { system(qw!rm -rf /usr/sbo/repo!); system('mv', "$RealBin/repo.backup", "/usr/sbo/repo"); } if -e "$RealBin/repo.backup"; 55 script (qw/ sboconfig -r /, $orig, { test => 0 }); 56 } 57 } else { 58 ($orig) = script (qw/ sboconfig -l /, { expected => qr/REPO=(.*)/, test => 0 }); 59 $orig //= 'FALSE'; 60 note "Saving original value of REPO: $orig"; 61 $set = 1; 62 script (qw/ sboconfig -r FALSE /, { test => 0 }); 63 capture_merged { system(qw! mv /usr/sbo/repo !, "$RealBin/repo.backup"); } if -e "/usr/sbo/repo"; 64 } 65 } 66 67 68 set_repo(); 69 set_ver(); 70 move_slackware_version(); 71 72 # 1: Fail properly when no /etc/slackware-version file exists 73 script (qw/ sbocheck /, { exit => 2, expected => qr!^A fatal script error has occurred:\nopen_fh, /etc/slackware-version is not a file\nExiting\.$!m }); 74 75 # 2: Fail properly when /etc/slackware-version has a too old version 76 if (open(my $fh, '>', '/etc/slackware-version')) { 77 print $fh "Slackware 13.37\n"; 78 close $fh; 79 80 script (qw/ sbocheck /, { exit => 1, expected => qr!^Unsupported Slackware version: 13\.37$!m }); 81 unlink '/etc/slackware-version'; 82 } else { 83 fail "Could not write old version to /etc/slackware-version."; 84 } 85 86 # Cleanup 87 END { 88 move_slackware_version('move'); 89 set_ver('restore'); 90 set_repo('restore'); 91 }