tests/plover-gtk/test-transactionhelper.c
author J. Ali Harlow <ali@juiblex.co.uk>
Tue Apr 24 18:49:55 2018 +0100 (2018-04-24)
changeset 67 c9eb7aa21ff4
parent 42 419a02fa70db
permissions -rw-r--r--
Release 0.5.3
ali@38
     1
/*
ali@38
     2
 * Copyright (C) 2016  J. Ali Harlow <ali@juiblex.co.uk>
ali@38
     3
 *
ali@38
     4
 * This program is free software; you can redistribute it and/or modify
ali@38
     5
 * it under the terms of the GNU General Public License as published by
ali@38
     6
 * the Free Software Foundation; either version 2 of the License, or
ali@38
     7
 * (at your option) any later version.
ali@38
     8
 *
ali@38
     9
 * This program is distributed in the hope that it will be useful,
ali@38
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ali@38
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
ali@38
    12
 * GNU General Public License for more details.
ali@38
    13
 *
ali@38
    14
 * You should have received a copy of the GNU General Public License along
ali@38
    15
 * with this program; if not, write to the Free Software Foundation, Inc.,
ali@38
    16
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ali@38
    17
 */
ali@38
    18
ali@38
    19
#include <stdlib.h>
ali@38
    20
#include <string.h>
ali@38
    21
#include <locale.h>
ali@38
    22
#include <sys/stat.h>
ali@38
    23
#include <glib.h>
ali@38
    24
#include <gdk/gdk.h>
ali@38
    25
#include <gtk/gtk.h>
ali@38
    26
#include <plover/plover.h>
ali@38
    27
#include <plover-gtk/transactionhelper.h>
ali@38
    28
ali@38
    29
GtkBuilder *ui;
ali@38
    30
gboolean manual_mode=FALSE;
ali@38
    31
ali@61
    32
#if 0
ali@61
    33
static void complete_changed(GtkWidget *page,GParamSpec *child_property,
ali@61
    34
  PloverTransactionHelper *helper)
ali@61
    35
{
ali@61
    36
    g_message("complete child property for %s now %s",
ali@61
    37
      gtk_buildable_get_name(GTK_BUILDABLE(page)),
ali@61
    38
      gtk_assistant_get_page_complete(helper->assistant,page)?"TRUE":"FALSE");
ali@61
    39
}
ali@61
    40
#endif
ali@61
    41
ali@38
    42
PloverTransactionHelper *get_transaction_helper(void)
ali@38
    43
{
ali@38
    44
    const char *dir;
ali@38
    45
    gchar *s;
ali@38
    46
    GError *err=NULL;
ali@38
    47
    PloverTransactionHelper *helper;
ali@38
    48
    dir=g_getenv("gtk_srcdir");
ali@38
    49
    s=g_build_filename(dir,"software-installation.ui",NULL);
ali@38
    50
    ui=gtk_builder_new();
ali@38
    51
    if (!gtk_builder_add_from_file(ui,s,&err))
ali@38
    52
	g_error("%s: %s",s,err->message);
ali@38
    53
    g_free(s);
ali@38
    54
    helper=plover_transaction_helper_new(ui);
ali@38
    55
    g_object_unref(ui);
ali@61
    56
#if 0
ali@61
    57
    if (helper->assistant)
ali@61
    58
    {
ali@61
    59
	GtkWidget *page;
ali@61
    60
	int i;
ali@61
    61
	for(i=gtk_assistant_get_n_pages(helper->assistant)-1;i>=0;i--)
ali@61
    62
	{
ali@61
    63
	    page=gtk_assistant_get_nth_page(helper->assistant,i);
ali@61
    64
	    g_signal_connect(page,"child-notify::complete",
ali@61
    65
	      G_CALLBACK(complete_changed),helper);
ali@61
    66
	    g_message("complete child property for %s initially %s",
ali@61
    67
	      gtk_buildable_get_name(GTK_BUILDABLE(page)),
ali@61
    68
	      gtk_assistant_get_page_complete(helper->assistant,page)?
ali@61
    69
	      "TRUE":"FALSE");
ali@61
    70
	}
ali@61
    71
    }
ali@61
    72
#endif
ali@38
    73
    return helper;
ali@38
    74
}
ali@38
    75
ali@38
    76
static void test_init(void)
ali@38
    77
{
ali@38
    78
    PloverTransactionHelper *helper;
ali@38
    79
    helper=get_transaction_helper();
ali@38
    80
    g_object_unref(helper);
ali@38
    81
}
ali@38
    82
ali@38
    83
static void test_basic_properties(void)
ali@38
    84
{
ali@38
    85
    const char *prefix;
ali@61
    86
    char *uri;
ali@61
    87
    gchar *default_prefix;
ali@38
    88
    GError *err=NULL;
ali@38
    89
    struct comps *comps;
ali@38
    90
    PloverTransactionHelper *helper;
ali@38
    91
    PloverPackageSet *installed;
ali@38
    92
    PloverRepository *upstream;
ali@38
    93
    upstream=plover_repository_new_from_yum("../yum-repo-test-dir",&err);
ali@38
    94
    if (!upstream)
ali@38
    95
	g_error("../yum-repo-test-dir: %s",err->message);
ali@61
    96
    uri=razor_path_to_uri("../razor-test-dir");
ali@61
    97
    installed=plover_package_set_new_from_installed(uri,&err);
ali@61
    98
    free(uri);
ali@38
    99
    if (!installed)
ali@38
   100
	g_error("../razor-test-dir: %s",err->message);
ali@38
   101
    helper=get_transaction_helper();
ali@38
   102
    g_assert(!plover_transaction_helper_get_visible(helper));
ali@38
   103
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   104
    g_assert(plover_transaction_helper_get_installed(helper)==installed);
ali@38
   105
    plover_transaction_helper_set_upstream(helper,upstream);
ali@38
   106
    g_assert(plover_transaction_helper_get_upstream(helper,&err)==upstream);
ali@38
   107
    g_assert(!err);
ali@38
   108
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   109
    g_assert_cmpstr(plover_transaction_helper_get_base(helper),==,"../yum-repo-test-dir");
ali@38
   110
    comps=plover_transaction_helper_get_comps(helper,&err);
ali@38
   111
    g_assert(!err);
ali@38
   112
    g_assert(plover_comps_lookup_group(comps,"base"));
ali@38
   113
    prefix=plover_transaction_helper_get_prefix(helper,&err);
ali@38
   114
    g_assert(!err);
ali@61
   115
    comps=plover_comps_new();
ali@61
   116
    plover_comps_set_vendor(comps,"Acme Corporation");
ali@61
   117
    default_prefix=plover_comps_get_default_prefix(comps);
ali@61
   118
    plover_comps_free(comps);
ali@61
   119
    g_assert_cmpstr(prefix,==,default_prefix);
ali@61
   120
    g_free(default_prefix);
ali@38
   121
    g_assert(!plover_transaction_helper_get_visible(helper));
ali@38
   122
    g_assert(!plover_transaction_helper_get_error(helper,NULL));
ali@38
   123
    g_object_unref(upstream);
ali@38
   124
    g_object_unref(installed);
ali@38
   125
    g_object_unref(helper);
ali@38
   126
}
ali@38
   127
