sbotools2

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

01-unit.t (11236B)


      1 #!/usr/bin/env perl
      2 
      3 use strict;
      4 use warnings;
      5 use Test::More;
      6 use Test::Exit;
      7 use FindBin '$RealBin';
      8 use lib "$RealBin/../SBO-Lib/lib";
      9 use SBO::Lib qw/ %config check_multilib get_installed_packages get_local_outdated_versions get_readme_contents get_sbo_location get_sbo_locations indent open_fh script_error usage_error user_prompt /;
     10 use Capture::Tiny qw/ capture_merged /;
     11 use File::Temp 'tempdir';
     12 use Cwd;
     13 
     14 plan tests => 61;
     15 
     16 # 1-2: test script_error();
     17 {
     18 	my $exit;
     19 	my $out = capture_merged { $exit = exit_code { script_error(); }; };
     20 
     21 	is ($exit, 2, 'script_error() exited with 2');
     22 	is ($out, "A fatal script error has occurred. Exiting.\n", 'script_error() gave correct output');
     23 }
     24 
     25 # 3-4: test usage_error();
     26 {
     27 	my $exit;
     28 	my $out = capture_merged { $exit = exit_code { usage_error('whatever'); }; };
     29 
     30 	is ($exit, 1, 'usage_error() exited with 1');
     31 	is ($out, "whatever\n", 'usage_error() gave correct output');
     32 }
     33 
     34 # 5-8: test open_fh();
     35 {
     36 	my $exit;
     37 	my $out = capture_merged { $exit = exit_code { open_fh($0); }; };
     38 
     39 	is ($exit, 2, 'open_fh() exited with 2');
     40 	is ($out, "A fatal script error has occurred:\nopen_fh requires two arguments\nExiting.\n", 'open_fh() gave correct output');
     41 
     42 	SKIP: {
     43 		skip 'Tests invalid if ./foo/bar exists.', 2 if -e "$RealBin/foo/bar";
     44 		my ($warn, $status) = open_fh("$RealBin/foo/bar/baz", '>');
     45 
     46 		like ($warn, qr!Unable to open .*/foo/bar/baz\.\n!, 'open_fh() gave correct return value (1)');
     47 		is ($status, 6, 'open_fh() gave correct return value (2)');
     48 	}
     49 }
     50 
     51 # 9-13: test get_slack_version();
     52 SKIP: {
     53 	skip 'Tests invalid if /etc/slackware-version exists.', 5 if -e '/etc/slackware-version';
     54 
     55 	local $config{SLACKWARE_VERSION} = 'FALSE';
     56 
     57 	my $exit;
     58 	my $out = capture_merged { $exit = exit_code{ SBO::Lib::get_slack_version(); }; };
     59 
     60 	is ($exit, 2, 'get_slack_version() exited with 2');
     61 	is ($out, "A fatal script error has occurred:\nopen_fh, /etc/slackware-version is not a file\nExiting.\n", 'get_slack_version() gave correct output');
     62 
     63 	my ($fh) = open_fh('/etc/slackware-version', '>');
     64 	print $fh "Slackware 0.0\n";
     65 	close $fh;
     66 
     67 	undef $exit;
     68 	$out = capture_merged { $exit = exit_code{ SBO::Lib::get_slack_version(); }; };
     69 
     70 	is ($exit, 1, 'get_slack_version() exited with 1');
     71 	is ($out, "Unsupported Slackware version: 0.0\nSuggest you set the sbotools REPO setting to https://github.com/Ponce/slackbuilds.git\n\n", 'get_slack_version() gave correct output (Unsupported)');
     72 
     73 	($fh) = open_fh('/etc/slackware-version', '>');
     74 	print $fh "Slackware 14.1\n";
     75 	close $fh;
     76 
     77 	is (SBO::Lib::get_slack_version(), '14.1', 'get_slack_version() returned the correct version');
     78 
     79 	unlink '/etc/slackware-version';
     80 }
     81 
     82 # 14-15: test indent();
     83 is(indent(0, 'foo'), 'foo', 'indent(0,...) returns correctly');
     84 is(indent(1, "foo\n\nbar"), " foo\n\n bar", 'indent(1,...) returns correctly');
     85 
     86 # 16-20: test check_repo() and migrate_repo();
     87 SKIP: {
     88 	skip 'Test invalid if no SLACKBUILDS.TXT exists.', 5 if ! -e '/usr/sbo/repo/SLACKBUILDS.TXT';
     89 
     90 	system(qw"cp /usr/sbo/repo/SLACKBUILDS.TXT /usr/sbo");
     91 	system(qw"rm -rf", "$RealBin/repo.backup");
     92 	system(qw"mv /usr/sbo/repo", "$RealBin/repo.backup");
     93 
     94 	is (SBO::Lib::check_repo(), 1, 'check_repo() returned 1 when /usr/sbo/repo was empty');
     95 
     96 	SBO::Lib::migrate_repo();
     97 	ok (-e '/usr/sbo/repo/SLACKBUILDS.TXT', '/usr/sbo/repo/SLACKBUILDS.TXT moved back by migrate_repo()');
     98 
     99 	system("mv /usr/sbo/repo/* /usr/sbo");
    100 	system(qw! rmdir /usr/sbo/repo !);
    101 
    102 	SBO::Lib::migrate_repo();
    103 	ok (-d '/usr/sbo/repo', '/usr/sbo/repo correctly recreated by migrate_repo()');
    104 
    105 	system(qw"rm /usr/sbo/repo/SLACKBUILDS.TXT");
    106 	system(qw! rmdir /usr/sbo/repo !);
    107 
    108 	system('touch', '/usr/sbo/repo');
    109 	my $exit;
    110 	my $out = capture_merged { $exit = exit_code { SBO::Lib::check_repo(); }; };
    111 
    112 	is ($out, "Unable to create /usr/sbo/repo.\n\n", 'check_repo() output is good');
    113 	is ($exit, 1, 'check-repo() exit code is good');
    114 
    115 	system('rm', '/usr/sbo/repo');
    116 	system("mv", "$RealBin/repo.backup", "/usr/sbo/repo");
    117 }
    118 
    119 # 21-25: test check_repo();
    120 SKIP: {
    121 	skip 'Test invalid if no SLACKBUILDS.TXT exists.', 5 if ! -e '/usr/sbo/repo/SLACKBUILDS.TXT';
    122 
    123 	my $exit;
    124 	my $out = capture_merged { $exit = exit_code { SBO::Lib::check_repo(); }; };
    125 
    126 	is ($exit, 1, 'check_repo() exited with 1');
    127 	is ($out, "/usr/sbo/repo exists and is not empty. Exiting.\n\n", 'check_repo() gave correct output');
    128 
    129 	system(qq'rm -rf "$RealBin/repo.backup"');
    130 	system(qq'mv /usr/sbo/repo "$RealBin/repo.backup"');
    131 	system(qq'mkdir /usr/sbo/repo');
    132 
    133 	undef $exit;
    134 	my $res;
    135 	$out = capture_merged { $exit = exit_code { $res = SBO::Lib::check_repo(); }; };
    136 
    137 	is ($exit, undef, "check_repo() didn't exit");
    138 	is ($out, '', "check_repo() didn't print anything");
    139 	is ($res, 1, "check_repo() returned correctly");
    140 
    141 	system(qq'rmdir /usr/sbo/repo');
    142 	system(qq'mv "$RealBin/repo.backup" /usr/sbo/repo');
    143 }
    144 
    145 # 26-27: test rsync_sbo_tree();
    146 SKIP: {
    147 	skip 'Test invalid if /foo-bar exists.', 2 if -e '/foo-bar';
    148 
    149 	local $config{SLACKWARE_VERSION} = '14.1';
    150 
    151 	my $res;
    152 	my $out = capture_merged { $res = SBO::Lib::rsync_sbo_tree('/foo-bar', ''); };
    153 
    154 	ok (!$res, q"rsync_sbo_tree('/foo-bar') returned false");
    155 	like ($out, qr!rsync: (.*)change_dir "/foo-bar" failed!, q"rsync_sbo_tree('/foo-bar') gave correct output");
    156 }
    157 
    158 # 28-37: test git_sbo_tree(), check_git_remote(), generate_slackbuilds_txt(), and pull_sbo_tree();
    159 {
    160 	system(qw! mv /usr/sbo/repo /usr/sbo/backup !) if -d '/usr/sbo/repo';
    161 	system(qw! mkdir -p /usr/sbo/repo/.git !);
    162 
    163 	my $res;
    164 	capture_merged { $res = SBO::Lib::git_sbo_tree('', ''); };
    165 	is ($res, 0, q!git_sbo_tree('') returned 0!);
    166 
    167 	system(qw! rm -r /usr/sbo/repo !) if -d '/usr/sbo/repo';
    168 	system(qw! mkdir -p /usr/sbo/repo/.git !);
    169 	my ($fh) = open_fh('/usr/sbo/repo/.git/config', '>');
    170 	print $fh qq'[remote "origin"]\n'; print $fh "foo=bar\n"; print $fh "url=\n";
    171 	close $fh;
    172 
    173 	undef $res;
    174 	capture_merged { $res = SBO::Lib::git_sbo_tree('', ''); };
    175 	is ($res, 0, q!git_sbo_tree('') with .git/config returned 0 !);
    176 	undef $res;
    177 	capture_merged { $res = SBO::Lib::git_sbo_tree('foo', ''); };
    178 	is ($res, 0, q!git_sbo_tree('foo') returned 0!);
    179 
    180 	system(qw! rm -r /usr/sbo/repo !) if -d '/usr/sbo/repo';
    181 	system(qw! mkdir -p /usr/sbo/repo/.git !);
    182 	($fh) = open_fh('/usr/sbo/repo/.git/config', '>');
    183 	print $fh qq'[remote "origin"]\n'; print $fh "[]";
    184 	close $fh;
    185 
    186 	undef $res;
    187 	capture_merged { $res = SBO::Lib::check_git_remote('/usr/sbo/repo', 'foo'); };
    188 	is ($res, 0, 'check_git_remote() returned 0');
    189 
    190 	system(qw! rm -r /usr/sbo/repo !) if -d '/usr/sbo/repo';
    191 
    192 	is (SBO::Lib::generate_slackbuilds_txt(), 0, 'generate_slackbuilds_txt() returned 0');
    193 
    194 	system(qw! mkdir -p /usr/sbo/repo/foo/bar !);
    195 
    196 	is (SBO::Lib::generate_slackbuilds_txt(), 1, 'generate_slackbuilds_txt() returned 1');
    197 
    198 	system(qw! rm -r /usr/sbo/repo !) if -d '/usr/sbo/repo';
    199 	system(qw! mv /usr/sbo/backup /usr/sbo/repo !) if -d '/usr/sbo/backup';
    200 
    201 	my $sbohome = '/usr/sbo';
    202 	system('mv', $sbohome, "$sbohome.bak");
    203 
    204 	my $cwd = getcwd();
    205 	undef $res;
    206 	my $out = capture_merged { $res = SBO::Lib::git_sbo_tree('', ''); };
    207 
    208 	is ($out, '', 'git_sbo_tree() no output');
    209 	is ($res, 0, 'git_sbo_tree() returned 0');
    210 	is (getcwd(), $cwd, 'git_sbo_tree() left us where we started');
    211 
    212 	system('mv', "$sbohome.bak", $sbohome);
    213 }
    214 
    215 # 37: test get_installed_packages();
    216 {
    217 	system(qw!mv /var/log/packages /var/log/packages.backup!);
    218 	system(qw!mkdir -p /var/log/packages!);
    219 	system(qw!touch /var/log/packages/sbotoolstestingfile!);
    220 	is (@{ get_installed_packages('SBO') }, 0, 'get_installed_packages() returned an empty arrayref');
    221 	system(qw!rm -r /var/log/packages!);
    222 	system(qw!mv /var/log/packages.backup /var/log/packages!);
    223 }
    224 
    225 # 38-40: test get_sbo_location() and get_sbo_locations();
    226 {
    227 	my $exit;
    228 	my $out = capture_merged { $exit = exit_code { get_sbo_location([]); }; };
    229 
    230 	is ($exit, 2, 'get_sbo_location([]) exited with 2');
    231 	is ($out, "A fatal script error has occurred:\nget_sbo_location requires an argument.\nExiting.\n", 'get_sbo_location([]) gave correct output');
    232 
    233 	SKIP: {
    234 		skip 'Test invalid if no SLACKBUILDS.TXT exists.', 1 if ! -e '/usr/sbo/repo/SLACKBUILDS.TXT';
    235 		local $config{LOCAL_OVERRIDES} = 'FALSE';
    236 		my %res = get_sbo_locations('nonexistentslackbuild');
    237 
    238 		is (%res+0, 0, q"get_sbo_locations('nonexistentslackbuild') returned an empty hash");
    239 	}
    240 }
    241 
    242 # 41: test get_local_outdated_versions();
    243 {
    244 	local $config{LOCAL_OVERRIDES} = 'FALSE';
    245 	is(scalar get_local_outdated_versions(), 0, 'get_local_outdated_versions() returned an empty list');
    246 }
    247 
    248 # 42: test get_filename_from_link();
    249 {
    250 	is (SBO::Lib::get_filename_from_link('/'), undef, "get_filename_from_link() returned undef");
    251 }
    252 
    253 # 43-46: test revert_slackbuild();
    254 {
    255 	my $tmp = tempdir(CLEANUP => 1);
    256 	is (SBO::Lib::revert_slackbuild("$tmp/foo"), 1, "revert_slackbuild() returned 1");
    257 
    258 	system('touch', "$tmp/foo.orig");
    259 	is (SBO::Lib::revert_slackbuild("$tmp/foo"), 1, "revert_slackbuild() returned 1");
    260 	ok (-f "$tmp/foo", 'foo.orig renamed to foo');
    261 	ok (!-f "$tmp/foo.orig", 'foo.orig is no more');
    262 }
    263 
    264 # 47: test get_src_dir();
    265 SKIP: {
    266     skip 'Test invalid if /foo-bar exists.', 1 if -e '/foo-bar';
    267 	my $scalar = '';
    268 	open(my $fh, '<', \$scalar) or skip "Could not open needed filehandle", 1;
    269 
    270 	local $SBO::Lib::Build::tmpd = "/foo-bar";
    271 	is (scalar @{ SBO::Lib::get_src_dir($fh) }, 0, "get_src_dir() returned an empty array ref");
    272 }
    273 
    274 # 48: test get_readme_contents();
    275 {
    276 	my @ret = get_readme_contents(undef);
    277 	is ($ret[0], undef, "get_readme_contents() returned undef");
    278 }
    279 
    280 # 49-50: test user_prompt();
    281 {
    282 	my $exit;
    283 	my $out = capture_merged { $exit = exit_code { user_prompt('foo', undef); }; };
    284 
    285 	is ($exit, 1, 'user_prompt() exited with 1');
    286 	is ($out, "Unable to locate foo in the SlackBuilds.org tree.\n", 'user_prompt() gave correct output');
    287 }
    288 
    289 # 51-53: test perform_sbo();
    290 SKIP: {
    291 	skip 'Tests invalid if /foo exists.', 3 if -e "/foo";
    292 
    293 	my @res = SBO::Lib::perform_sbo(JOBS => 'FALSE', LOCATION => '/foo', ARCH => 1);
    294 
    295 	is ($res[0], "Unable to backup /foo/foo.SlackBuild to /foo/foo.SlackBuild.orig\n", 'perform_sbo returned correct pkg');
    296 	is ($res[1], undef, 'perform_sbo returned correct src');
    297 	is ($res[2], 6, 'perform_sbo returned correct exit');
    298 }
    299 
    300 # 54-60: test version_cmp();
    301 {
    302 	chomp(my $kv = `uname -r`);
    303 	$kv =~ s/-/_/g;
    304 
    305 	my @res = map { SBO::Lib::version_cmp(@$_); } [ '1.0', '1.0' ], [ "1.0_$kv", '1.0' ], [ '1.0', "1.0_$kv" ], [ "1.0_$kv", "1.0_$kv" ];
    306 
    307 	is ($res[0], 0, "version_cmp(1.0, 1.0) returned 0");
    308 	is ($res[1], 0, "version_cmp(1.0_k, 1.0) returned 0");
    309 	is ($res[2], 0, "version_cmp(1.0, 1.0_k) returned 0");
    310 	is ($res[3], 0, "version_cmp(1.0_k, 1.0_k) returned 0");
    311 
    312 	no warnings 'redefine';
    313 	local *SBO::Lib::Util::get_kernel_version = sub { "foo_bar" };
    314 
    315 	is (SBO::Lib::version_cmp('1.0', '1.0_foo_bar'), 0, "version_cmp(1.0, 1.0_foo_bar) returned 0");
    316 
    317   is (SBO::Lib::version_cmp('1.0_en_US', '1.0'), 0, "version_cmp(1.0_en_US, 1.0) returned 0");
    318   is (SBO::Lib::version_cmp('1.0', '1.0_en_US'), 0, "version_cmp(1.0, 1.0_en_US) returned 0");
    319 }
    320 
    321 # 61: test check_multilib();
    322 {
    323 	my $file = "/etc/profile.d/32dev.sh";
    324 
    325 	my $moved = rename $file, "$file.orig";
    326 
    327 	is (check_multilib(), undef, "check_multilib() returned undef when $file was missing");
    328 
    329 	rename "$file.orig", $file if $moved;
    330 }