Support parallel installations. The idea is that for CAD screener, we want
to be able to install this on the same machine as a standard AVOT setup
(most notably for John's laptop). To allow for the possibility of a second
application that might have the same requirements, we add the concept of
vendor-specific distributions. Thus we can have one distribution for CAD
screener and one for The Next Big Thing. It doesn't seem trivial to have
both CAD screener and AVOT under the same vendor tag so we'll have to have
AVOT under "City Occupational" and CAD screener under "City Occupational Ltd"
or some such kludge.
Most of this is done although we are very short of test cases (in particular
we don't test that it's actually possible to install CAD screener in parallel
with AVOT or to update either of them once installed, which is fundamental).
We also have a lot of baggage left over, including an intercept of razor_set.
The problem that this was introduced to debug has been fixed but it looks
like there are a number of memory leaks which it might be useful to help
track down so it has been left in place for now.
There is still a lot of confusion in plover between path-based and URI-based
API. We should review the API, decide what we want and have a general clear up.
There is also confusion as to the purpose of RAZOR_ROOT (and meaning; path or
URI). This is not used at all in librazor (although it is used in razor.exe).
Ideally we shouldn't use it in plover or plover-gtk either although again, we
might want to support it or an equivalent in (some of) the various executables.
Work that would still to nice to do for CAD screener:
- uninstall (ideally as an installed program that hooks into Add/Remove programs
but even re-running the installer would be acceptable).
- xz support (smaller packages).
- repomd.xml and xml:base (would be needed for an Internet installer).
- graphical installer.
2 * Copyright (C) 2016 J. Ali Harlow <ali@juiblex.co.uk>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #include <razor/razor.h>
25 #include <plover/package.h>
26 #include <plover/packageset.h>
27 #include <plover-gtk/packagestore.h>
28 #include "treemodel.h"
30 static void verify_package_store(PloverPackageStore *store,
31 GSList *expected_packages)
36 PloverPackage *package;
37 PloverPackageSet *package_set;
41 GSList *expected,*lnk;
43 model=GTK_TREE_MODEL(store);
44 test_tree_model(model);
45 expected=g_slist_copy(expected_packages);
46 g_assert_cmpint(gtk_tree_model_get_n_columns(model),==,PLOVER_PACKAGE_STORE_NO_COLUMNS);
47 g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_OBJ_COLUMN),==,PLOVER_TYPE_PACKAGE);
48 g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_INSTALLED_COLUMN),==,G_TYPE_BOOLEAN);
49 g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_ICON_COLUMN),==,GDK_TYPE_PIXBUF);
50 g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_NAME_COLUMN),==,G_TYPE_STRING);
51 g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_VERSION_COLUMN),==,G_TYPE_STRING);
52 g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_SUMMARY_COLUMN),==,G_TYPE_STRING);
55 if (!gtk_tree_model_iter_nth_child(model,&iter,NULL,i))
57 gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_OBJ_COLUMN,
59 package=g_value_dup_object(&value);
60 lnk=g_slist_find(expected,package);
62 g_warning("Unexpected package in store: %s",
63 plover_package_get_name(package));
66 g_object_unref(lnk->data);
67 expected=g_slist_delete_link(expected,lnk);
69 g_value_unset(&value);
70 gtk_tree_model_get_value(model,&iter,
71 PLOVER_PACKAGE_STORE_INSTALLED_COLUMN,&value);
72 g_assert_cmpint(G_VALUE_TYPE(&value),==,G_TYPE_BOOLEAN);
73 /* Can't check value of installed yet, it
74 * isn't set (or even properly defined).
76 g_value_unset(&value);
77 gtk_tree_model_get_value(model,&iter,
78 PLOVER_PACKAGE_STORE_ICON_COLUMN,&value);
79 icon=g_value_get_object(&value);
81 g_assert(GDK_IS_PIXBUF(icon));
82 g_value_unset(&value);
83 gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_NAME_COLUMN,
85 s=g_value_get_string(&value);
86 g_assert_cmpstr(plover_package_get_name(package),==,s);
87 g_value_unset(&value);
88 gtk_tree_model_get_value(model,&iter,
89 PLOVER_PACKAGE_STORE_VERSION_COLUMN,&value);
90 s=g_value_get_string(&value);
91 g_assert_cmpstr(plover_package_get_version(package),==,s);
92 g_value_unset(&value);
93 gtk_tree_model_get_value(model,&iter,
94 PLOVER_PACKAGE_STORE_SUMMARY_COLUMN,&value);
95 s=g_value_get_string(&value);
96 if (*plover_package_get_summary(package))
97 g_assert_cmpstr(plover_package_get_summary(package),==,s);
100 nosummary=g_strconcat("The ",plover_package_get_name(package),
102 g_assert_cmpstr(nosummary,==,s);
105 g_value_unset(&value);
109 package=PLOVER_PACKAGE(expected->data);
110 g_warning("%d missing package%s in store, including %s",
111 g_slist_length(expected),g_slist_length(expected)==1?"":"s",
112 plover_package_get_name(package));
116 static void test_empty(void)
118 PloverPackageStore *store;
119 store=plover_package_store_new();
120 g_assert(!plover_package_store_get_sets(store));
121 verify_package_store(store,NULL);
122 g_object_unref(store);
125 static void test_basic(void)
127 PloverPackageSet *package_set;
128 PloverPackageStore *store;
131 package_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,
134 g_error("../yum-repo-test-dir: %s",err->message);
135 store=plover_package_store_new();
136 plover_package_store_add_set(store,package_set);
137 expected=g_slist_copy(plover_package_set_get_packages(package_set));
138 g_slist_foreach(expected,(GFunc)g_object_ref,NULL);
139 g_object_unref(package_set);
140 verify_package_store(store,expected);
141 g_slist_foreach(expected,(GFunc)g_object_unref,NULL);
142 g_slist_free(expected);
143 g_object_unref(store);
146 static PloverPackageSet *no_details_new(void)
148 struct razor_set *set;
149 struct razor_importer *importer;
150 PloverPackageSet *package_set;
151 importer=razor_importer_create();
152 razor_importer_begin_package(importer,"no-details","1-1","noarch");
153 razor_importer_add_details(importer,"","","","");
154 razor_importer_add_property(importer,"no-details",
155 RAZOR_PROPERTY_PROVIDES|RAZOR_PROPERTY_EQUAL,"1-1");
156 razor_importer_finish_package(importer);
157 set=razor_importer_finish(importer);
158 package_set=plover_package_set_new_from_razor(set);
159 razor_set_unref(set);
163 static void test_no_details(void)
165 PloverPackageSet *package_set;
166 PloverPackageStore *store;
168 package_set=no_details_new();
169 store=plover_package_store_new();
170 plover_package_store_add_set(store,package_set);
171 expected=g_slist_copy(plover_package_set_get_packages(package_set));
172 g_slist_foreach(expected,(GFunc)g_object_ref,NULL);
173 g_object_unref(package_set);
174 verify_package_store(store,expected);
175 g_slist_foreach(expected,(GFunc)g_object_unref,NULL);
176 g_slist_free(expected);
177 g_object_unref(store);
180 static void test_remove(void)
182 PloverPackageSet *yum_set,*nodetails_set;
183 PloverPackageStore *store;
186 store=plover_package_store_new();
187 yum_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,&err);
189 g_error("../yum-repo-test-dir: %s",err->message);
190 plover_package_store_add_set(store,yum_set);
191 nodetails_set=no_details_new();
192 expected=g_slist_copy(plover_package_set_get_packages(nodetails_set));
193 g_slist_foreach(expected,(GFunc)g_object_ref,NULL);
194 plover_package_store_add_set(store,nodetails_set);
195 plover_package_store_remove_set(store,yum_set);
196 g_object_unref(nodetails_set);
197 g_object_unref(yum_set);
198 verify_package_store(store,expected);
199 g_slist_foreach(expected,(GFunc)g_object_unref,NULL);
200 g_slist_free(expected);
201 g_object_unref(store);
204 int main(int argc,char **argv)
207 gtk_test_init(&argc,&argv,NULL);
208 g_test_bug_base("mailto:ali@juiblex.co.uk");
209 g_test_add_func("/packagestore/empty",test_empty);
210 g_test_add_func("/packagestore/basic",test_basic);
211 g_test_add_func("/packagestore/no-details",test_no_details);
212 g_test_add_func("/packagestore/remove",test_remove);