pre-inst should install 'installer' group rather than the hardcoded plover-gtkui
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.
26 #include <plover/plover.h>
27 #include <plover-gtk/transactionhelper.h>
30 gboolean manual_mode=FALSE;
33 static void complete_changed(GtkWidget *page,GParamSpec *child_property,
34 PloverTransactionHelper *helper)
36 g_message("complete child property for %s now %s",
37 gtk_buildable_get_name(GTK_BUILDABLE(page)),
38 gtk_assistant_get_page_complete(helper->assistant,page)?"TRUE":"FALSE");
42 PloverTransactionHelper *get_transaction_helper(void)
47 PloverTransactionHelper *helper;
48 dir=g_getenv("gtk_srcdir");
49 s=g_build_filename(dir,"software-installation.ui",NULL);
51 if (!gtk_builder_add_from_file(ui,s,&err))
52 g_error("%s: %s",s,err->message);
54 helper=plover_transaction_helper_new(ui);
57 if (helper->assistant)
61 for(i=gtk_assistant_get_n_pages(helper->assistant)-1;i>=0;i--)
63 page=gtk_assistant_get_nth_page(helper->assistant,i);
64 g_signal_connect(page,"child-notify::complete",
65 G_CALLBACK(complete_changed),helper);
66 g_message("complete child property for %s initially %s",
67 gtk_buildable_get_name(GTK_BUILDABLE(page)),
68 gtk_assistant_get_page_complete(helper->assistant,page)?
76 static void test_init(void)
78 PloverTransactionHelper *helper;
79 helper=get_transaction_helper();
80 g_object_unref(helper);
83 static void test_basic_properties(void)
87 gchar *default_prefix;
90 PloverTransactionHelper *helper;
91 PloverPackageSet *installed;
92 PloverRepository *upstream;
93 upstream=plover_repository_new_from_yum("../yum-repo-test-dir",&err);
95 g_error("../yum-repo-test-dir: %s",err->message);
96 uri=razor_path_to_uri("../razor-test-dir");
97 installed=plover_package_set_new_from_installed(uri,&err);
100 g_error("../razor-test-dir: %s",err->message);
101 helper=get_transaction_helper();
102 g_assert(!plover_transaction_helper_get_visible(helper));
103 plover_transaction_helper_set_installed(helper,installed);
104 g_assert(plover_transaction_helper_get_installed(helper)==installed);
105 plover_transaction_helper_set_upstream(helper,upstream);
106 g_assert(plover_transaction_helper_get_upstream(helper,&err)==upstream);
108 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
109 g_assert_cmpstr(plover_transaction_helper_get_base(helper),==,"../yum-repo-test-dir");
110 comps=plover_transaction_helper_get_comps(helper,&err);
112 g_assert(plover_comps_lookup_group(comps,"base"));
113 prefix=plover_transaction_helper_get_prefix(helper,&err);
115 comps=plover_comps_new();
116 plover_comps_set_vendor(comps,"Acme Corporation");
117 default_prefix=plover_comps_get_default_prefix(comps);
118 plover_comps_free(comps);
119 g_assert_cmpstr(prefix,==,default_prefix);
120 g_free(default_prefix);
121 g_assert(!plover_transaction_helper_get_visible(helper));
122 g_assert(!plover_transaction_helper_get_error(helper,NULL));
123 g_object_unref(upstream);
124 g_object_unref(installed);
125 g_object_unref(helper);
128 static void test_install_group(void)
133 PloverPackageSet *installed;
134 PloverTransactionHelper *helper;
135 root=g_strdup("razor-test-dir-XXXXXX");
136 g_assert(mkdtemp(root));
137 uri=razor_path_to_uri(root);
139 g_setenv("RAZOR_ROOT",uri,TRUE);
141 helper=get_transaction_helper();
142 uri=razor_path_to_uri("../razor-test-dir");
143 installed=plover_package_set_new_from_installed(uri,&err);
146 g_error("../razor-test-dir: %s",err->message);
147 plover_transaction_helper_set_installed(helper,installed);
148 g_object_unref(installed);
149 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
150 if (!plover_transaction_helper_install_group(helper,"base",&err))
151 g_error("base: %s",err->message);
153 g_object_unref(helper);
154 g_unsetenv("RAZOR_ROOT");
157 static void test_remove_group(void)
162 PloverPackageSet *installed;
163 PloverTransactionHelper *helper;
164 struct plover_vector *packages;
165 char *pkgs[]={"zip",NULL};
166 root=g_strdup("razor-test-dir-XXXXXX");
167 g_assert(mkdtemp(root));
168 uri=razor_path_to_uri(root);
169 g_setenv("RAZOR_ROOT",uri,TRUE);
170 helper=get_transaction_helper();
171 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
172 packages=plover_transaction_helper_group_get_default_packages(helper,
175 g_error("zappy: %s",err->message);
176 if (!plover_install("../yum-repo-test-dir",NULL,packages->strings,&err))
177 g_error("plover_install: %s",err->message);
178 plover_vector_free(packages);
179 installed=plover_package_set_new_from_installed(uri,&err);
181 g_error("%s: %s",root,err->message);
182 plover_transaction_helper_set_installed(helper,installed);
183 g_object_unref(installed);
184 if (!plover_transaction_helper_remove_group(helper,"zappy",&err))
185 g_error("zappy: %s",err->message);
187 g_object_unref(helper);
188 g_unsetenv("RAZOR_ROOT");
193 static void test_update(void)
198 PloverPackageSet *installed;
199 PloverTransactionHelper *helper;
200 root=g_strdup("razor-test-dir-XXXXXX");
201 g_assert(mkdtemp(root));
202 uri=razor_path_to_uri(root);
203 g_setenv("RAZOR_ROOT",uri,TRUE);
205 helper=get_transaction_helper();
206 uri=razor_path_to_uri("../razor-test-dir");
207 installed=plover_package_set_new_from_installed(uri,&err);
210 g_error("../razor-test-dir: %s",err->message);
211 plover_transaction_helper_set_installed(helper,installed);
212 g_object_unref(installed);
213 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
214 if (plover_transaction_helper_update(helper,&err))
215 g_error("plover_transaction_helper_update reports work to be done");
216 g_assert_error(err,PLOVER_GENERAL_ERROR,PLOVER_GENERAL_ERROR_NO_WORK);
217 g_object_unref(helper);
218 g_unsetenv("RAZOR_ROOT");
221 struct run_install_baton {
226 RI_STATE_PROGRESS_DELAY,
230 guint eid; /* event ID (or 0) */
231 PloverTransactionHelper *helper;
234 gboolean run_install_tick(gpointer data)
236 gboolean retval=TRUE;
237 struct run_install_baton *baton=data;
239 GtkAssistant *assistant=baton->helper->assistant;
241 page=gtk_assistant_get_nth_page(assistant,
242 gtk_assistant_get_current_page(assistant));
243 g_message("run_install_tick: state is %s, on page %s",
244 baton->state==RI_STATE_INIT?"INIT":
245 baton->state==RI_STATE_SUMMARY?"SUMMARY":
246 baton->state==RI_STATE_PROGRESS?"PROGRESS":
247 baton->state==RI_STATE_PROGRESS_DELAY?"PROGRESS_DELAY":
248 baton->state==RI_STATE_DONE?"DONE":
249 baton->state==RI_STATE_FINISH?"FINISH":
251 gtk_buildable_get_name(GTK_BUILDABLE(page)));
256 if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
259 gtk_button_clicked(GTK_BUTTON(assistant->forward));
261 case RI_STATE_SUMMARY:
262 if (gtk_assistant_get_current_page(assistant)<1)
264 g_assert(gtk_widget_is_sensitive(assistant->apply));
266 gtk_button_clicked(GTK_BUTTON(assistant->apply));
268 case RI_STATE_PROGRESS:
269 if (gtk_assistant_get_current_page(assistant)<2)
271 page=gtk_assistant_get_nth_page(assistant,2);
272 baton->eid=g_timeout_add_seconds(1,run_install_tick,baton);
273 if (!gtk_assistant_get_page_complete(assistant,page))
278 case RI_STATE_PROGRESS_DELAY:
280 baton->eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,baton,
283 gtk_button_clicked(GTK_BUTTON(assistant->forward));
286 if (gtk_assistant_get_current_page(assistant)<3)
289 gtk_button_clicked(GTK_BUTTON(assistant->close));
291 case RI_STATE_FINISH:
292 if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
302 static void test_run_install(void)
307 struct plover_vector *packages;
308 PloverPackageSet *installed;
309 PloverTransactionHelper *helper;
310 struct run_install_baton baton={0,};
311 root=g_strdup("razor-test-dir-XXXXXX");
312 g_assert(mkdtemp(root));
313 uri=razor_path_to_uri(root);
314 g_setenv("RAZOR_ROOT",uri,TRUE);
315 helper=get_transaction_helper();
316 installed=plover_package_set_new();
317 if (!plover_package_set_open(installed,uri,TRUE,&err))
318 g_error("%s: %s",root,err->message);
319 plover_transaction_helper_set_installed(helper,installed);
320 g_object_unref(installed);
321 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
322 packages=plover_vector_new();
323 plover_vector_append(packages,"zappy-tools");
324 if (!plover_transaction_helper_install_packages(helper,packages,&err))
325 g_error("zappy-tools: %s",err->message);
327 plover_vector_free(packages);
328 plover_transaction_helper_present(helper);
330 baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,&baton,NULL);
332 g_object_unref(helper);
333 g_unsetenv("RAZOR_ROOT");
338 struct run_remove_baton {
343 RR_STATE_PROGRESS_DELAY,
347 guint eid; /* event ID (or 0) */
348 PloverTransactionHelper *helper;
351 gboolean run_remove_tick(gpointer data)
353 gboolean retval=TRUE;
354 struct run_remove_baton *baton=data;
356 GtkAssistant *assistant=baton->helper->assistant;
360 if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
363 gtk_button_clicked(GTK_BUTTON(assistant->forward));
365 case RR_STATE_SUMMARY:
366 if (gtk_assistant_get_current_page(assistant)<1)
368 g_assert(gtk_widget_is_sensitive(assistant->apply));
370 gtk_button_clicked(GTK_BUTTON(assistant->apply));
372 case RR_STATE_PROGRESS:
373 if (gtk_assistant_get_current_page(assistant)<2)
375 page=gtk_assistant_get_nth_page(assistant,2);
376 baton->eid=g_timeout_add_seconds(1,run_remove_tick,baton);
377 if (!gtk_assistant_get_page_complete(assistant,page))
382 case RR_STATE_PROGRESS_DELAY:
384 baton->eid=g_idle_add_full(G_PRIORITY_LOW,run_remove_tick,baton,
387 gtk_button_clicked(GTK_BUTTON(assistant->forward));
390 if (gtk_assistant_get_current_page(assistant)<3)
393 gtk_button_clicked(GTK_BUTTON(assistant->close));
395 case RR_STATE_FINISH:
396 if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
406 static void test_run_remove(void)
411 struct plover_vector *packages;
412 PloverPackageSet *installed;
413 PloverTransactionHelper *helper;
414 struct run_remove_baton baton={0,};
415 root=g_strdup("razor-test-dir-XXXXXX");
416 g_assert(mkdtemp(root));
417 uri=razor_path_to_uri(root);
418 g_setenv("RAZOR_ROOT",uri,TRUE);
419 helper=get_transaction_helper();
420 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
422 plover_transaction_helper_group_get_default_packages(helper,"zappy",&err);
424 g_error("zappy: %s",err->message);
425 if (!plover_install("../yum-repo-test-dir",NULL,packages->strings,&err))
426 g_error("plover_install: %s",err->message);
427 plover_vector_free(packages);
428 installed=plover_package_set_new();
429 if (!plover_package_set_open(installed,uri,TRUE,&err))
430 g_error("%s: %s",root,err->message);
431 plover_transaction_helper_set_installed(helper,installed);
432 g_object_unref(installed);
433 if (!plover_transaction_helper_remove_group(helper,"zappy",&err))
434 g_error("zappy: %s",err->message);
436 plover_transaction_helper_present(helper);
438 baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_remove_tick,&baton,NULL);
440 g_object_unref(helper);
441 g_unsetenv("RAZOR_ROOT");
446 struct run_update_baton {
451 RU_STATE_PROGRESS_DELAY,
455 guint eid; /* event ID (or 0) */
456 PloverTransactionHelper *helper;
459 gboolean run_update_tick(gpointer data)
461 gboolean retval=TRUE;
462 struct run_update_baton *baton=data;
464 GtkAssistant *assistant=baton->helper->assistant;
468 if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
471 gtk_button_clicked(GTK_BUTTON(assistant->forward));
473 case RU_STATE_SUMMARY:
474 if (gtk_assistant_get_current_page(assistant)<1)
476 g_assert(gtk_widget_is_sensitive(assistant->apply));
478 gtk_button_clicked(GTK_BUTTON(assistant->apply));
480 case RU_STATE_PROGRESS:
481 if (gtk_assistant_get_current_page(assistant)<2)
483 page=gtk_assistant_get_nth_page(assistant,2);
484 baton->eid=g_timeout_add_seconds(1,run_update_tick,baton);
485 if (!gtk_assistant_get_page_complete(assistant,page))
490 case RU_STATE_PROGRESS_DELAY:
492 baton->eid=g_idle_add_full(G_PRIORITY_LOW,run_update_tick,baton,
495 gtk_button_clicked(GTK_BUTTON(assistant->forward));
498 if (gtk_assistant_get_current_page(assistant)<3)
501 gtk_button_clicked(GTK_BUTTON(assistant->close));
503 case RU_STATE_FINISH:
504 if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
514 static void test_run_update(void)
519 struct razor_importer *importer;
520 struct razor_set *downgraded;
521 struct razor_atomic *atomic;
522 struct plover_vector *packages;
523 PloverPackageSet *installed;
524 PloverTransactionHelper *helper;
525 struct run_update_baton baton={0,};
526 root=g_strdup("razor-test-dir-XXXXXX");
527 g_assert(mkdtemp(root));
528 uri=razor_path_to_uri(root);
529 g_setenv("RAZOR_ROOT",uri,TRUE);
530 helper=get_transaction_helper();
531 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
532 installed=plover_package_set_new();
533 if (!plover_package_set_open(installed,uri,TRUE,&err))
534 g_error("%s: %s",root,err->message);
535 importer=razor_importer_create();
536 razor_importer_begin_package(importer,"zappy","0-1","noarch");
537 razor_importer_add_details(importer,"","","","");
538 razor_importer_add_property(importer,"zappy",RAZOR_PROPERTY_PROVIDES,"0-1");
539 razor_importer_finish_package(importer);
540 downgraded=razor_importer_finish(importer);
541 atomic=razor_atomic_open("Add downgraded packages");
542 if (!plover_package_set_update(installed,downgraded,atomic) ||
543 razor_atomic_commit(atomic))
544 g_error("%s: %s",root,razor_atomic_get_error_msg(atomic));
545 razor_atomic_destroy(atomic);
546 razor_set_unref(downgraded);
547 plover_transaction_helper_set_installed(helper,installed);
548 g_object_unref(installed);
549 if (!plover_transaction_helper_update(helper,&err))
550 g_error("update: %s",err->message);
552 plover_transaction_helper_present(helper);
554 baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_update_tick,&baton,NULL);
556 g_object_unref(helper);
557 g_unsetenv("RAZOR_ROOT");
562 struct check_vendor_baton {
567 CV_STATE_PROGRESS_DELAY,
571 guint eid; /* event ID (or 0) */
572 PloverTransactionHelper *helper;
575 gboolean check_vendor_tick(gpointer data)
577 gboolean retval=TRUE;
578 struct check_vendor_baton *baton=data;
580 GtkAssistant *assistant=baton->helper->assistant;
584 if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
587 gtk_button_clicked(GTK_BUTTON(assistant->forward));
589 case CV_STATE_SUMMARY:
590 if (gtk_assistant_get_current_page(assistant)<1)
592 g_assert(!gtk_widget_is_sensitive(assistant->apply));
593 w=GTK_WIDGET(gtk_builder_get_object(ui,"SIRemoveExisting"));
594 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),TRUE);
595 g_assert(gtk_widget_is_sensitive(assistant->apply));
597 gtk_button_clicked(GTK_BUTTON(assistant->apply));
599 case CV_STATE_PROGRESS:
600 if (gtk_assistant_get_current_page(assistant)<2)
602 page=gtk_assistant_get_nth_page(assistant,2);
603 baton->eid=g_timeout_add_seconds(1,check_vendor_tick,baton);
604 if (!gtk_assistant_get_page_complete(assistant,page))
609 case CV_STATE_PROGRESS_DELAY:
611 baton->eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,baton,
614 gtk_button_clicked(GTK_BUTTON(assistant->forward));
617 if (gtk_assistant_get_current_page(assistant)<3)
620 gtk_button_clicked(GTK_BUTTON(assistant->close));
622 case CV_STATE_FINISH:
623 if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
633 static void test_check_vendor(void)
639 struct razor_importer *importer;
640 struct razor_set *downgraded;
641 struct razor_atomic *atomic;
642 struct plover_vector *packages;
643 PloverPackageSet *installed;
644 PloverTransactionHelper *helper;
645 struct check_vendor_baton baton={0,};
646 g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE);
647 root=g_strdup("razor-test-dir-XXXXXX");
648 g_assert(mkdtemp(root));
649 uri=razor_path_to_uri(root);
650 g_setenv("RAZOR_ROOT",uri,TRUE);
651 helper=get_transaction_helper();
652 plover_transaction_helper_set_check_vendor(helper,TRUE);
653 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
654 installed=plover_package_set_new();
655 if (!plover_package_set_open(installed,uri,TRUE,&err))
656 g_error("%s: %s",root,err->message);
657 importer=razor_importer_create();
658 razor_importer_begin_package(importer,"zappy","0-1","noarch");
659 razor_importer_add_details(importer,"","","","");
660 razor_importer_add_property(importer,"zappy",RAZOR_PROPERTY_PROVIDES,"0-1");
661 razor_importer_add_install_prefix(importer,"/test");
662 razor_importer_add_file(importer,"/test/bin/zappy");
663 razor_importer_finish_package(importer);
664 downgraded=razor_importer_finish(importer);
665 atomic=razor_atomic_open("Add downgraded packages");
666 razor_atomic_make_dirs(atomic,uri,"/test/bin/zappy");
667 s=g_build_filename(uri,"test/bin/zappy",NULL);
668 fh=razor_atomic_create_file(atomic,s,S_IRWXU|S_IRWXG|S_IRWXO);
670 razor_atomic_close(atomic,fh);
671 if (!plover_package_set_update(installed,downgraded,atomic) ||
672 razor_atomic_commit(atomic))
673 g_error("%s: %s",root,razor_atomic_get_error_msg(atomic));
674 razor_atomic_destroy(atomic);
675 razor_set_unref(downgraded);
676 plover_transaction_helper_set_installed(helper,installed);
677 g_object_unref(installed);
678 if (!plover_transaction_helper_update(helper,&err))
679 g_error("update: %s",err->message);
681 plover_transaction_helper_present(helper);
683 baton.eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,&baton,NULL);
685 g_object_unref(helper);
686 g_unsetenv("RAZOR_ROOT");
689 g_unsetenv("PLOVER_VENDOR_PREFIX");
692 static gchar *create_new_root_and_install(gchar **prefix_p,char **pkgs)
698 PloverTransaction *transaction;
699 root=g_strdup("razor-test-dir-XXXXXX");
700 g_assert(mkdtemp(root));
701 uri=razor_path_to_uri(root);
702 g_setenv("RAZOR_ROOT",uri,TRUE);
704 uri=razor_path_to_uri("../yum-repo-test-dir/repodata/comps.xml");
705 comps=plover_comps_new_from_uri(uri,&err);
708 g_error("../yum-repo-test-dir/repodata/comps.xml: %s",err->message);
709 prefix=plover_comps_get_default_prefix(comps);
710 plover_comps_free(comps);
711 transaction=plover_transaction_new_install("../yum-repo-test-dir",prefix,
714 g_error("../yum-repo-test-dir: %s",err->message);
715 g_assert(plover_transaction_commit(transaction,NULL,NULL));
716 g_object_unref(transaction);
725 static check_file(const char *root,const char *path)
728 s=g_build_filename(root,path,NULL);
729 g_assert(g_file_test(s,G_FILE_TEST_EXISTS));
733 static check_no_file(const char *root,const char *path)
736 s=g_build_filename(root,path,NULL);
737 g_assert(!g_file_test(s,G_FILE_TEST_EXISTS));
742 * Test that installing from a repository which is marked as distribution-local
743 * on top of an existing global installation works if prefix is NULL
744 * (which is the case on UNIX if PLOVER_VENDOR_PREFIX is not set).
746 static void test_unprefixed_distribution_local(void)
750 char *pkgs[]={"zap",NULL};
751 struct plover_vector *packages;
752 PloverPackageSet *installed;
753 PloverTransactionHelper *helper;
754 struct run_install_baton baton={0,};
755 g_unsetenv("PLOVER_VENDOR_PREFIX");
756 root=create_new_root_and_install(NULL,pkgs);
757 check_file(root,"/usr/bin/zap");
758 helper=get_transaction_helper();
759 plover_transaction_helper_set_check_vendor(helper,TRUE);
760 plover_transaction_helper_set_base(helper,"../distribution-local-test-dir");
761 packages=plover_vector_new();
762 plover_vector_append(packages,"zappy");
763 if (!plover_transaction_helper_install_packages(helper,packages,&err))
764 g_error("zappy: %s",err->message);
766 plover_vector_free(packages);
767 plover_transaction_helper_present(helper);
769 baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,&baton,NULL);
771 g_object_unref(helper);
772 check_file(root,"/usr/bin/zappy");
774 g_unsetenv("RAZOR_ROOT");
778 * Test that installing from a repository which is marked as distribution-local
779 * on top of an existing global installation requires removing the existing
780 * installation if prefix is non-NULL (which is the case if PLOVER_VENDOR_PREFIX
783 static void test_prefixed_distribution_local(void)
788 char *pkgs[]={"zap",NULL};
789 struct plover_vector *packages;
790 PloverPackageSet *installed;
791 PloverTransactionHelper *helper;
792 struct check_vendor_baton baton={0,};
793 g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE);
794 helper=get_transaction_helper();
795 plover_transaction_helper_set_check_vendor(helper,TRUE);
796 plover_transaction_helper_set_base(helper,"../distribution-local-test-dir");
797 root=create_new_root_and_install(&prefix,pkgs);
798 s=g_build_filename(prefix,"bin/zap",NULL);
801 packages=plover_vector_new();
802 plover_vector_append(packages,"filesystem");
803 if (!plover_transaction_helper_install_packages(helper,packages,&err))
804 g_error("filesystem: %s",err->message);
806 plover_vector_free(packages);
807 plover_transaction_helper_present(helper);
809 baton.eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,&baton,NULL);
811 g_object_unref(helper);
812 s=g_build_filename(prefix,"bin/zap",NULL);
813 check_no_file(root,s);
815 check_no_file(root,"/media");
818 g_unsetenv("RAZOR_ROOT");
821 struct set_error_baton {
826 PloverTransactionHelper *helper;
830 * This handler may be called as either an event (ie., idle or timeout)
831 * or as a (swapped) signal. In the latter case, the return is ignored.
833 gboolean set_error_tick(gpointer data)
835 struct set_error_baton *baton=data;
838 dlg=GTK_DIALOG(baton->helper->error_dialog);
842 if (!dlg || !gtk_widget_get_visible(GTK_WIDGET(dlg)))
844 button=gtk_dialog_get_widget_for_response(dlg,GTK_RESPONSE_CLOSE);
846 gtk_button_clicked(GTK_BUTTON(button));
848 case SE_STATE_FINISH:
849 if (dlg && gtk_widget_get_visible(GTK_WIDGET(dlg)))
858 static void test_set_error(void)
864 const GError *err2=NULL;
865 PloverPackageSet *installed;
866 PloverTransactionHelper *helper;
867 struct set_error_baton baton={0,};
868 root=g_strdup("razor-test-dir-XXXXXX");
869 g_assert(mkdtemp(root));
870 uri=razor_path_to_uri(root);
872 g_setenv("RAZOR_ROOT",uri,TRUE);
874 helper=get_transaction_helper();
875 uri=razor_path_to_uri("../razor-test-dir");
876 installed=plover_package_set_new_from_installed(uri,&err);
879 g_error("../razor-test-dir: %s",err->message);
880 plover_transaction_helper_set_installed(helper,installed);
881 g_object_unref(installed);
882 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
883 if (!plover_transaction_helper_update(helper,&err))
884 plover_transaction_helper_set_error(helper,err,"Expected error");
885 g_assert(plover_transaction_helper_get_visible(helper));
886 errmsg=plover_transaction_helper_get_error(helper,&err2);
887 g_assert_cmpstr(errmsg,==,"Expected error");
888 g_assert_error(err2,err->domain,err->code);
889 plover_transaction_helper_present(helper);
891 g_idle_add_full(G_PRIORITY_LOW,set_error_tick,&baton,NULL);
894 g_object_unref(helper);
895 g_unsetenv("RAZOR_ROOT");
898 int main(int argc,char **argv)
903 * Note that because g_test_init() handles --help,
904 * these options will not appear in the output.
906 GOptionEntry options[]={
907 {"manual",0,0,G_OPTION_ARG_NONE,&manual_mode,
908 "Disable automatic mode",NULL},
911 g_test_init(&argc,&argv,NULL);
912 g_setenv("GTK_MODULES","",TRUE);
913 g_setenv("GTK2_RC_FILES","/dev/null",TRUE);
914 gtk_disable_setlocale();
915 setlocale(LC_ALL,"C");
916 g_test_bug_base("mailto:ali@juiblex.co.uk");
917 if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err))
919 g_printf("%s\n",err->message);
922 g_test_add_func("/transactionhelper/init",test_init);
923 g_test_add_func("/transactionhelper/basic-properties",
924 test_basic_properties);
925 g_test_add_func("/transactionhelper/install-group",test_install_group);
926 g_test_add_func("/transactionhelper/remove-group",test_remove_group);
927 g_test_add_func("/transactionhelper/update",test_update);
928 g_test_add_func("/transactionhelper/run-install",test_run_install);
929 g_test_add_func("/transactionhelper/run-remove",test_run_remove);
930 g_test_add_func("/transactionhelper/run-update",test_run_update);
931 g_test_add_func("/transactionhelper/check-vendor",test_check_vendor);
932 g_test_add_func("/transactionhelper/unprefixed-distribution-local",
933 test_unprefixed_distribution_local);
934 g_test_add_func("/transactionhelper/prefixed-distribution-local",
935 test_prefixed_distribution_local);
936 g_test_add_func("/transactionhelper/set-error",test_set_error);