ali@38
   128
static void test_install_group(void)
ali@38
   129
{
ali@61
   130
    gchar *root;
ali@38
   131
    GError *err=NULL;
ali@61
   132
    char *uri;
ali@38
   133
    PloverPackageSet *installed;
ali@38
   134
    PloverTransactionHelper *helper;
ali@38
   135
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   136
    g_assert(mkdtemp(root));
ali@61
   137
    uri=razor_path_to_uri(root);
ali@38
   138
    g_free(root);
ali@61
   139
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@61
   140
    free(uri);
ali@38
   141
    helper=get_transaction_helper();
ali@61
   142
    uri=razor_path_to_uri("../razor-test-dir");
ali@61
   143
    installed=plover_package_set_new_from_installed(uri,&err);
ali@61
   144
    free(uri);
ali@38
   145
    if (!installed)
ali@38
   146
	g_error("../razor-test-dir: %s",err->message);
ali@38
   147
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   148
    g_object_unref(installed);
ali@38
   149
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   150
    if (!plover_transaction_helper_install_group(helper,"base",&err))
ali@38
   151
	g_error("base: %s",err->message);
ali@38
   152
    g_assert(!err);
ali@38
   153
    g_object_unref(helper);
ali@38
   154
    g_unsetenv("RAZOR_ROOT");
ali@38
   155
}
ali@38
   156
ali@38
   157
static void test_remove_group(void)
ali@38
   158
{
ali@61
   159
    gchar *root;
ali@61
   160
    char *uri;
ali@38
   161
    GError *err=NULL;
ali@38
   162
    PloverPackageSet *installed;
ali@38
   163
    PloverTransactionHelper *helper;
ali@38
   164
    struct plover_vector *packages;
ali@38
   165
    char *pkgs[]={"zip",NULL};
ali@38
   166
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   167
    g_assert(mkdtemp(root));
ali@61
   168
    uri=razor_path_to_uri(root);
ali@61
   169
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@38
   170
    helper=get_transaction_helper();
ali@38
   171
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   172
    packages=plover_transaction_helper_group_get_default_packages(helper,
ali@38
   173
      "zappy",&err);
ali@38
   174
    if (!packages)
ali@38
   175
	g_error("zappy: %s",err->message);
ali@38
   176
    if (!plover_install("../yum-repo-test-dir",NULL,packages->strings,&err))
ali@38
   177
	g_error("plover_install: %s",err->message);
ali@38
   178
    plover_vector_free(packages);
ali@61
   179
    installed=plover_package_set_new_from_installed(uri,&err);
ali@38
   180
    if (!installed)
ali@38
   181
	g_error("%s: %s",root,err->message);
ali@38
   182
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   183
    g_object_unref(installed);
ali@38
   184
    if (!plover_transaction_helper_remove_group(helper,"zappy",&err))
ali@38
   185
	g_error("zappy: %s",err->message);
ali@38
   186
    g_assert(!err);
ali@38
   187
    g_object_unref(helper);
ali@38
   188
    g_unsetenv("RAZOR_ROOT");
ali@61
   189
    free(uri);
ali@38
   190
    g_free(root);
ali@38
   191
}
ali@38
   192
ali@38
   193
static void test_update(void)
ali@38
   194
{
ali@61
   195
    gchar *root;
ali@61
   196
    char *uri;
ali@38
   197
    GError *err=NULL;
ali@38
   198
    PloverPackageSet *installed;
ali@38
   199
    PloverTransactionHelper *helper;
ali@38
   200
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   201
    g_assert(mkdtemp(root));
ali@61
   202
    uri=razor_path_to_uri(root);
ali@61
   203
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@61
   204
    g_free(uri);
ali@38
   205
    helper=get_transaction_helper();
ali@61
   206
    uri=razor_path_to_uri("../razor-test-dir");
ali@61
   207
    installed=plover_package_set_new_from_installed(uri,&err);
ali@61
   208
    free(uri);
ali@38
   209
    if (!installed)
ali@38
   210
	g_error("../razor-test-dir: %s",err->message);
ali@38
   211
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   212
    g_object_unref(installed);
ali@38
   213
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   214
    if (plover_transaction_helper_update(helper,&err))
ali@38
   215
	g_error("plover_transaction_helper_update reports work to be done");
ali@38
   216
    g_assert_error(err,PLOVER_GENERAL_ERROR,PLOVER_GENERAL_ERROR_NO_WORK);
ali@38
   217
    g_object_unref(helper);
ali@38
   218
    g_unsetenv("RAZOR_ROOT");
ali@38
   219
}
ali@38
   220
ali@38
   221
struct run_install_baton {
ali@38
   222
    enum {
ali@38
   223
	RI_STATE_INIT = 0,
ali@38
   224
	RI_STATE_SUMMARY,
ali@38
   225
	RI_STATE_PROGRESS,
ali@38
   226
	RI_STATE_PROGRESS_DELAY,
ali@38
   227
	RI_STATE_DONE,
ali@38
   228
	RI_STATE_FINISH
ali@38
   229
    } state;
ali@38
   230
    guint eid;		/* event ID (or 0) */
ali@38
   231
    PloverTransactionHelper *helper;
ali@38
   232
};
ali@38
   233
ali@38
   234
