aboutsummaryrefslogtreecommitdiffstats
path: root/t/resolve.t
blob: 46ae32a84d39aaf089e743392d92926f3df99a69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/perl

use strict ;
use warnings ;
use Test::More tests => 6;
use URPM;

chdir 't' if -d 't';

my $urpm;
my $db;

# There's currently not implemented any way for closing the rpmdb, so we cannot
# delete it from perl itself, as the rpmdb won't close before perl exists,
# which will give us errors when trying to close the rpmdb after it's been
# deleted. Therefore we just fork a shell in the background which deletes it
# after a 1 sec delay, which should give perl time to exit and close the
# rpmdb before.
END {
    system('sh -c "sleep 1; rm -rf tmp" &'); 
}

sub solve_check {
    my ($pkg, $pkgtotal, $suggest, $write) = @_;
    my $cand_pkgs = $urpm->find_candidate_packages($pkg);
    my @pkgs;
    my $out;
    my $in;
    my $file = "res/$pkg.resolve";
    if ($suggest) {
	@pkgs = $urpm->resolve_requested($db, undef, $cand_pkgs);
	$file .= ".suggests";
    } else {
	@pkgs = $urpm->resolve_requested__no_suggests_($db, undef, $cand_pkgs);
	$file .= ".nosuggests";
    }
    foreach (@pkgs) {
	$out .= $_->fullname() . "\n";
    }
    if ($write) {
    	open FILE, ">$file";
	
    	print FILE  $out;
    	close FILE;
    } else {
	open (FILE, $file);
	while (<FILE>) {
	    $in .= $_;
	}
	close FILE;
    }

    is(int @pkgs, $pkgtotal, "$pkg total number of packages");
    is($in, $out, "$file comparision");

}

SKIP: {
    my $synthesis = "res/synthesis.hdlist.cz";

    if (!(-r $synthesis)) {
    	skip "$synthesis missing, only found in svn", 6;
    }
    $db = URPM::DB::open("tmp", 1);
    $urpm = new URPM;
    $urpm->parse_synthesis($synthesis);

    solve_check("basesystem-minimal", 141, 0, 0);
    solve_check("basesystem", 527, 1, 0);
    solve_check("task-kde4", 2059, 1, 0);
}