diff -r 419a02fa70db -r 4348cb0e1ac3 tests/plover-gtk/test-transactionhelper.c --- a/tests/plover-gtk/test-transactionhelper.c Thu Jun 16 12:11:14 2016 +0100 +++ b/tests/plover-gtk/test-transactionhelper.c Tue Apr 24 20:58:03 2018 +0100 @@ -29,6 +29,16 @@ GtkBuilder *ui; gboolean manual_mode=FALSE; +#if 0 +static void complete_changed(GtkWidget *page,GParamSpec *child_property, + PloverTransactionHelper *helper) +{ + g_message("complete child property for %s now %s", + gtk_buildable_get_name(GTK_BUILDABLE(page)), + gtk_assistant_get_page_complete(helper->assistant,page)?"TRUE":"FALSE"); +} +#endif + PloverTransactionHelper *get_transaction_helper(void) { const char *dir; @@ -43,6 +53,23 @@ g_free(s); helper=plover_transaction_helper_new(ui); g_object_unref(ui); +#if 0 + if (helper->assistant) + { + GtkWidget *page; + int i; + for(i=gtk_assistant_get_n_pages(helper->assistant)-1;i>=0;i--) + { + page=gtk_assistant_get_nth_page(helper->assistant,i); + g_signal_connect(page,"child-notify::complete", + G_CALLBACK(complete_changed),helper); + g_message("complete child property for %s initially %s", + gtk_buildable_get_name(GTK_BUILDABLE(page)), + gtk_assistant_get_page_complete(helper->assistant,page)? + "TRUE":"FALSE"); + } + } +#endif return helper; } @@ -56,6 +83,8 @@ static void test_basic_properties(void) { const char *prefix; + char *uri; + gchar *default_prefix; GError *err=NULL; struct comps *comps; PloverTransactionHelper *helper; @@ -64,7 +93,9 @@ upstream=plover_repository_new_from_yum("../yum-repo-test-dir",&err); if (!upstream) g_error("../yum-repo-test-dir: %s",err->message); - installed=plover_package_set_new_from_installed("../razor-test-dir",&err); + uri=razor_path_to_uri("../razor-test-dir"); + installed=plover_package_set_new_from_installed(uri,&err); + free(uri); if (!installed) g_error("../razor-test-dir: %s",err->message); helper=get_transaction_helper(); @@ -81,7 +112,12 @@ g_assert(plover_comps_lookup_group(comps,"base")); prefix=plover_transaction_helper_get_prefix(helper,&err); g_assert(!err); - g_assert_cmpstr(prefix,==,plover_default_prefix_for_vendor("Acme Corporation")); + comps=plover_comps_new(); + plover_comps_set_vendor(comps,"Acme Corporation"); + default_prefix=plover_comps_get_default_prefix(comps); + plover_comps_free(comps); + g_assert_cmpstr(prefix,==,default_prefix); + g_free(default_prefix); g_assert(!plover_transaction_helper_get_visible(helper)); g_assert(!plover_transaction_helper_get_error(helper,NULL)); g_object_unref(upstream); @@ -91,21 +127,21 @@ static void test_install_group(void) { - gchar *root,*root_uri; + gchar *root; GError *err=NULL; - GFile *file; + char *uri; PloverPackageSet *installed; PloverTransactionHelper *helper; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); + uri=razor_path_to_uri(root); g_free(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + g_setenv("RAZOR_ROOT",uri,TRUE); + free(uri); helper=get_transaction_helper(); - installed=plover_package_set_new_from_installed("../razor-test-dir",&err); + uri=razor_path_to_uri("../razor-test-dir"); + installed=plover_package_set_new_from_installed(uri,&err); + free(uri); if (!installed) g_error("../razor-test-dir: %s",err->message); plover_transaction_helper_set_installed(helper,installed); @@ -120,20 +156,17 @@ static void test_remove_group(void) { - gchar *root,*root_uri; + gchar *root; + char *uri; GError *err=NULL; - GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; struct plover_vector *packages; char *pkgs[]={"zip",NULL}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); helper=get_transaction_helper(); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); packages=plover_transaction_helper_group_get_default_packages(helper, @@ -143,7 +176,7 @@ if (!plover_install("../yum-repo-test-dir",NULL,packages->strings,&err)) g_error("plover_install: %s",err->message); plover_vector_free(packages); - installed=plover_package_set_new_from_installed(root,&err); + installed=plover_package_set_new_from_installed(uri,&err); if (!installed) g_error("%s: %s",root,err->message); plover_transaction_helper_set_installed(helper,installed); @@ -153,26 +186,26 @@ g_assert(!err); g_object_unref(helper); g_unsetenv("RAZOR_ROOT"); + free(uri); g_free(root); } static void test_update(void) { - gchar *root,*root_uri; + gchar *root; + char *uri; GError *err=NULL; - GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); - g_free(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); + g_free(uri); helper=get_transaction_helper(); - installed=plover_package_set_new_from_installed("../razor-test-dir",&err); + uri=razor_path_to_uri("../razor-test-dir"); + installed=plover_package_set_new_from_installed(uri,&err); + free(uri); if (!installed) g_error("../razor-test-dir: %s",err->message); plover_transaction_helper_set_installed(helper,installed); @@ -204,6 +237,19 @@ struct run_install_baton *baton=data; GtkWidget *page; GtkAssistant *assistant=baton->helper->assistant; +#if 0 + page=gtk_assistant_get_nth_page(assistant, + gtk_assistant_get_current_page(assistant)); + g_message("run_install_tick: state is %s, on page %s", + baton->state==RI_STATE_INIT?"INIT": + baton->state==RI_STATE_SUMMARY?"SUMMARY": + baton->state==RI_STATE_PROGRESS?"PROGRESS": + baton->state==RI_STATE_PROGRESS_DELAY?"PROGRESS_DELAY": + baton->state==RI_STATE_DONE?"DONE": + baton->state==RI_STATE_FINISH?"FINISH": + "Unknown", + gtk_buildable_get_name(GTK_BUILDABLE(page))); +#endif switch(baton->state) { case RI_STATE_INIT: @@ -215,6 +261,7 @@ case RI_STATE_SUMMARY: if (gtk_assistant_get_current_page(assistant)<1) return TRUE; + g_assert(gtk_widget_is_sensitive(assistant->apply)); if (!manual_mode) gtk_button_clicked(GTK_BUTTON(assistant->apply)); break; @@ -254,23 +301,20 @@ static void test_run_install(void) { - gchar *root,*root_uri; + gchar *root; + char *uri; GError *err=NULL; - GFile *file; struct plover_vector *packages; PloverPackageSet *installed; PloverTransactionHelper *helper; struct run_install_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); helper=get_transaction_helper(); installed=plover_package_set_new(); - if (!plover_package_set_open(installed,root,TRUE,&err)) + if (!plover_package_set_open(installed,uri,TRUE,&err)) g_error("%s: %s",root,err->message); plover_transaction_helper_set_installed(helper,installed); g_object_unref(installed); @@ -287,6 +331,7 @@ gtk_main(); g_object_unref(helper); g_unsetenv("RAZOR_ROOT"); + free(uri); g_free(root); } @@ -320,6 +365,7 @@ case RR_STATE_SUMMARY: if (gtk_assistant_get_current_page(assistant)<1) return TRUE; + g_assert(gtk_widget_is_sensitive(assistant->apply)); if (!manual_mode) gtk_button_clicked(GTK_BUTTON(assistant->apply)); break; @@ -359,20 +405,17 @@ static void test_run_remove(void) { - gchar *root,*root_uri; + gchar *root; + char *uri; GError *err=NULL; - GFile *file; struct plover_vector *packages; PloverPackageSet *installed; PloverTransactionHelper *helper; struct run_remove_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); helper=get_transaction_helper(); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); packages= @@ -383,7 +426,7 @@ g_error("plover_install: %s",err->message); plover_vector_free(packages); installed=plover_package_set_new(); - if (!plover_package_set_open(installed,root,TRUE,&err)) + if (!plover_package_set_open(installed,uri,TRUE,&err)) g_error("%s: %s",root,err->message); plover_transaction_helper_set_installed(helper,installed); g_object_unref(installed); @@ -396,6 +439,7 @@ gtk_main(); g_object_unref(helper); g_unsetenv("RAZOR_ROOT"); + free(uri); g_free(root); } @@ -429,6 +473,7 @@ case RU_STATE_SUMMARY: if (gtk_assistant_get_current_page(assistant)<1) return TRUE; + g_assert(gtk_widget_is_sensitive(assistant->apply)); if (!manual_mode) gtk_button_clicked(GTK_BUTTON(assistant->apply)); break; @@ -468,9 +513,9 @@ static void test_run_update(void) { - gchar *root,*root_uri; + gchar *root; + char *uri; GError *err=NULL; - GFile *file; struct razor_importer *importer; struct razor_set *downgraded; struct razor_atomic *atomic; @@ -480,15 +525,12 @@ struct run_update_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); helper=get_transaction_helper(); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); installed=plover_package_set_new(); - if (!plover_package_set_open(installed,root,TRUE,&err)) + if (!plover_package_set_open(installed,uri,TRUE,&err)) g_error("%s: %s",root,err->message); importer=razor_importer_create(); razor_importer_begin_package(importer,"zappy","0-1","noarch"); @@ -513,6 +555,7 @@ gtk_main(); g_object_unref(helper); g_unsetenv("RAZOR_ROOT"); + free(uri); g_free(root); } @@ -590,8 +633,8 @@ static void test_check_vendor(void) { int fh; - gchar *root,*root_uri,*s; - GFile *file; + gchar *root,*s; + char *uri; GError *err=NULL; struct razor_importer *importer; struct razor_set *downgraded; @@ -599,19 +642,17 @@ struct plover_vector *packages; PloverPackageSet *installed; PloverTransactionHelper *helper; - struct run_update_baton baton={0,}; + struct check_vendor_baton baton={0,}; g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE); root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); helper=get_transaction_helper(); plover_transaction_helper_set_check_vendor(helper,TRUE); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); installed=plover_package_set_new(); - if (!plover_package_set_open(installed,root,TRUE,&err)) + if (!plover_package_set_open(installed,uri,TRUE,&err)) g_error("%s: %s",root,err->message); importer=razor_importer_create(); razor_importer_begin_package(importer,"zappy","0-1","noarch"); @@ -622,8 +663,8 @@ razor_importer_finish_package(importer); downgraded=razor_importer_finish(importer); atomic=razor_atomic_open("Add downgraded packages"); - razor_atomic_make_dirs(atomic,root_uri,"/test/bin/zappy"); - s=g_build_filename(root_uri,"test/bin/zappy",NULL); + razor_atomic_make_dirs(atomic,uri,"/test/bin/zappy"); + s=g_build_filename(uri,"test/bin/zappy",NULL); fh=razor_atomic_create_file(atomic,s,S_IRWXU|S_IRWXG|S_IRWXO); g_free(s); razor_atomic_close(atomic,fh); @@ -644,10 +685,139 @@ g_object_unref(helper); g_unsetenv("RAZOR_ROOT"); g_free(root); - g_free(root_uri); + free(uri); g_unsetenv("PLOVER_VENDOR_PREFIX"); } +static gchar *create_new_root_and_install(gchar **prefix_p,char **pkgs) +{ + gchar *root,*prefix; + char *uri; + GError *err=NULL; + struct comps *comps; + PloverTransaction *transaction; + root=g_strdup("razor-test-dir-XXXXXX"); + g_assert(mkdtemp(root)); + uri=razor_path_to_uri(root); + g_setenv("RAZOR_ROOT",uri,TRUE); + free(uri); + uri=razor_path_to_uri("../yum-repo-test-dir/repodata/comps.xml"); + comps=plover_comps_new_from_uri(uri,&err); + free(uri); + if (!comps) + g_error("../yum-repo-test-dir/repodata/comps.xml: %s",err->message); + prefix=plover_comps_get_default_prefix(comps); + plover_comps_free(comps); + transaction=plover_transaction_new_install("../yum-repo-test-dir",prefix, + pkgs,&err); + if (!transaction) + g_error("../yum-repo-test-dir: %s",err->message); + g_assert(plover_transaction_commit(transaction,NULL,NULL)); + g_object_unref(transaction); + fflush(stdout); + if (prefix_p) + *prefix_p=prefix; + else + g_free(prefix); + return root; +} + +static check_file(const char *root,const char *path) +{ + gchar *s; + s=g_build_filename(root,path,NULL); + g_assert(g_file_test(s,G_FILE_TEST_EXISTS)); + g_free(s); +} + +static check_no_file(const char *root,const char *path) +{ + gchar *s; + s=g_build_filename(root,path,NULL); + g_assert(!g_file_test(s,G_FILE_TEST_EXISTS)); + g_free(s); +} + +/* + * Test that installing from a repository which is marked as distribution-local + * on top of an existing global installation works if prefix is NULL + * (which is the case on UNIX if PLOVER_VENDOR_PREFIX is not set). + */ +static void test_unprefixed_distribution_local(void) +{ + gchar *root; + GError *err=NULL; + char *pkgs[]={"zap",NULL}; + struct plover_vector *packages; + PloverPackageSet *installed; + PloverTransactionHelper *helper; + struct run_install_baton baton={0,}; + g_unsetenv("PLOVER_VENDOR_PREFIX"); + root=create_new_root_and_install(NULL,pkgs); + check_file(root,"/usr/bin/zap"); + helper=get_transaction_helper(); + plover_transaction_helper_set_check_vendor(helper,TRUE); + plover_transaction_helper_set_base(helper,"../distribution-local-test-dir"); + packages=plover_vector_new(); + plover_vector_append(packages,"zappy"); + if (!plover_transaction_helper_install_packages(helper,packages,&err)) + g_error("zappy: %s",err->message); + g_assert(!err); + plover_vector_free(packages); + plover_transaction_helper_present(helper); + baton.helper=helper; + baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,&baton,NULL); + gtk_main(); + g_object_unref(helper); + check_file(root,"/usr/bin/zappy"); + g_free(root); + g_unsetenv("RAZOR_ROOT"); +} + +/* + * Test that installing from a repository which is marked as distribution-local + * on top of an existing global installation requires removing the existing + * installation if prefix is non-NULL (which is the case if PLOVER_VENDOR_PREFIX + * is set). + */ +static void test_prefixed_distribution_local(void) +{ + gchar *root,*s; + gchar *prefix; + GError *err=NULL; + char *pkgs[]={"zap",NULL}; + struct plover_vector *packages; + PloverPackageSet *installed; + PloverTransactionHelper *helper; + struct check_vendor_baton baton={0,}; + g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE); + helper=get_transaction_helper(); + plover_transaction_helper_set_check_vendor(helper,TRUE); + plover_transaction_helper_set_base(helper,"../distribution-local-test-dir"); + root=create_new_root_and_install(&prefix,pkgs); + s=g_build_filename(prefix,"bin/zap",NULL); + check_file(root,s); + g_free(s); + packages=plover_vector_new(); + plover_vector_append(packages,"filesystem"); + if (!plover_transaction_helper_install_packages(helper,packages,&err)) + g_error("filesystem: %s",err->message); + g_assert(!err); + plover_vector_free(packages); + plover_transaction_helper_present(helper); + baton.helper=helper; + baton.eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,&baton,NULL); + gtk_main(); + g_object_unref(helper); + s=g_build_filename(prefix,"bin/zap",NULL); + check_no_file(root,s); + g_free(s); + check_no_file(root,"/media"); + g_free(root); + g_free(prefix); + g_unsetenv("RAZOR_ROOT"); +} + struct set_error_baton { enum { SE_STATE_INIT = 0, @@ -687,24 +857,24 @@ static void test_set_error(void) { - gchar *root,*root_uri; + gchar *root; + char *uri; const char *errmsg; GError *err=NULL; const GError *err2=NULL; - GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; struct set_error_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - file=g_file_new_for_path(root); + uri=razor_path_to_uri(root); g_free(root); - root_uri=g_file_get_uri(file); - g_object_unref(file); - g_setenv("RAZOR_ROOT",root_uri,TRUE); - g_free(root_uri); + g_setenv("RAZOR_ROOT",uri,TRUE); + free(uri); helper=get_transaction_helper(); - installed=plover_package_set_new_from_installed("../razor-test-dir",&err); + uri=razor_path_to_uri("../razor-test-dir"); + installed=plover_package_set_new_from_installed(uri,&err); + free(uri); if (!installed) g_error("../razor-test-dir: %s",err->message); plover_transaction_helper_set_installed(helper,installed); @@ -759,6 +929,10 @@ g_test_add_func("/transactionhelper/run-remove",test_run_remove); g_test_add_func("/transactionhelper/run-update",test_run_update); g_test_add_func("/transactionhelper/check-vendor",test_check_vendor); + g_test_add_func("/transactionhelper/unprefixed-distribution-local", + test_unprefixed_distribution_local); + g_test_add_func("/transactionhelper/prefixed-distribution-local", + test_prefixed_distribution_local); g_test_add_func("/transactionhelper/set-error",test_set_error); retval=g_test_run(); return retval;