gboolean run_install_tick(gpointer data)
ali@38
   235
{
ali@38
   236
    gboolean retval=TRUE;
ali@38
   237
    struct run_install_baton *baton=data;
ali@38
   238
    GtkWidget *page;
ali@38
   239
    GtkAssistant *assistant=baton->helper->assistant;
ali@61
   240
#if 0
ali@61
   241
    page=gtk_assistant_get_nth_page(assistant,
ali@61
   242
      gtk_assistant_get_current_page(assistant));
ali@61
   243
    g_message("run_install_tick: state is %s, on page %s",
ali@61
   244
      baton->state==RI_STATE_INIT?"INIT":
ali@61
   245
      baton->state==RI_STATE_SUMMARY?"SUMMARY":
ali@61
   246
      baton->state==RI_STATE_PROGRESS?"PROGRESS":
ali@61
   247
      baton->state==RI_STATE_PROGRESS_DELAY?"PROGRESS_DELAY":
ali@61
   248
      baton->state==RI_STATE_DONE?"DONE":
ali@61
   249
      baton->state==RI_STATE_FINISH?"FINISH":
ali@61
   250
      "Unknown",
ali@61
   251
      gtk_buildable_get_name(GTK_BUILDABLE(page)));
ali@61
   252
#endif
ali@38
   253
    switch(baton->state)
ali@38
   254
    {
ali@38
   255
	case RI_STATE_INIT:
ali@38
   256
	    if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   257
		return TRUE;
ali@38
   258
	    if (!manual_mode)
ali@38
   259
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   260
	    break;
ali@38
   261
	case RI_STATE_SUMMARY:
ali@38
   262
	    if (gtk_assistant_get_current_page(assistant)<1)
ali@38
   263
		return TRUE;
ali@61
   264
	    g_assert(gtk_widget_is_sensitive(assistant->apply));
ali@38
   265
	    if (!manual_mode)
ali@38
   266
		gtk_button_clicked(GTK_BUTTON(assistant->apply));
ali@38
   267
	    break;
ali@38
   268
	case RI_STATE_PROGRESS:
ali@38
   269
	    if (gtk_assistant_get_current_page(assistant)<2)
ali@38
   270
		return TRUE;
ali@38
   271
	    page=gtk_assistant_get_nth_page(assistant,2);
ali@38
   272
	    baton->eid=g_timeout_add_seconds(1,run_install_tick,baton);
ali@38
   273
	    if (!gtk_assistant_get_page_complete(assistant,page))
ali@38
   274
		return FALSE;
ali@38
   275
	    else
ali@38
   276
		retval=FALSE;
ali@38
   277
	    break;
ali@38
   278
	case RI_STATE_PROGRESS_DELAY:
ali@38
   279
	    retval=FALSE;
ali@38
   280
	    baton->eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,baton,
ali@38
   281
	      NULL);
ali@38
   282
	    if (!manual_mode)
ali@38
   283
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   284
	    break;
ali@38
   285
	case RI_STATE_DONE:
ali@38
   286
	    if (gtk_assistant_get_current_page(assistant)<3)
ali@38
   287
		return TRUE;
ali@38
   288
	    if (!manual_mode)
ali@38
   289
		gtk_button_clicked(GTK_BUTTON(assistant->close));
ali@38
   290
	    break;
ali@38
   291
	case RI_STATE_FINISH:
ali@38
   292
	    if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   293
		return TRUE;
ali@38
   294
	    gtk_main_quit();
ali@38
   295
	    baton->eid=0;
ali@38
   296
	    return FALSE;
ali@38
   297
    }
ali@38
   298
    baton->state++;
ali@38
   299
    return retval;
ali@38
   300
}
ali@38
   301
ali@38
   302
static void test_run_install(void)
ali@38
   303
{
ali@61
   304
    gchar *root;
ali@61
   305
    char *uri;
ali@38
   306
    GError *err=NULL;
ali@38
   307
    struct plover_vector *packages;
ali@38
   308
    PloverPackageSet *installed;
ali@38
   309
    PloverTransactionHelper *helper;
ali@38
   310
    struct run_install_baton baton={0,};
ali@38
   311
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   312
    g_assert(mkdtemp(root));
ali@61
   313
    uri=razor_path_to_uri(root);
ali@61
   314
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@38
   315
    helper=get_transaction_helper();
ali@38
   316
    installed=plover_package_set_new();
ali@61
   317
    if (!plover_package_set_open(installed,uri,TRUE,&err))
ali@38
   318
	g_error("%s: %s",root,err->message);
ali@38
   319
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   320
    g_object_unref(installed);
ali@38
   321
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   322
    packages=plover_vector_new();
ali@38
   323
    plover_vector_append(packages,"zappy-tools");
ali@38
   324
    if (!plover_transaction_helper_install_packages(helper,packages,&err))
ali@38
   325
	g_error("zappy-tools: %s",err->message);
ali@38
   326
    g_assert(!err);
ali@38
   327
    plover_vector_free(packages);
ali@38
   328
    plover_transaction_helper_present(helper);
ali@38
   329
    baton.helper=helper;
ali@38
   330
    baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,&baton,NULL);
ali@38
   331
    gtk_main();
ali@38
   332
    g_object_unref(helper);
ali@38
   333
    g_unsetenv("RAZOR_ROOT");
ali@61
   334
    free(uri);
ali@38
   335
    g_free(root);
ali@38
   336
}
ali@38
   337
ali@38
   338
struct run_remove_baton {
ali@38
   339
    enum {
ali@38
   340
	RR_STATE_INIT = 0,
ali@38
   341
	RR_STATE_SUMMARY,
ali@38
   342
	RR_STATE_PROGRESS,
ali@38
   343
	RR_STATE_PROGRESS_DELAY,
ali@38
   344
	RR_STATE_DONE,
ali@38
   345
	RR_STATE_FINISH
ali@38
   346
    } state;
ali@38
   347
    guint eid;		/* event ID (or 0) */
ali@38
   348
    PloverTransactionHelper *helper;
ali@38
   349
};
ali@38
   350
ali@38
   351
