chiark / gitweb /
dpkg (1.18.25) stretch; urgency=medium
[dpkg] / lib / dpkg / t / t-pkginfo.c
1 /*
2  * libdpkg - Debian packaging suite library routines
3  * t-pkginfo.c - test pkginfo handling
4  *
5  * Copyright © 2009-2010,2012-2014 Guillem Jover <guillem@debian.org>
6  *
7  * This is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19  */
20
21 #include <config.h>
22 #include <compat.h>
23
24 #include <dpkg/test.h>
25 #include <dpkg/dpkg-db.h>
26 #include <dpkg/pkg.h>
27
28 static void
29 test_pkginfo_informative(void)
30 {
31         struct pkginfo pkg;
32
33         pkg_blank(&pkg);
34         test_fail(pkg_is_informative(&pkg, &pkg.installed));
35
36         pkg_set_want(&pkg, PKG_WANT_PURGE);
37         test_pass(pkg_is_informative(&pkg, &pkg.installed));
38
39         pkg_blank(&pkg);
40         pkg.installed.description = "test description";
41         test_pass(pkg_is_informative(&pkg, &pkg.installed));
42
43         /* FIXME: Complete. */
44 }
45
46 static void
47 test_pkginfo_eflags(void)
48 {
49         struct pkginfo pkg;
50
51         pkg_blank(&pkg);
52         test_pass(pkg.eflag == PKG_EFLAG_OK);
53
54         pkg_set_eflags(&pkg, PKG_EFLAG_REINSTREQ);
55         test_pass(pkg.eflag == PKG_EFLAG_REINSTREQ);
56
57         pkg_clear_eflags(&pkg, PKG_EFLAG_REINSTREQ);
58         test_pass(pkg.eflag == PKG_EFLAG_OK);
59
60         pkg_set_eflags(&pkg, 0x11);
61         test_pass(pkg.eflag == 0x11);
62         pkg_reset_eflags(&pkg);
63         test_pass(pkg.eflag == PKG_EFLAG_OK);
64 }
65
66 static void
67 test_pkginfo_instance_tracking(void)
68 {
69         struct pkgset set;
70         struct pkginfo pkg2, pkg3, pkg4;
71
72         pkgset_blank(&set);
73         pkg_blank(&pkg2);
74         pkg_blank(&pkg3);
75         pkg_blank(&pkg4);
76
77         test_pass(pkgset_installed_instances(&set) == 0);
78
79         /* Link the other instances into the pkgset. */
80         pkgset_link_pkg(&set, &pkg4);
81         pkgset_link_pkg(&set, &pkg3);
82         pkgset_link_pkg(&set, &pkg2);
83
84         /* Test installation state transitions. */
85         pkg_set_status(&pkg4, PKG_STAT_INSTALLED);
86         test_pass(pkgset_installed_instances(&set) == 1);
87
88         pkg_set_status(&pkg4, PKG_STAT_INSTALLED);
89         test_pass(pkgset_installed_instances(&set) == 1);
90
91         pkg_set_status(&pkg4, PKG_STAT_TRIGGERSPENDING);
92         test_pass(pkgset_installed_instances(&set) == 1);
93
94         pkg_set_status(&pkg4, PKG_STAT_TRIGGERSAWAITED);
95         test_pass(pkgset_installed_instances(&set) == 1);
96
97         pkg_set_status(&pkg4, PKG_STAT_HALFCONFIGURED);
98         test_pass(pkgset_installed_instances(&set) == 1);
99
100         pkg_set_status(&pkg4, PKG_STAT_UNPACKED);
101         test_pass(pkgset_installed_instances(&set) == 1);
102
103         pkg_set_status(&pkg4, PKG_STAT_HALFINSTALLED);
104         test_pass(pkgset_installed_instances(&set) == 1);
105
106         pkg_set_status(&pkg4, PKG_STAT_CONFIGFILES);
107         test_pass(pkgset_installed_instances(&set) == 1);
108
109         pkg_set_status(&pkg4, PKG_STAT_NOTINSTALLED);
110         test_pass(pkgset_installed_instances(&set) == 0);
111
112         pkg_set_status(&pkg4, PKG_STAT_NOTINSTALLED);
113         test_pass(pkgset_installed_instances(&set) == 0);
114
115         /* Toggle installation states on various packages. */
116         pkg_set_status(&pkg4, PKG_STAT_INSTALLED);
117         test_pass(pkgset_installed_instances(&set) == 1);
118
119         pkg_set_status(&pkg2, PKG_STAT_HALFINSTALLED);
120         test_pass(pkgset_installed_instances(&set) == 2);
121
122         pkg_set_status(&set.pkg, PKG_STAT_CONFIGFILES);
123         test_pass(pkgset_installed_instances(&set) == 3);
124
125         pkg_set_status(&pkg3, PKG_STAT_NOTINSTALLED);
126         test_pass(pkgset_installed_instances(&set) == 3);
127
128         pkg_set_status(&pkg3, PKG_STAT_UNPACKED);
129         test_pass(pkgset_installed_instances(&set) == 4);
130
131         pkg_set_status(&set.pkg, PKG_STAT_NOTINSTALLED);
132         test_pass(pkgset_installed_instances(&set) == 3);
133
134         pkg_set_status(&pkg2, PKG_STAT_NOTINSTALLED);
135         test_pass(pkgset_installed_instances(&set) == 2);
136
137         pkg_set_status(&pkg3, PKG_STAT_NOTINSTALLED);
138         test_pass(pkgset_installed_instances(&set) == 1);
139
140         pkg_set_status(&pkg4, PKG_STAT_NOTINSTALLED);
141         test_pass(pkgset_installed_instances(&set) == 0);
142 }
143
144 TEST_ENTRY(test)
145 {
146         test_plan(28);
147
148         test_pkginfo_informative();
149         test_pkginfo_eflags();
150         test_pkginfo_instance_tracking();
151
152         /* FIXME: Complete. */
153 }