diff options
Diffstat (limited to 't/superuser--priority-upgrade.t')
-rw-r--r-- | t/superuser--priority-upgrade.t | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/t/superuser--priority-upgrade.t b/t/superuser--priority-upgrade.t new file mode 100644 index 00000000..2486177e --- /dev/null +++ b/t/superuser--priority-upgrade.t @@ -0,0 +1,116 @@ +#!/usr/bin/perl + +use strict; +use lib '.', 't'; +use helper; +use Expect; +use urpm::util; +use Test::More 'no_plan'; + +need_root_and_prepare(); + +$ENV{TESTING_priority_upgrade} = 1; +my $name = 'priority-upgrade'; + +test('a b', 'a', 'a', 'b'); + +test('a-strict b', 'a-strict', 'a-strict b bb1', 'b', + [ 'What is your choice', "\n" ], + [ 'Proceed with the installation of the 2 packages?', "\n" ], + [ 'restarting urpmi', '' ], + ); + +test_ab_auto_select('', + [ 'What is your choice', "\n" ], + [ 'Proceed with the installation of the 3 packages?', "\n" ], + ); +test_ab_auto_select('a', + [ 'Proceed with the installation of one package?', "\n" ], + [ 'restarting urpmi', '' ], + [ 'What is your choice', "\n" ], + [ 'Proceed with the installation of the 2 packages?', "\n" ], + ); +test_ab_auto_select('b', + [ 'What is your choice', "\n" ], + [ 'Proceed with the installation of the 2 packages?', "\n" ], + [ 'restarting urpmi', '' ], + [ 'Proceed with the installation of one package?', "\n" ], + ); +test_ab_auto_select('a,b', + [ 'What is your choice', "\n" ], + [ 'Proceed with the installation of the 3 packages?', "\n" ], + ); + + +sub test_ab_auto_select { + my ($priority_upgrade, @expected) = @_; + test('a b', undef, 'a b bb1', $priority_upgrade, @expected); +} + +sub test { + my ($pkgs_v1, $wanted_v2, $pkgs_v2, $priority_upgrade, @expected) = @_; + + unlink "$::pwd/media/$name"; + symlink "$name-1", "$::pwd/media/$name"; + + urpmi_addmedia("$name $::pwd/media/$name"); + + if ($priority_upgrade) { + set_urpmi_cfg_global_options({ 'priority-upgrade' => $priority_upgrade }); + } + + urpmi($pkgs_v1); + my @pkgs_v1 = split(' ', $pkgs_v1); + is(`rpm -qa --root $::pwd/root | sort`, join('', map { "$_-1-1\n" } @pkgs_v1)); + + unlink "$::pwd/media/$name"; + symlink "$name-2", "$::pwd/media/$name"; + + if ($wanted_v2) { + urpmi_update('-a'); + urpmi_expected($wanted_v2, \@expected); + } else { + urpmi_expected('--auto-update', \@expected); + } + + + my @pkgs_v2 = split(' ', $pkgs_v2); + my @l = ( + (map { "$_-2-1\n" } @pkgs_v2), + (map { "$_-1-1\n" } difference2(\@pkgs_v1, \@pkgs_v2)), + ); + is(`rpm -qa --root $::pwd/root | sort`, join('', sort @l)); + + system_('rm -rf root'); +} + +sub urpmi_expected { + my ($options, $expected) = @_; + + if (0) { + #- try it interactively for debugging + system_(urpm_cmd('urpmi', '-d') . " $options"); + return; + } + + my $cmd = urpmi_cmd() . " $options"; + print "# $cmd\n"; + my $expect = Expect->spawn($cmd); + + foreach (@$expected) { + my ($msg, $to_send) = @$_; + + my $ok = $expect->expect(2, # timeout in seconds + [ $msg => sub { $expect->send($to_send); } ]); + print "$to_send"; + ok($ok, qq(expecting "$msg")); + $ok or return; + } + + $expect->expect(2, + [ qr/restarting urpmi/ => sub { fail('not restarting urpmi') } ], + [ 'eof' => sub {} ]); + + $expect->soft_close; + is($expect->exitstatus, 0, $cmd); +} |