gboolean run_remove_tick(gpointer data)
ali@38
   352
{
ali@38
   353
    gboolean retval=TRUE;
ali@38
   354
    struct run_remove_baton *baton=data;
ali@38
   355
    GtkWidget *page;
ali@38
   356
    GtkAssistant *assistant=baton->helper->assistant;
ali@38
   357
    switch(baton->state)
ali@38
   358
    {
ali@38
   359
	case RR_STATE_INIT:
ali@38
   360
	    if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   361
		return TRUE;
ali@38
   362
	    if (!manual_mode)
ali@38
   363
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   364
	    break;
ali@38
   365
	case RR_STATE_SUMMARY:
ali@38
   366
	    if (gtk_assistant_get_current_page(assistant)<1)
ali@38
   367
		return TRUE;
ali@61
   368
	    g_assert(gtk_widget_is_sensitive(assistant->apply));
ali@38
   369
	    if (!manual_mode)
ali@38
   370
		gtk_button_clicked(GTK_BUTTON(assistant->apply));
ali@38
   371
	    break;
ali@38
   372
	case RR_STATE_PROGRESS:
ali@38
   373
	    if (gtk_assistant_get_current_page(assistant)<2)
ali@38
   374
		return TRUE;
ali@38
   375
	    page=gtk_assistant_get_nth_page(assistant,2);
ali@38
   376
	    baton->eid=g_timeout_add_seconds(1,run_remove_tick,baton);
ali@38
   377
	    if (!gtk_assistant_get_page_complete(assistant,page))
ali@38
   378
		return FALSE;
ali@38
   379
	    else
ali@38
   380
		retval=FALSE;
ali@38
   381
	    break;
ali@38
   382
	case RR_STATE_PROGRESS_DELAY:
ali@38
   383
	    retval=FALSE;
ali@38
   384
	    baton->eid=g_idle_add_full(G_PRIORITY_LOW,run_remove_tick,baton,
ali@38
   385
	      NULL);
ali@38
   386
	    if (!manual_mode)
ali@38
   387
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   388
	    break;
ali@38
   389
	case RR_STATE_DONE:
ali@38
   390
	    if (gtk_assistant_get_current_page(assistant)<3)
ali@38
   391
		return TRUE;
ali@38
   392
	    if (!manual_mode)
ali@38
   393
		gtk_button_clicked(GTK_BUTTON(assistant->close));
ali@38
   394
	    break;
ali@38
   395
	case RR_STATE_FINISH:
ali@38
   396
	    if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   397
		return TRUE;
ali@38
   398
	    gtk_main_quit();
ali@38
   399
	    baton->eid=0;
ali@38
   400
	    return FALSE;
ali@38
   401
    }
ali@38
   402
    baton->state++;
ali@38
   403
    return retval;
ali@38
   404
}
ali@38
   405
ali@38
   406
static void test_run_remove(void)
ali@38
   407
{
ali@61
   408
    gchar *root;
ali@61
   409
    char *uri;
ali@38
   410
    GError *err=NULL;
ali@38
   411
    struct plover_vector *packages;
ali@38
   412
    PloverPackageSet *installed;
ali@38
   413
    PloverTransactionHelper *helper;
ali@38
   414
    struct run_remove_baton baton={0,};
ali@38
   415
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   416
    g_assert(mkdtemp(root));
ali@61
   417
    uri=razor_path_to_uri(root);
ali@61
   418
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@38
   419
    helper=get_transaction_helper();
ali@38
   420
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   421
    packages=
ali@38
   422
      plover_transaction_helper_group_get_default_packages(helper,"zappy",&err);
ali@38
   423
    if (!packages)
ali@38
   424
	g_error("zappy: %s",err->message);
ali@38
   425
    if (!plover_install("../yum-repo-test-dir",NULL,packages->strings,&err))
ali@38
   426
	g_error("plover_install: %s",err->message);
ali@38
   427
    plover_vector_free(packages);
ali@38
   428
    installed=plover_package_set_new();
ali@61
   429
    if (!plover_package_set_open(installed,uri,TRUE,&err))
ali@38
   430
	g_error("%s: %s",root,err->message);
ali@38
   431
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   432
    g_object_unref(installed);
ali@38
   433
    if (!plover_transaction_helper_remove_group(helper,"zappy",&err))
ali@38
   434
	g_error("zappy: %s",err->message);
ali@38
   435
    g_assert(!err);
ali@38
   436
    plover_transaction_helper_present(helper);
ali@38
   437
    baton.helper=helper;
ali@38
   438
    baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_remove_tick,&baton,NULL);
ali@38
   439
    gtk_main();
ali@38
   440
    g_object_unref(helper);
ali@38
   441
    g_unsetenv("RAZOR_ROOT");
ali@61
   442
    free(uri);
ali@38
   443
    g_free(root);
ali@38
   444
}
ali@38
   445
ali@38
   446
struct run_update_baton {
ali@38
   447
    enum {
ali@38
   448
	RU_STATE_INIT = 0,
ali@38
   449
	RU_STATE_SUMMARY,
ali@38
   450
	RU_STATE_PROGRESS,
ali@38
   451
	RU_STATE_PROGRESS_DELAY,
ali@38
   452
	RU_STATE_DONE,
ali@38
   453
	RU_STATE_FINISH
ali@38
   454
    } state;
ali@38
   455
    guint eid;		/* event ID (or 0) */
ali@38
   456
    PloverTransactionHelper *helper;
ali@38
   457
};
ali@38
   458
ali@38
   459
gboolean run_update_tick(gpointer data)
ali@38
   460
{
ali@38
   461
    gboolean retval=TRUE;
ali@38
   462
    struct run_update_baton *baton=data;
ali@38
   463
    GtkWidget *page;
ali@38
   464
    GtkAssistant *assistant=baton->helper->assistant;
ali@38
   465
    switch(baton->state)
ali@38
   466
    {
ali@38
   467
	case RU_STATE_INIT:
ali@38
   468
	    if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   469
		return TRUE;
ali@38
   470
	    if (!manual_mode)
ali@38
   471
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   472
	    break;
ali@38
   473
	case RU_STATE_SUMMARY:
ali@38
   474
	    if (gtk_assistant_get_current_page(assistant)<1)
ali@38
   475
		return TRUE;
ali@61
   476
	    g_assert(gtk_widget_is_sensitive(assistant->apply));
ali@38
   477
	    if (!manual_mode)
ali@38
   478
		gtk_button_clicked(GTK_BUTTON(assistant->apply));
ali@38
   479
	    break;
ali@38
   480
	case RU_STATE_PROGRESS:
ali@38
   481
	    if (gtk_assistant_get_current_page(assistant)<2)
ali@38
   482
		return TRUE;
ali@38
   483
	    page=gtk_assistant_get_nth_page(assistant,2);
ali@38
   484
	    baton->eid=g_timeout_add_seconds(1,run_update_tick,baton);
ali@38
   485
	    if (!gtk_assistant_get_page_complete(assistant,page))
ali@38
   486
		return FALSE;
ali@38
   487
	    else
ali@38
   488
		retval=FALSE;
ali@38
   489
	    break;
ali@38
   490
	case RU_STATE_PROGRESS_DELAY:
ali@38
   491
	    retval=FALSE;
ali@38
   492
	    baton->eid=g_idle_add_full(G_PRIORITY_LOW,run_update_tick,baton,
ali@38
   493
	      NULL);
ali@38
   494
	    if (!manual_mode)
ali@38
   495
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   496
	    break;
ali@38
   497
	case RU_STATE_DONE:
ali@38
   498
	    if (gtk_assistant_get_current_page(assistant)<3)
ali@38
   499
		return TRUE;
ali@38
   500
	    if (!manual_mode)
ali@38
   501
		gtk_button_clicked(GTK_BUTTON(assistant->close));
ali@38
   502
	    break;
ali@38
   503
	case RU_STATE_FINISH:
ali@38
   504
	    if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   505
		return TRUE;
ali@38
   506
	    gtk_main_quit();
ali@38
   507
	    baton->eid=0;
ali@38
   508
	    return FALSE;
ali@38
   509
    }
ali@38
   510
    baton->state++;
ali@38
   511
    return retval;
ali@38
   512
}
ali@38
   513
