summaryrefslogtreecommitdiffstats
path: root/RPM4/t/05transaction.t
diff options
context:
space:
mode:
Diffstat (limited to 'RPM4/t/05transaction.t')
-rw-r--r--RPM4/t/05transaction.t147
1 files changed, 147 insertions, 0 deletions
diff --git a/RPM4/t/05transaction.t b/RPM4/t/05transaction.t
new file mode 100644
index 0000000..8ee1f44
--- /dev/null
+++ b/RPM4/t/05transaction.t
@@ -0,0 +1,147 @@
+# $Id$
+
+use strict;
+use Test::More tests => 50;
+use FindBin qw($Bin);
+use File::Path;
+use File::Temp qw/tempdir/;
+use RPM4;
+use RPM4::Transaction::Problems;
+
+# Test on wrong db
+RPM4::add_macro("_dbpath /dev/null");
+ok(RPM4::rpmdbverify() != 0, "Verify non existing database (get error)");
+
+my $tempdir = tempdir();
+rmtree($tempdir) if $tempdir;
+my $testdir = "$tempdir/testdb";
+mkdir $testdir;
+
+RPM4::add_macro("_dbpath $testdir");
+
+ok(RPM4::rpmdbinit() == 0, "initdb works");
+ok(RPM4::rpmdbrebuild() == 0, "rebuild database");
+ok(RPM4::rpmdbverify() == 0, "Verify empty");
+
+my $ts;
+ok($ts = RPM4::Transaction->new(), "Open a new database");
+ok($ts->traverse(sub { print STDERR $_->tag(1000) . "\n"; }) != -1, "db->traverse()");
+
+ok($ts->importpubkey("$Bin/gnupg/test-key.gpg") == 0, "Importing a public key");
+
+my $hd = RPM4::rpm2header("$Bin/test-dep-1.0-1mdk.noarch.rpm");
+ok($hd, "Reading the header works");
+
+ok($ts->transadd($hd, "$Bin/test-dep-1.0-1mdk.noarch.rpm") == 0, "Adding a package to transaction works");
+ok($ts->transcheck() == 0, "Checking transaction works");
+ok($ts->transorder() == 0, "Run transaction order");
+
+if (0){
+my $pbs = RPM4::Transaction::Problems->new($ts);
+isa_ok(
+ $pbs,
+ 'RPM4::Db::Problems',
+ 'Can retrieve pb from transaction'
+);
+
+ok($pbs->count, "Can get number of problems");
+
+ok($pbs->init() || 1, "Resetting problems counter");
+my $strpb;
+while($pbs->hasnext()) {
+ $strpb .= $pbs->problem();
+}
+ok($strpb, "Can get problem description");
+}
+
+ok(defined($ts->transflag([qw(TEST)])), "Set transflags");
+ok($ts->transrun([ qw(LABEL PERCENT) ]) == 0, "Running transaction justdb");
+ok(!defined($ts->transreset()), "Resetting transaction");
+
+my $h = RPM4::rpm2header("$Bin/test-rpm-1.0-1mdk.noarch.rpm");
+ok($h, "Reading the header works");
+
+ok($ts->transadd($h, "$Bin/test-rpm-1.0-1mdk.noarch.rpm") == 0, "Adding a package to transaction works");
+ok($ts->traverse_transaction(sub {
+ ok($_[0]->fullname, "Can get name from te");
+ ok($_[0]->type, "Can get type from te");
+}), "traverse_transaction works");
+
+ok($ts->transcheck() == 0, "Checking transaction works");
+ok($ts->transorder() == 0, "Run transaction order");
+
+ok(defined($ts->transflag([qw(JUSTDB)])), "Set transflags");
+ok($ts->transrun( sub { my %a = @_; print STDERR "$a{what} $a{filename} $a{amount} / $a{total}\n"; }) == 0, "Running transaction justdb");
+
+ok($ts->injectheader($hd) == 0, "Injecting header in a db");
+
+my $found = 0;
+my ($rhf, $roffset);
+ok($ts->traverse( sub {
+ my ($hf, $offset) = @_;
+ scalar($hf->fullname()) eq "test-dep-1.0-1mdk.noarch" and do {
+ $found++;
+ ($rhf, $roffset) = ($hf, $offset);
+ };
+ 1;
+ }), "Running traverse");
+
+ok($found, "Can find heaer in db");
+ok($ts->deleteheader($roffset) == 0, "Removing header from db");
+
+$ts = undef; # explicitely calling DESTROY to close database
+
+ok($ts = RPM4::newdb(1), "Open existing database");
+$found = 0;
+
+($rhf, $roffset) = (undef, undef);
+ok($ts->traverse( sub {
+ my ($hf, $offset) = @_;
+ scalar($hf->fullname()) eq "test-rpm-1.0-1mdk.noarch" and do {
+ $found++;
+ ($rhf, $roffset) = ($hf, $offset);
+ }
+ }), "Running traverse");
+
+ok($found == 1, "The previously installed rpm is found");
+ok($roffset > 0, "Retrieve offset db");
+
+ok($ts->transremove_pkg("test-rpm(1.0-1mdk)") == 1, "Try to remove a rpm");
+ok($ts->transcheck() == 0, "Checking transaction works");
+ok(!defined($ts->transreset()), "Reseting current transaction");
+
+ok($ts->transremove($roffset), "Removing pkg from header and offset");
+ok($ts->transorder() == 0, "Run transaction order");
+ok($ts->transcheck() == 0, "Checking transaction works");
+ok(defined($ts->transflag([qw(JUSTDB)])), "Set transflags");
+ok($ts->transrun([ qw(LABEL PERCENT) ]) == 0, "Running transaction justdb");
+
+$found = 0;
+
+ok($ts->traverse( sub {
+ my ($hf, $offset) = @_;
+ scalar($hf->fullname()) eq "test-rpm-1.0-1mdk.noarch" and do {
+ $found++;
+ ($rhf, $roffset) = ($hf, $offset);
+ }
+ }), "Running traverse");
+
+ok($found == 0, "The previously removed rpm is not found");
+
+ok($ts->transadd($h, "test-rpm-1.0-1mdk.noarch.rpm", 1, "/usr", 1) == 0, "Adding a package to transaction with prefix");
+ok($ts->transorder() == 0, "Run transaction order");
+ok($ts->transcheck() == 0, "Checking transaction works");
+ok(!defined($ts->transreset()), "Reseting current transaction");
+
+ok($ts->transadd($h, "test-rpm-1.0-1mdk.noarch.rpm", 1, {"/etc" => "/usr" }, 1) == 0, "Adding a package to transaction with relocation works");
+ok($ts->transorder() == 0, "Run transaction order");
+ok($ts->transcheck() == 0, "Checking transaction works");
+ok(!defined($ts->transreset()), "Reseting current transaction");
+
+{
+my $spec = $ts->newspec("$Bin/test-rpm.spec");
+isa_ok($spec, 'RPM4::Spec', 'ts->newspec');
+}
+
+$ts = undef; # explicitely calling DESTROY to close database
+rmtree($tempdir);