ali@38
   514
static void test_run_update(void)
ali@38
   515
{
ali@61
   516
    gchar *root;
ali@61
   517
    char *uri;
ali@38
   518
    GError *err=NULL;
ali@38
   519
    struct razor_importer *importer;
ali@38
   520
    struct razor_set *downgraded;
ali@38
   521
    struct razor_atomic *atomic;
ali@38
   522
    struct plover_vector *packages;
ali@38
   523
    PloverPackageSet *installed;
ali@38
   524
    PloverTransactionHelper *helper;
ali@38
   525
    struct run_update_baton baton={0,};
ali@38
   526
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   527
    g_assert(mkdtemp(root));
ali@61
   528
    uri=razor_path_to_uri(root);
ali@61
   529
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@38
   530
    helper=get_transaction_helper();
ali@38
   531
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   532
    installed=plover_package_set_new();
ali@61
   533
    if (!plover_package_set_open(installed,uri,TRUE,&err))
ali@38
   534
	g_error("%s: %s",root,err->message);
ali@38
   535
    importer=razor_importer_create();
ali@38
   536
    razor_importer_begin_package(importer,"zappy","0-1","noarch");
ali@38
   537
    razor_importer_add_details(importer,"","","","");
ali@38
   538
    razor_importer_add_property(importer,"zappy",RAZOR_PROPERTY_PROVIDES,"0-1");
ali@38
   539
    razor_importer_finish_package(importer);
ali@38
   540
    downgraded=razor_importer_finish(importer);
ali@38
   541
    atomic=razor_atomic_open("Add downgraded packages");
ali@38
   542
    if (!plover_package_set_update(installed,downgraded,atomic) ||
ali@38
   543
      razor_atomic_commit(atomic))
ali@38
   544
	g_error("%s: %s",root,razor_atomic_get_error_msg(atomic));
ali@38
   545
    razor_atomic_destroy(atomic);
ali@38
   546
    razor_set_unref(downgraded);
ali@38
   547
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   548
    g_object_unref(installed);
ali@38
   549
    if (!plover_transaction_helper_update(helper,&err))
ali@38
   550
	g_error("update: %s",err->message);
ali@38
   551
    g_assert(!err);
ali@38
   552
    plover_transaction_helper_present(helper);
ali@38
   553
    baton.helper=helper;
ali@38
   554
    baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_update_tick,&baton,NULL);
ali@38
   555
    gtk_main();
ali@38
   556
    g_object_unref(helper);
ali@38
   557
    g_unsetenv("RAZOR_ROOT");
ali@61
   558
    free(uri);
ali@38
   559
    g_free(root);
ali@38
   560
}
ali@38
   561
ali@38
   562
struct check_vendor_baton {
ali@38
   563
    enum {
ali@38
   564
	CV_STATE_INIT = 0,
ali@38
   565
	CV_STATE_SUMMARY,
ali@38
   566
	CV_STATE_PROGRESS,
ali@38
   567
	CV_STATE_PROGRESS_DELAY,
ali@38
   568
	CV_STATE_DONE,
ali@38
   569
	CV_STATE_FINISH
ali@38
   570
    } state;
ali@38
   571
    guint eid;		/* event ID (or 0) */
ali@38
   572
    PloverTransactionHelper *helper;
ali@38
   573
};
ali@38
   574
ali@38
   575
gboolean check_vendor_tick(gpointer data)
ali@38
   576
{
ali@38
   577
    gboolean retval=TRUE;
ali@38
   578
    struct check_vendor_baton *baton=data;
ali@38
   579
    GtkWidget *page,*w;
ali@38
   580
    GtkAssistant *assistant=baton->helper->assistant;
ali@38
   581
    switch(baton->state)
ali@38
   582
    {
ali@38
   583
	case CV_STATE_INIT:
ali@38
   584
	    if (!assistant || !gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   585
		return TRUE;
ali@38
   586
	    if (!manual_mode)
ali@38
   587
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   588
	    break;
ali@38
   589
	case CV_STATE_SUMMARY:
ali@38
   590
	    if (gtk_assistant_get_current_page(assistant)<1)
ali@38
   591
		return TRUE;
ali@38
   592
	    g_assert(!gtk_widget_is_sensitive(assistant->apply));
ali@38
   593
	    w=GTK_WIDGET(gtk_builder_get_object(ui,"SIRemoveExisting"));
ali@38
   594
	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),TRUE);
ali@38
   595
	    g_assert(gtk_widget_is_sensitive(assistant->apply));
ali@38
   596
	    if (!manual_mode)
ali@38
   597
		gtk_button_clicked(GTK_BUTTON(assistant->apply));
ali@38
   598
	    break;
ali@38
   599
	case CV_STATE_PROGRESS:
ali@38
   600
	    if (gtk_assistant_get_current_page(assistant)<2)
ali@38
   601
		return TRUE;
ali@38
   602
	    page=gtk_assistant_get_nth_page(assistant,2);
ali@38
   603
	    baton->eid=g_timeout_add_seconds(1,check_vendor_tick,baton);
ali@38
   604
	    if (!gtk_assistant_get_page_complete(assistant,page))
ali@38
   605
		return FALSE;
ali@38
   606
	    else
ali@38
   607
		retval=FALSE;
ali@38
   608
	    break;
ali@38
   609
	case CV_STATE_PROGRESS_DELAY:
ali@38
   610
	    retval=FALSE;
ali@38
   611
	    baton->eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,baton,
ali@38
   612
	      NULL);
ali@38
   613
	    if (!manual_mode)
ali@38
   614
		gtk_button_clicked(GTK_BUTTON(assistant->forward));
ali@38
   615
	    break;
ali@38
   616
	case CV_STATE_DONE:
ali@38
   617
	    if (gtk_assistant_get_current_page(assistant)<3)
ali@38
   618
		return TRUE;
ali@38
   619
	    if (!manual_mode)
ali@38
   620
		gtk_button_clicked(GTK_BUTTON(assistant->close));
ali@38
   621
	    break;
ali@38
   622
	case CV_STATE_FINISH:
ali@38
   623
	    if (assistant && gtk_widget_get_visible(GTK_WIDGET(assistant)))
ali@38
   624
		return TRUE;
ali@38
   625
	    gtk_main_quit();
ali@38
   626
	    baton->eid=0;
ali@38
   627
	    return FALSE;
ali@38
   628
    }
ali@38
   629
    baton->state++;
ali@38
   630
    return retval;
ali@38
   631
}
ali@38
   632
ali@38
   633
static void test_check_vendor(void)
ali@38
   634
{
ali@38
   635
    int fh;
ali@61
   636
    gchar *root,*s;
ali@61
   637
    char *uri;
ali@38
   638
    GError *err=NULL;
ali@38
   639
    struct razor_importer *importer;
ali@38
   640
    struct razor_set *downgraded;
ali@38
   641
    struct razor_atomic *atomic;
ali@38
   642
    struct plover_vector *packages;
ali@38
   643
    PloverPackageSet *installed;
ali@38
   644
    PloverTransactionHelper *helper;
ali@61
   645
    struct check_vendor_baton baton={0,};
ali@38
   646
    g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE);
ali@38
   647
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   648
    g_assert(mkdtemp(root));
ali@61
   649
    uri=razor_path_to_uri(root);
ali@61
   650
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@38
   651
    helper=get_transaction_helper();
ali@38
   652
    plover_transaction_helper_set_check_vendor(helper,TRUE);
ali@38
   653
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   654
    installed=plover_package_set_new();
ali@61
   655
    if (!plover_package_set_open(installed,uri,TRUE,&err))
ali@38
   656
	g_error("%s: %s",root,err->message);
ali@38
   657
    importer=razor_importer_create();
ali@38
   658
    razor_importer_begin_package(importer,"zappy","0-1","noarch");
ali@38
   659
    razor_importer_add_details(importer,"","","","");
ali@38
   660
    razor_importer_add_property(importer,"zappy",RAZOR_PROPERTY_PROVIDES,"0-1");
ali@38
   661
    razor_importer_add_install_prefix(importer,"/test");
ali@38
   662
    razor_importer_add_file(importer,"/test/bin/zappy");
ali@38
   663
    razor_importer_finish_package(importer);
ali@38
   664
    downgraded=razor_importer_finish(importer);
ali@38
   665
    atomic=razor_atomic_open("Add downgraded packages");
ali@61
   666
    razor_atomic_make_dirs(atomic,uri,"/test/bin/zappy");
ali@61
   667
    s=g_build_filename(uri,"test/bin/zappy",NULL);
ali@38
   668
    fh=razor_atomic_create_file(atomic,s,S_IRWXU|S_IRWXG|S_IRWXO);
ali@38
   669
    g_free(s);
ali@38
   670
    razor_atomic_close(atomic,fh);
ali@38
   671
    if (!plover_package_set_update(installed,downgraded,atomic) ||
ali@38
   672
      razor_atomic_commit(atomic))
ali@38
   673
	g_error("%s: %s",root,razor_atomic_get_error_msg(atomic));
ali@38
   674
    razor_atomic_destroy(atomic);
ali@38
   675
    razor_set_unref(downgraded);
ali@38
   676
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   677
    g_object_unref(installed);
ali@38
   678
    if (!plover_transaction_helper_update(helper,&err))
ali@38
   679
	g_error("update: %s",err->message);
ali@38
   680
    g_assert(!err);
ali@38
   681
    plover_transaction_helper_present(helper);
ali@38
   682
    baton.helper=helper;
ali@38
   683
    baton.eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,&baton,NULL);
ali@38
   684
    gtk_main();
ali@38
   685
    g_object_unref(helper);
ali@38
   686
    g_unsetenv("RAZOR_ROOT");
ali@38
   687
    g_free(root);
ali@61
   688
    free(uri);
ali@38
   689
    g_unsetenv("PLOVER_VENDOR_PREFIX");
ali@38
   690
}
ali@38
   691
ali@61
   692
static gchar *create_new_root_and_install(gchar **prefix_p,char **pkgs)
ali@61
   693
{
ali@61
   694
    gchar *root,*prefix;
ali@61
   695
    char *uri;
ali@61
   696
    GError *err=NULL;
ali@61
   697
    struct comps *comps;
ali@61
   698
    PloverTransaction *transaction;
ali@61
   699
    root=g_strdup("razor-test-dir-XXXXXX");
ali@61
   700
    g_assert(mkdtemp(root));
ali@61
   701
    uri=razor_path_to_uri(root);
ali@61
   702
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@61
   703
    free(uri);
ali@61
   704
    uri=razor_path_to_uri("../yum-repo-test-dir/repodata/comps.xml");
ali@61
   705
    comps=plover_comps_new_from_uri(uri,&err);
ali@61
   706
    free(uri);
ali@61
   707
    if (!comps)
ali@61
   708
	g_error("../yum-repo-test-dir/repodata/comps.xml: %s",err->message);
ali@61
   709
    prefix=plover_comps_get_default_prefix(comps);
ali@61
   710
    plover_comps_free(comps);
ali@61
   711
    transaction=plover_transaction_new_install("../yum-repo-test-dir",prefix,
ali@61
   712
      pkgs,&err);
ali@61
   713
    if (!transaction)
ali@61
   714
	g_error("../yum-repo-test-dir: %s",err->message);
ali@61
   715
    g_assert(plover_transaction_commit(transaction,NULL,NULL));
ali@61
   716
    g_object_unref(transaction);
ali@61
   717
    fflush(stdout);
ali@61
   718
    if (prefix_p)
ali@61
   719
	*prefix_p=prefix;
ali@61
   720
    else
ali@61
   721
	g_free(prefix);
ali@61
   722
    return root;
ali@61
   723
}
ali@61
   724
ali@61
   725
static check_file(const char *root,const char *path)
ali@61
   726
{
ali@61
   727
    gchar *s;
ali@61
   728
    s=g_build_filename(root,path,NULL);
ali@61
   729
    g_assert(g_file_test(s,G_FILE_TEST_EXISTS));
ali@61
   730
    g_free(s);
ali@61
   731
}
ali@61
   732
ali@61
   733
static check_no_file(const char *root,const char *path)
ali@61
   734
{
ali@61
   735
    gchar *s;
ali@61
   736
    s=g_build_filename(root,path,NULL);
ali@61
   737
    g_assert(!g_file_test(s,G_FILE_TEST_EXISTS));
ali@61
   738
    g_free(s);
ali@61
   739
}
ali@61
   740
ali@61
   741
/*
ali@61
   742
 * Test that installing from a repository which is marked as distribution-local
ali@61
   743
 * on top of an existing global installation works if prefix is NULL
ali@61
   744
 * (which is the case on UNIX if PLOVER_VENDOR_PREFIX is not set).
ali@61
   745
 */
ali@61
   746
static void test_unprefixed_distribution_local(void)
ali@61
   747
{
ali@61
   748
    gchar *root;
ali@61
   749
    GError *err=NULL;
ali@61
   750
    char *pkgs[]={"zap",NULL};
ali@61
   751
    struct plover_vector *packages;
ali@61
   752
    PloverPackageSet *installed;
ali@61
   753
    PloverTransactionHelper *helper;
ali@61
   754
    struct run_install_baton baton={0,};
ali@61
   755
    g_unsetenv("PLOVER_VENDOR_PREFIX");
ali@61
   756
    root=create_new_root_and_install(NULL,pkgs);
ali@61
   757
    check_file(root,"/usr/bin/zap");
ali@61
   758
    helper=get_transaction_helper();
ali@61
   759
    plover_transaction_helper_set_check_vendor(helper,TRUE);
ali@61
   760
    plover_transaction_helper_set_base(helper,"../distribution-local-test-dir");
ali@61
   761
    packages=plover_vector_new();
ali@61
   762
    plover_vector_append(packages,"zappy");
ali@61
   763
    if (!plover_transaction_helper_install_packages(helper,packages,&err))
ali@61
   764
	g_error("zappy: %s",err->message);
ali@61
   765
    g_assert(!err);
ali@61
   766
    plover_vector_free(packages);
ali@61
   767
    plover_transaction_helper_present(helper);
ali@61
   768
    baton.helper=helper;
ali@61
   769
    baton.eid=g_idle_add_full(G_PRIORITY_LOW,run_install_tick,&baton,NULL);
ali@61
   770
    gtk_main();
ali@61
   771
    g_object_unref(helper);
ali@61
   772
    check_file(root,"/usr/bin/zappy");
ali@61
   773
    g_free(root);
ali@61
   774
    g_unsetenv("RAZOR_ROOT");
ali@61
   775
}
ali@61
   776
ali@61
   777
/*
ali@61
   778
 * Test that installing from a repository which is marked as distribution-local
ali@61
   779
 * on top of an existing global installation requires removing the existing
ali@61
   780
 * installation if prefix is non-NULL (which is the case if PLOVER_VENDOR_PREFIX
ali@61
   781
 * is set).
ali@61
   782
 */
ali@61
   783
static void test_prefixed_distribution_local(void)
ali@61
   784
{
ali@61
   785
    gchar *root,*s;
ali@61
   786
    gchar *prefix;
ali@61
   787
    GError *err=NULL;
ali@61
   788
    char *pkgs[]={"zap",NULL};
ali@61
   789
    struct plover_vector *packages;
ali@61
   790
    PloverPackageSet *installed;
ali@61
   791
    PloverTransactionHelper *helper;
ali@61
   792
    struct check_vendor_baton baton={0,};
ali@61
   793
    g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE);
ali@61
   794
    helper=get_transaction_helper();
ali@61
   795
    plover_transaction_helper_set_check_vendor(helper,TRUE);
ali@61
   796
    plover_transaction_helper_set_base(helper,"../distribution-local-test-dir");
ali@61
   797
    root=create_new_root_and_install(&prefix,pkgs);
ali@61
   798
    s=g_build_filename(prefix,"bin/zap",NULL);
ali@61
   799
    check_file(root,s);
ali@61
   800
    g_free(s);
ali@61
   801
    packages=plover_vector_new();
ali@61
   802
    plover_vector_append(packages,"filesystem");
ali@61
   803
    if (!plover_transaction_helper_install_packages(helper,packages,&err))
ali@61
   804
	g_error("filesystem: %s",err->message);
ali@61
   805
    g_assert(!err);
ali@61
   806
    plover_vector_free(packages);
ali@61
   807
    plover_transaction_helper_present(helper);
ali@61
   808
    baton.helper=helper;
ali@61
   809
    baton.eid=g_idle_add_full(G_PRIORITY_LOW,check_vendor_tick,&baton,NULL);
ali@61
   810
    gtk_main();
ali@61
   811
    g_object_unref(helper);
ali@61
   812
    s=g_build_filename(prefix,"bin/zap",NULL);
ali@61
   813
    check_no_file(root,s);
ali@61
   814
    g_free(s);
ali@61
   815
    check_no_file(root,"/media");
ali@61
   816
    g_free(root);
ali@61
   817
    g_free(prefix);
ali@61
   818
    g_unsetenv("RAZOR_ROOT");
ali@61
   819
}
ali@61
   820
ali@38
   821
struct set_error_baton {
ali@38
   822
    enum {
ali@38
   823
	SE_STATE_INIT = 0,
ali@38
   824
	SE_STATE_FINISH
ali@38
   825
    } state;
ali@38
   826
    PloverTransactionHelper *helper;
ali@38
   827
};
ali@38
   828
ali@38
   829
/*
ali@38
   830
 * This handler may be called as either an event (ie., idle or timeout)
ali@38
   831
 * or as a (swapped) signal. In the latter case, the return is ignored.
ali@38
   832
 */
ali@38
   833
gboolean set_error_tick(gpointer data)
ali@38
   834
{
ali@38
   835
    struct set_error_baton *baton=data;
ali@38
   836
    GtkDialog *dlg;
ali@38
   837
    GtkWidget *button;
ali@38
   838
    dlg=GTK_DIALOG(baton->helper->error_dialog);
ali@38
   839
    switch(baton->state)
ali@38
   840
    {
ali@38
   841
	case SE_STATE_INIT:
ali@38
   842
	    if (!dlg || !gtk_widget_get_visible(GTK_WIDGET(dlg)))
ali@38
   843
		return TRUE;
ali@38
   844
	    button=gtk_dialog_get_widget_for_response(dlg,GTK_RESPONSE_CLOSE);
ali@38
   845
	    if (!manual_mode)
ali@38
   846
		gtk_button_clicked(GTK_BUTTON(button));
ali@38
   847
	    break;
ali@38
   848
	case SE_STATE_FINISH:
ali@38
   849
	    if (dlg && gtk_widget_get_visible(GTK_WIDGET(dlg)))
ali@38
   850
		return TRUE;
ali@38
   851
	    gtk_main_quit();
ali@38
   852
	    return FALSE;
ali@38
   853
    }
ali@38
   854
    baton->state++;
ali@38
   855
    return TRUE;
ali@38
   856
}
ali@38
   857
ali@38
   858
static void test_set_error(void)
ali@38
   859
{
ali@61
   860
    gchar *root;
ali@61
   861
    char *uri;
ali@38
   862
    const char *errmsg;
ali@38
   863
    GError *err=NULL;
ali@38
   864
    const GError *err2=NULL;
ali@38
   865
    PloverPackageSet *installed;
ali@38
   866
    PloverTransactionHelper *helper;
ali@38
   867
    struct set_error_baton baton={0,};
ali@38
   868
    root=g_strdup("razor-test-dir-XXXXXX");
ali@38
   869
    g_assert(mkdtemp(root));
ali@61
   870
    uri=razor_path_to_uri(root);
ali@38
   871
    g_free(root);
ali@61
   872
    g_setenv("RAZOR_ROOT",uri,TRUE);
ali@61
   873
    free(uri);
ali@38
   874
    helper=get_transaction_helper();
ali@61
   875
    uri=razor_path_to_uri("../razor-test-dir");
ali@61
   876
    installed=plover_package_set_new_from_installed(uri,&err);
ali@61
   877
    free(uri);
ali@38
   878
    if (!installed)
ali@38
   879
	g_error("../razor-test-dir: %s",err->message);
ali@38
   880
    plover_transaction_helper_set_installed(helper,installed);
ali@38
   881
    g_object_unref(installed);
ali@38
   882
    plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
ali@38
   883
    if (!plover_transaction_helper_update(helper,&err))
ali@38
   884
	plover_transaction_helper_set_error(helper,err,"Expected error");
ali@38
   885
    g_assert(plover_transaction_helper_get_visible(helper));
ali@38
   886
    errmsg=plover_transaction_helper_get_error(helper,&err2);
ali@38
   887
    g_assert_cmpstr(errmsg,==,"Expected error");
ali@38
   888
    g_assert_error(err2,err->domain,err->code);
ali@38
   889
    plover_transaction_helper_present(helper);
ali@38
   890
    baton.helper=helper;
ali@38
   891
    g_idle_add_full(G_PRIORITY_LOW,set_error_tick,&baton,NULL);
ali@38
   892
    g_error_free(err);
ali@38
   893
    gtk_main();
ali@38
   894
    g_object_unref(helper);
ali@38
   895
    g_unsetenv("RAZOR_ROOT");
ali@38
   896
}
ali@38
   897
ali@38
   898
int main(int argc,char **argv)
ali@38
   899
{
ali@38
   900
    int retval;
ali@38
   901
    GError *err=NULL;
ali@38
   902
    /*
ali@38
   903
     * Note that because g_test_init() handles --help,
ali@38
   904
     * these options will not appear in the output.
ali@38
   905
     */
ali@38
   906
    GOptionEntry options[]={
ali@38
   907
	{"manual",0,0,G_OPTION_ARG_NONE,&manual_mode,
ali@38
   908
	  "Disable automatic mode",NULL},
ali@38
   909
	{NULL}
ali@38
   910
    };
ali@38
   911
    g_test_init(&argc,&argv,NULL);
ali@38
   912
    g_setenv("GTK_MODULES","",TRUE);
ali@38
   913
    g_setenv("GTK2_RC_FILES","/dev/null",TRUE);
ali@38
   914
    gtk_disable_setlocale();
ali@38
   915
    setlocale(LC_ALL,"C");
ali@38
   916
    g_test_bug_base("mailto:ali@juiblex.co.uk");
ali@38
   917
    if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err))
ali@38
   918
    {
ali@38
   919
	g_printf("%s\n",err->message);
ali@38
   920
	exit(0);
ali@38
   921
    }
ali@38
   922
    g_test_add_func("/transactionhelper/init",test_init);
ali@38
   923
    g_test_add_func("/transactionhelper/basic-properties",
ali@38
   924
      test_basic_properties);
ali@38
   925
    g_test_add_func("/transactionhelper/install-group",test_install_group);
ali@38
   926
    g_test_add_func("/transactionhelper/remove-group",test_remove_group);
ali@38
   927
    g_test_add_func("/transactionhelper/update",test_update);
ali@38
   928
    g_test_add_func("/transactionhelper/run-install",test_run_install);
ali@38
   929
    g_test_add_func("/transactionhelper/run-remove",test_run_remove);
ali@38
   930
    g_test_add_func("/transactionhelper/run-update",test_run_update);
ali@38
   931
    g_test_add_func("/transactionhelper/check-vendor",test_check_vendor);
ali@61
   932
    g_test_add_func("/transactionhelper/unprefixed-distribution-local",
ali@61
   933
      test_unprefixed_distribution_local);
ali@61
   934
    g_test_add_func("/transactionhelper/prefixed-distribution-local",
ali@61
   935
      test_prefixed_distribution_local);
ali@38
   936
    g_test_add_func("/transactionhelper/set-error",test_set_error);
ali@38
   937
    retval=g_test_run();
ali@38
   938
    return retval;
ali@38
   939
}