redo test framework, with tests taken from yum sources
authorDan Winship <danw@gnome.org>
Fri Feb 15 15:09:37 2008 -0500 (2008-02-15)
changeset 125e56c83bda295
parent 124 feef7736a439
child 126 3142795705a5
redo test framework, with tests taken from yum sources

(none of them pass yet...)
sets.xml
test-driver.c
test.xml
     1.1 --- a/sets.xml	Fri Feb 15 15:08:38 2008 -0500
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,24 +0,0 @@
     1.4 -<test-sets>
     1.5 -
     1.6 -  <set name="b">
     1.7 -    <package name="bash" version="3.2-18.fc8">
     1.8 -      <requires name="libc.so.6"/>
     1.9 -      <requires name="config(bash)" eq="3.2-18.fc8"/>
    1.10 -      <provides name="bash" eq="3.2-18.fc8"/>
    1.11 -      <file name="/bin"/>
    1.12 -      <file name="/bin/bash"/>
    1.13 -    </package>
    1.14 -  </set>
    1.15 -
    1.16 -  <set name="c">
    1.17 -    <package name="nss" version="1.8-fc10">
    1.18 -      <provides name="nss" eq="1.8-fc10"/>
    1.19 -      <file name="/bin/nss"/>
    1.20 -    </package>
    1.21 -
    1.22 -    <package name="x" version="2">
    1.23 -      <conflicts name="y" eq="1.1"/>
    1.24 -    </package>
    1.25 -  </set>
    1.26 -
    1.27 -</test-sets>
     2.1 --- a/test-driver.c	Fri Feb 15 15:08:38 2008 -0500
     2.2 +++ b/test-driver.c	Fri Feb 15 15:09:37 2008 -0500
     2.3 @@ -50,17 +50,16 @@
     2.4  	close(fd);
     2.5  }
     2.6  
     2.7 -struct test_set {
     2.8 -	char *name;
     2.9 -	struct razor_set *set;
    2.10 -	struct test_set *next;
    2.11 -};
    2.12 +struct test_context {
    2.13 +	struct razor_set *system_set, *repo_set, *result_set;
    2.14  
    2.15 -struct test_context {
    2.16  	struct razor_importer *importer;
    2.17 -	struct test_set *sets;
    2.18 -	struct razor_package_iterator *package_iterator;
    2.19 -	struct razor_property_iterator *property_iterator;
    2.20 +	struct razor_set **importer_set;
    2.21 +
    2.22 +	char *install_pkgs[3], *remove_pkgs[3];
    2.23 +	int n_install_pkgs, n_remove_pkgs;
    2.24 +
    2.25 +	int in_result, result_errors;
    2.26  };
    2.27  
    2.28  static void
    2.29 @@ -82,234 +81,267 @@
    2.30  	va_end(ap);
    2.31  }
    2.32  
    2.33 -static void
    2.34 -parse_property(struct test_context *ctx, const char **atts,
    2.35 -	       enum razor_property_type type)
    2.36 +static enum razor_version_relation
    2.37 +parse_relation (const char *rel_str)
    2.38  {
    2.39 -	const char *name = NULL, *version = NULL;
    2.40 -
    2.41 -	get_atts(atts, "name", &name, "eq", &version, NULL);
    2.42 -
    2.43 -	if (name == NULL) {
    2.44 -		fprintf(stderr, "no name specified for property\n");
    2.45 -		exit(-1);
    2.46 -	}
    2.47 -	
    2.48 -	razor_importer_add_property(ctx->importer, name,
    2.49 -				    RAZOR_VERSION_EQUAL, version, type);
    2.50 +	if (!rel_str)
    2.51 +		return -1;
    2.52 +	if (rel_str[0] == 'l')
    2.53 +		return rel_str[1] == 'e' ? RAZOR_VERSION_LESS_OR_EQUAL : RAZOR_VERSION_LESS;
    2.54 +	else if (rel_str[0] == 'g')
    2.55 +		return rel_str[1] == 'e' ? RAZOR_VERSION_GREATER_OR_EQUAL : RAZOR_VERSION_GREATER;
    2.56 +	else if (rel_str[0] == 'e' || rel_str[1] == 'q')
    2.57 +		return RAZOR_VERSION_EQUAL;
    2.58 +	else
    2.59 +		return -1;
    2.60  }
    2.61  
    2.62  static void
    2.63 -start_set_element(void *data, const char *element, const char **atts)
    2.64 +start_test(struct test_context *ctx, const char **atts)
    2.65  {
    2.66 -	struct test_context *ctx = data;
    2.67 -	struct test_set *set;
    2.68 -	const char *name, *version;
    2.69 +	const char *name = NULL;
    2.70  
    2.71 -	if (strcmp(element, "set") == 0) {
    2.72 -		get_atts(atts, "name", &name, NULL);
    2.73 -		ctx->importer = razor_importer_new();	
    2.74 -		set = malloc(sizeof *set);
    2.75 -		set->name = strdup(name);
    2.76 -		set->next = ctx->sets;
    2.77 -		ctx->sets = set;
    2.78 -	} else if (strcmp(element, "package") == 0) {
    2.79 -		get_atts(atts, "name", &name, "version", &version, NULL);
    2.80 -		razor_importer_begin_package(ctx->importer, name, version);
    2.81 -	} else if (strcmp(element, "requires") == 0) {
    2.82 -		parse_property(ctx, atts, RAZOR_PROPERTY_REQUIRES);
    2.83 -	} else if (strcmp(element, "provides") == 0) {
    2.84 -		parse_property(ctx, atts, RAZOR_PROPERTY_PROVIDES);
    2.85 -	} else if (strcmp(element, "obsoletes") == 0) {
    2.86 -		parse_property(ctx, atts, RAZOR_PROPERTY_OBSOLETES);
    2.87 -	} else if (strcmp(element, "conflicts") == 0) {
    2.88 -		parse_property(ctx, atts, RAZOR_PROPERTY_CONFLICTS);
    2.89 -	} else if (strcmp(element, "file") == 0) {
    2.90 -		get_atts(atts, "name", &name, NULL);
    2.91 -		razor_importer_add_file(ctx->importer, name);		
    2.92 -	} else if (strcmp(element, "dir") == 0) {
    2.93 -		get_atts(atts, "name", &name, NULL);
    2.94 -		razor_importer_add_file(ctx->importer, name);		
    2.95 +	get_atts(atts, "name", &name, NULL);
    2.96 +	if (!name) {
    2.97 +		fprintf(stderr, "Test with no name\n");
    2.98 +		exit(1);
    2.99 +	}
   2.100 +	printf("%s\n", name);
   2.101 +}
   2.102 +
   2.103 +static void
   2.104 +end_test(struct test_context *ctx)
   2.105 +{
   2.106 +	if (ctx->system_set) {
   2.107 +		razor_set_destroy(ctx->system_set);
   2.108 +		ctx->system_set = NULL;
   2.109 +	}
   2.110 +	if (ctx->repo_set) {
   2.111 +		razor_set_destroy(ctx->repo_set);
   2.112 +		ctx->repo_set = NULL;
   2.113 +	}
   2.114 +	if (ctx->result_set) {
   2.115 +		razor_set_destroy(ctx->result_set);
   2.116 +		ctx->result_set = NULL;
   2.117  	}
   2.118  }
   2.119  
   2.120  static void
   2.121 -end_set_element (void *data, const char *name)
   2.122 +start_set(struct test_context *ctx, const char **atts)
   2.123  {
   2.124 -	struct test_context *ctx = data;
   2.125 +	const char *name = NULL;
   2.126  
   2.127 -	if (strcmp(name, "set") == 0) {
   2.128 -		ctx->sets->set = razor_importer_finish(ctx->importer);
   2.129 -	} else if (strcmp(name, "package") == 0) {
   2.130 -		razor_importer_finish_package(ctx->importer);
   2.131 -	}
   2.132 -}
   2.133 -
   2.134 -static struct razor_set *
   2.135 -lookup_set(struct test_context *ctx, const char *name)
   2.136 -{
   2.137 -	struct test_set *set;
   2.138 -
   2.139 -	for (set = ctx->sets; set != NULL; set = set->next) {
   2.140 -		if (strcmp(set->name, name) == 0)
   2.141 -			return set->set;
   2.142 -	}
   2.143 -
   2.144 -	return NULL;
   2.145 -}
   2.146 -
   2.147 -static void
   2.148 -verify_begin(struct test_context *ctx, const char **atts)
   2.149 -{
   2.150 -	struct razor_set *set;
   2.151 -	const char *type, *name;
   2.152 -
   2.153 -	get_atts(atts, "type", &type, "set", &name, NULL);
   2.154 -	set = lookup_set(ctx, name);
   2.155 -	if (set == NULL) {
   2.156 -		fprintf(stderr, "set %s not found\n", name);
   2.157 -		exit(-1);
   2.158 -	}
   2.159 -
   2.160 -	if (strcmp(type, "packages") == 0) {
   2.161 -		ctx->package_iterator =
   2.162 -			razor_package_iterator_create(set);
   2.163 -	} else if (strcmp(type, "properties") == 0) {
   2.164 -		ctx->property_iterator =
   2.165 -			razor_property_iterator_create(set, NULL);
   2.166 -	} else {
   2.167 -		fprintf(stderr,
   2.168 -			"unknown compare type \"%s\"\n", type);
   2.169 -		exit(-1);
   2.170 +	ctx->importer = razor_importer_new();
   2.171 +	get_atts(atts, "name", &name, NULL);
   2.172 +	if (!name)
   2.173 +		ctx->importer_set = &ctx->result_set;
   2.174 +	else if (!strcmp(name, "system"))
   2.175 +		ctx->importer_set = &ctx->system_set;
   2.176 +	else if (!strcmp(name, "repo"))
   2.177 +		ctx->importer_set = &ctx->repo_set;
   2.178 +	else {
   2.179 +		fprintf(stderr, "  bad set name '%s'\n", name);
   2.180 +		exit(1);
   2.181  	}
   2.182  }
   2.183  
   2.184  static void
   2.185 -verify_end(struct test_context *ctx)
   2.186 +end_set(struct test_context *ctx)
   2.187  {
   2.188 -	struct razor_package *package;
   2.189 -	struct razor_property *property;
   2.190 -	const char *name, *version;
   2.191 -	enum razor_property_type type;
   2.192 -	enum razor_version_relation relation;
   2.193 +	*ctx->importer_set = razor_importer_finish(ctx->importer);
   2.194 +	ctx->importer = NULL;
   2.195 +}
   2.196  
   2.197 -	if (ctx->package_iterator != NULL) {
   2.198 -		if (razor_package_iterator_next(ctx->package_iterator,
   2.199 -						&package,
   2.200 -						&name, &version)) {
   2.201 -			fprintf(stderr, "too few packages in set\n");
   2.202 -			exit(-1);
   2.203 -		}
   2.204 -				
   2.205 -		razor_package_iterator_destroy(ctx->package_iterator);
   2.206 -		ctx->package_iterator = NULL;
   2.207 +static void
   2.208 +start_package(struct test_context *ctx, const char **atts)
   2.209 +{
   2.210 +	const char *name = NULL, *version = NULL, *arch = NULL;
   2.211 +
   2.212 +	get_atts(atts, "name", &name, "version", &version, "arch", &arch, NULL);
   2.213 +	if (!name) {
   2.214 +		fprintf(stderr, "  package with no name\n");
   2.215 +		exit(1);
   2.216  	}
   2.217  
   2.218 -	if (ctx->property_iterator != NULL) {
   2.219 -		if (razor_property_iterator_next(ctx->property_iterator,
   2.220 -						 &property,
   2.221 -						 &name, &relation, &version,
   2.222 -						 &type)) {
   2.223 -			fprintf(stderr, "too few properties in set\n");
   2.224 -			exit(-1);
   2.225 +	razor_importer_begin_package(ctx->importer, name, version);
   2.226 +	razor_importer_add_property(ctx->importer, name,
   2.227 +				    RAZOR_VERSION_EQUAL, version,
   2.228 +				    RAZOR_PROPERTY_PROVIDES);
   2.229 +}
   2.230 +
   2.231 +static void
   2.232 +end_package(struct test_context *ctx)
   2.233 +{
   2.234 +	razor_importer_finish_package(ctx->importer);
   2.235 +}
   2.236 +
   2.237 +static void
   2.238 +start_property(struct test_context *ctx, enum razor_property_type type, const char **atts)
   2.239 +{
   2.240 +	const char *name = NULL, *rel_str = NULL, *version = NULL;
   2.241 +	enum razor_version_relation rel;
   2.242 +
   2.243 +	get_atts(atts, "name", &name, "rel", &rel_str, "version", &version, NULL);
   2.244 +	if (name == NULL) {
   2.245 +		fprintf(stderr, "  no name specified for property\n");
   2.246 +		exit(1);
   2.247 +	}
   2.248 +	if (version) {
   2.249 +		rel = parse_relation(rel_str);
   2.250 +		if (rel == -1) {
   2.251 +			fprintf(stderr, "  bad or missing version relation for property %s\n", name);
   2.252 +			exit(1);
   2.253  		}
   2.254 +	} else
   2.255 +		rel = RAZOR_VERSION_EQUAL;
   2.256 +	
   2.257 +	razor_importer_add_property(ctx->importer, name,
   2.258 +				    rel, version, type);
   2.259 +}
   2.260  
   2.261 -		razor_property_iterator_destroy(ctx->property_iterator);
   2.262 -		ctx->property_iterator = NULL;
   2.263 +static void
   2.264 +start_transaction(struct test_context *ctx, const char **atts)
   2.265 +{
   2.266 +	ctx->n_install_pkgs = 0;
   2.267 +	ctx->n_remove_pkgs = 0;
   2.268 +}
   2.269 +
   2.270 +static void
   2.271 +end_transaction(struct test_context *ctx)
   2.272 +{
   2.273 +	/* FIXME: removes */
   2.274 +	ctx->system_set = razor_set_update(ctx->system_set,
   2.275 +					   ctx->repo_set,
   2.276 +					   ctx->n_install_pkgs,
   2.277 +					   (const char **)ctx->install_pkgs);
   2.278 +
   2.279 +	while (ctx->n_install_pkgs--)
   2.280 +		free(ctx->install_pkgs[ctx->n_install_pkgs]);
   2.281 +	while (ctx->n_remove_pkgs--)
   2.282 +		free(ctx->remove_pkgs[ctx->n_remove_pkgs]);
   2.283 +}
   2.284 +
   2.285 +static void
   2.286 +start_install_or_update(struct test_context *ctx, const char **atts)
   2.287 +{
   2.288 +	const char *name = NULL;
   2.289 +
   2.290 +	get_atts(atts, "name", &name, NULL);
   2.291 +	if (!name) {
   2.292 +		fprintf(stderr, "  install/update with no name\n");
   2.293 +		exit(1);
   2.294 +	}
   2.295 +
   2.296 +	ctx->install_pkgs[ctx->n_install_pkgs++] = strdup(name);
   2.297 +}
   2.298 +
   2.299 +static void
   2.300 +start_remove(struct test_context *ctx, const char **atts)
   2.301 +{
   2.302 +	const char *name = NULL;
   2.303 +
   2.304 +	get_atts(atts, "name", &name, NULL);
   2.305 +	if (!name) {
   2.306 +		fprintf(stderr, "  remove with no name\n");
   2.307 +		exit(1);
   2.308 +	}
   2.309 +
   2.310 +	ctx->remove_pkgs[ctx->n_remove_pkgs++] = strdup(name);
   2.311 +}
   2.312 +
   2.313 +static void
   2.314 +start_result(struct test_context *ctx, const char **atts)
   2.315 +{
   2.316 +	ctx->in_result = 1;
   2.317 +}
   2.318 +
   2.319 +static void
   2.320 +diff_callback(const char *name,
   2.321 +	      const char *old_version, const char *new_version,
   2.322 +	      void *data)
   2.323 +{
   2.324 +	struct test_context *ctx = data;
   2.325 +
   2.326 +	ctx->result_errors++;
   2.327 +	if (old_version) {
   2.328 +		fprintf(stderr, "  result set should not contain %s %s\n",
   2.329 +			name, old_version);
   2.330 +	} else {
   2.331 +		fprintf(stderr, "  result set should contain %s %s\n",
   2.332 +			name, new_version);
   2.333  	}
   2.334  }
   2.335  
   2.336  static void
   2.337 -verify_package(struct test_context *ctx, const char **atts)
   2.338 +end_result(struct test_context *ctx)
   2.339  {
   2.340 -	struct razor_package *package;
   2.341 -	const char *name, *version, *ref_name, *ref_version;
   2.342 +	ctx->in_result = 0;
   2.343  
   2.344 -	if (ctx->package_iterator == NULL) {
   2.345 -		fprintf(stderr,
   2.346 -			"\"package\" element seen, "
   2.347 -			"but not in package verify mode\n");
   2.348 -		exit(-1);
   2.349 +	/* FIXME */
   2.350 +	if (ctx->n_remove_pkgs) {
   2.351 +		printf ("  (ignoring because of unimplemented remove)\n");
   2.352 +		return;
   2.353  	}
   2.354  
   2.355 -	get_atts(atts, "name", &ref_name, "version", &ref_version, NULL);
   2.356 -	if (!razor_package_iterator_next(ctx->package_iterator,
   2.357 -					 &package, &name, &version)) {
   2.358 -		fprintf(stderr, "too many packages in set\n");
   2.359 -		exit(-1);
   2.360 +	if (ctx->system_set && ctx->result_set) {
   2.361 +		ctx->result_errors = 0;
   2.362 +		razor_set_diff(ctx->system_set, ctx->result_set,
   2.363 +			       diff_callback, ctx);
   2.364 +		if (ctx->result_errors)
   2.365 +			exit(1);
   2.366  	}
   2.367 -			
   2.368 -	if (strcmp(name, ref_name) != 0 || strcmp(version, ref_version) != 0) {
   2.369 -		fprintf(stderr,
   2.370 -			"package mismatch; expected %s-%s, got %s-%s\n",
   2.371 -			ref_name, ref_version, name, version);
   2.372 -		exit(-1);
   2.373 -	}
   2.374 +
   2.375  }
   2.376  
   2.377  static void
   2.378 -verify_property(struct test_context *ctx,
   2.379 -		enum razor_property_type ref_type, const char **atts)
   2.380 +start_unsatisfied(struct test_context *ctx, const char **atts)
   2.381  {
   2.382 -	struct razor_property *property;
   2.383 -	const char *name, *version, *ref_name, *ref_version;
   2.384 -	enum razor_property_type type;
   2.385 -	enum razor_version_relation relation;
   2.386 -	int same_version;
   2.387 +	/* FIXME */
   2.388 +	fprintf(stderr, "Can't handle <unsatisfied>\n");
   2.389 +	exit(1);
   2.390 +}
   2.391  
   2.392 -	if (ctx->property_iterator == NULL) {
   2.393 -		fprintf(stderr,
   2.394 -			"\"requires/provides\" element seen, "
   2.395 -			"but not in property verify mode\n");
   2.396 -		exit(-1);
   2.397 -	}
   2.398 -
   2.399 -	get_atts(atts, "name", &ref_name, "eq", &ref_version, NULL);
   2.400 -	if (!razor_property_iterator_next(ctx->property_iterator, &property,
   2.401 -					  &name, &relation, &version, &type)) {
   2.402 -		fprintf(stderr, "too many properties in set\n");
   2.403 -		exit(-1);
   2.404 -	}
   2.405 -			
   2.406 -	if (version != NULL && ref_version != NULL)
   2.407 -		same_version = strcmp(version, ref_version) == 0;
   2.408 -	else if (version == NULL && ref_version == NULL)
   2.409 -		same_version = 1;
   2.410 -	else
   2.411 -		same_version = 0;
   2.412 -
   2.413 -	if (strcmp(name, ref_name) != 0 || !same_version || type != ref_type) {
   2.414 -		fprintf(stderr,
   2.415 -			"property mismatch; expected %s-%s/%d, got %s-%s/%d\n",
   2.416 -			ref_name, ref_version, ref_type,
   2.417 -			name, version, type);
   2.418 -		exit(-1);
   2.419 -	}
   2.420 +static void
   2.421 +end_unsatisfied(struct test_context *ctx)
   2.422 +{
   2.423  }
   2.424  
   2.425  static void
   2.426  start_test_element(void *data, const char *element, const char **atts)
   2.427  {
   2.428  	struct test_context *ctx = data;
   2.429 -	const char *name;
   2.430  
   2.431 -	if (strcmp(element, "import") == 0) {
   2.432 -		get_atts(atts, "file", &name, NULL);
   2.433 -		parse_xml_file(name, start_set_element, end_set_element, ctx);
   2.434 -	} else if (strcmp(element, "update") == 0) {
   2.435 -		/* run update to create new set */
   2.436 -	} else if (strcmp(element, "verify") == 0) {
   2.437 -		verify_begin(ctx, atts);
   2.438 +	if (strcmp(element, "tests") == 0) {
   2.439 +		;
   2.440 +	} else if (strcmp(element, "test") == 0) {
   2.441 +		start_test(ctx, atts);
   2.442 +	} else if (strcmp(element, "set") == 0) {
   2.443 +		start_set(ctx, atts);
   2.444 +	} else if (strcmp(element, "transaction") == 0) {
   2.445 +		start_transaction(ctx, atts);
   2.446 +	} else if (strcmp(element, "install") == 0) {
   2.447 +		start_install_or_update(ctx, atts);
   2.448 +	} else if (strcmp(element, "install") == 0) {
   2.449 +		start_install_or_update(ctx, atts);
   2.450 +	} else if (strcmp(element, "remove") == 0) {
   2.451 +		start_remove(ctx, atts);
   2.452 +	} else if (strcmp(element, "result") == 0) {
   2.453 +		start_result(ctx, atts);
   2.454 +	} else if (strcmp(element, "unsatisfied") == 0) {
   2.455 +		start_unsatisfied(ctx, atts);
   2.456  	} else if (strcmp(element, "package") == 0) {
   2.457 -		verify_package(ctx, atts);
   2.458 +		start_package(ctx, atts);
   2.459  	} else if (strcmp(element, "requires") == 0) {
   2.460 -		verify_property(ctx, RAZOR_PROPERTY_REQUIRES, atts);
   2.461 +		start_property(ctx, RAZOR_PROPERTY_REQUIRES, atts);
   2.462  	} else if (strcmp(element, "provides") == 0) {
   2.463 -		verify_property(ctx, RAZOR_PROPERTY_PROVIDES, atts);
   2.464 +		start_property(ctx, RAZOR_PROPERTY_PROVIDES, atts);
   2.465  	} else if (strcmp(element, "conflicts") == 0) {
   2.466 -		verify_property(ctx, RAZOR_PROPERTY_CONFLICTS, atts);
   2.467 +		start_property(ctx, RAZOR_PROPERTY_CONFLICTS, atts);
   2.468  	} else if (strcmp(element, "obsoletes") == 0) {
   2.469 -		verify_property(ctx, RAZOR_PROPERTY_OBSOLETES, atts);
   2.470 +		start_property(ctx, RAZOR_PROPERTY_OBSOLETES, atts);
   2.471 +	} else {
   2.472 +		fprintf(stderr, "Unrecognized element '%s'\n", element);
   2.473 +		exit(1);
   2.474  	}
   2.475  }
   2.476  
   2.477 @@ -318,8 +350,19 @@
   2.478  {
   2.479  	struct test_context *ctx = data;
   2.480  
   2.481 -	if (strcmp(element, "verify") == 0)
   2.482 -		verify_end(ctx);
   2.483 +	if (strcmp(element, "test") == 0) {
   2.484 +		end_test(ctx);
   2.485 +	} else if (strcmp(element, "set") == 0) {
   2.486 +		end_set(ctx);
   2.487 +	} else if (strcmp(element, "package") == 0) {
   2.488 +		end_package(ctx);
   2.489 +	} else if (strcmp(element, "transaction") == 0) {
   2.490 +		end_transaction(ctx);
   2.491 +	} else if (strcmp(element, "result") == 0) {
   2.492 +		end_result(ctx);
   2.493 +	} else if (strcmp(element, "unsatisfied") == 0) {
   2.494 +		end_unsatisfied(ctx);
   2.495 +	}
   2.496  }
   2.497  
   2.498  int main(int argc, char *argv[])
     3.1 --- a/test.xml	Fri Feb 15 15:08:38 2008 -0500
     3.2 +++ b/test.xml	Fri Feb 15 15:09:37 2008 -0500
     3.3 @@ -1,16 +1,852 @@
     3.4 -<test title="gah">
     3.5 +<tests>
     3.6  
     3.7 -  <import file="sets.xml"/>
     3.8 +    <test name="testEmpty">
     3.9 +	<set name="system"/>
    3.10 +	<set name="repo">
    3.11 +	    <package name="zsh" version="1-1" arch="i386"/>
    3.12 +	</set>
    3.13 +	<transaction>
    3.14 +	    <install name="zsh"/>
    3.15 +	    <remove name="zsh"/>
    3.16 +	</transaction>
    3.17 +	<result>
    3.18 +	    <set/>
    3.19 +	</result>
    3.20 +    </test>
    3.21  
    3.22 -  <update name="c" from="a" to="b"/>
    3.23 +    <test name="testInstallSinglePackageNoRequires">
    3.24 +	<set name="system"/>
    3.25 +	<set name="repo">
    3.26 +	    <package name="zsh" version="1-1" arch="i386"/>
    3.27 +	</set>
    3.28 +	<transaction>
    3.29 +	    <install name="zsh"/>
    3.30 +	</transaction>
    3.31 +	<result>
    3.32 +	    <set>
    3.33 +		<package name="zsh" version="1-1" arch="i386"/>
    3.34 +	    </set>
    3.35 +	</result>
    3.36 +    </test>
    3.37  
    3.38 -  <verify set="b" type="packages">
    3.39 -    <package name="bash" version="3.2-18.fc8"/>
    3.40 -  </verify>
    3.41 +    <test name="testInstallSinglePackageRequireNotProvided">
    3.42 +	<set name="system"/>
    3.43 +	<set name="repo">
    3.44 +	    <package name="zsh" version="1-1" arch="i386">
    3.45 +		<requires name="zip"/>
    3.46 +	    </package>
    3.47 +	</set>
    3.48 +	<transaction>
    3.49 +	    <install name="zsh"/>
    3.50 +	</transaction>
    3.51 +	<result>
    3.52 +	    <unsatisfiable>
    3.53 +		<requires name="zip"/>
    3.54 +	    </unsatisfiable>
    3.55 +	</result>
    3.56 +    </test>
    3.57  
    3.58 -  <verify set="c" type="properties">
    3.59 -    <provides name="nss" eq="1.8-fc10"/>
    3.60 -    <conflicts name="y" eq="1.1"/>
    3.61 -  </verify>
    3.62 +    <test name="testInstallSinglePackageRequireInstalled">
    3.63 +	<set name="system">
    3.64 +	    <package name="zip" version="1-1" arch="i386"/>
    3.65 +	</set>
    3.66 +	<set name="repo">
    3.67 +	    <package name="zsh" version="1-1" arch="i386">
    3.68 +		<requires name="zip"/>
    3.69 +	    </package>
    3.70 +	</set>
    3.71 +	<transaction>
    3.72 +	    <install name="zsh"/>
    3.73 +	</transaction>
    3.74 +	<result>
    3.75 +	    <set>
    3.76 +		<package name="zip" version="1-1" arch="i386"/>
    3.77 +		<package name="zsh" version="1-1" arch="i386"/>
    3.78 +	    </set>
    3.79 +	</result>
    3.80 +    </test>
    3.81  
    3.82 -</test>
    3.83 +    <test name="testInstallSinglePackageRequireInstalledRequireNotProvided">
    3.84 +	<set name="system">
    3.85 +	    <package name="zip" version="1-2" arch="i386">
    3.86 +		<requires name="zap"/>
    3.87 +	    </package>
    3.88 +	</set>
    3.89 +	<set name="repo">
    3.90 +	    <package name="zsh" version="1-1" arch="i386">
    3.91 +		<requires name="zip"/>
    3.92 +	    </package>
    3.93 +	</set>
    3.94 +	<transaction>
    3.95 +	    <install name="zsh"/>
    3.96 +	</transaction>
    3.97 +	<result>
    3.98 +	    <unsatisfiable>
    3.99 +		<requires name="zap"/>
   3.100 +	    </unsatisfiable>
   3.101 +	</result>
   3.102 +    </test>
   3.103 +
   3.104 +    <test name="testInstallSinglePackageRequireInstalledRequireInstall">
   3.105 +	<set name="system">
   3.106 +	    <package name="zip" version="1-3" arch="i386">
   3.107 +		<requires name="zap"/>
   3.108 +	    </package>
   3.109 +	</set>
   3.110 +	<set name="repo">
   3.111 +	    <package name="zsh" version="1-1" arch="i386">
   3.112 +		<requires name="zip"/>
   3.113 +	    </package>
   3.114 +	    <package name="zap" version="1-2" arch="i386"/>
   3.115 +	</set>
   3.116 +	<transaction>
   3.117 +	    <install name="zsh"/>
   3.118 +	    <install name="zap"/>
   3.119 +	</transaction>
   3.120 +	<result>
   3.121 +	    <set>
   3.122 +		<package name="zap" version="1-2" arch="i386"/>
   3.123 +		<package name="zip" version="1-3" arch="i386"/>
   3.124 +		<package name="zsh" version="1-1" arch="i386"/>
   3.125 +	    </set>
   3.126 +	</result>
   3.127 +    </test>
   3.128 +
   3.129 +    <test name="testInstallSinglePackageRequireVer1NotProvided">
   3.130 +	<set name="system">
   3.131 +	    <package name="zip" version="1.0-2" arch="i386"/>
   3.132 +	</set>
   3.133 +	<set name="repo">
   3.134 +	    <package name="zsh" version="1-1" arch="i386">
   3.135 +		<requires name="zip" relation="EQ" version="1.3-2"/>
   3.136 +	    </package>
   3.137 +	</set>
   3.138 +	<transaction>
   3.139 +	    <install name="zsh"/>
   3.140 +	</transaction>
   3.141 +	<result>
   3.142 +	    <unsatisfiable>
   3.143 +		<requires name="zip" relation="EQ" version="1.3-2"/>
   3.144 +	    </unsatisfiable>
   3.145 +	</result>
   3.146 +    </test>
   3.147 +
   3.148 +    <test name="testInstallSinglePackageRequireVer1Installed">
   3.149 +	<set name="system">
   3.150 +	    <package name="zip" version="1.3-2" arch="i386"/>
   3.151 +	</set>
   3.152 +	<set name="repo">
   3.153 +	    <package name="zsh" version="1-1" arch="i386">
   3.154 +		<requires name="zip" relation="EQ" version="1.3-2"/>
   3.155 +	    </package>
   3.156 +	</set>
   3.157 +	<transaction>
   3.158 +	    <install name="zsh"/>
   3.159 +	</transaction>
   3.160 +	<result>
   3.161 +	    <set>
   3.162 +		<package name="zip" version="1.3-2" arch="i386"/>
   3.163 +		<package name="zsh" version="1-1" arch="i386"/>
   3.164 +	    </set>
   3.165 +	</result>
   3.166 +    </test>
   3.167 +
   3.168 +    <test name="testInstallSinglePackageRequireVer2NotProvided">
   3.169 +	<set name="system">
   3.170 +	    <package name="zip" version="1.3-2" arch="i386"/>
   3.171 +	</set>
   3.172 +	<set name="repo">
   3.173 +	    <package name="zsh" version="1-1" arch="i386">
   3.174 +		<requires name="zip" relation="EQ" version="1.3-4"/>
   3.175 +	    </package>
   3.176 +	</set>
   3.177 +	<transaction>
   3.178 +	    <install name="zsh"/>
   3.179 +	</transaction>
   3.180 +	<result>
   3.181 +	    <unsatisfiable>
   3.182 +		<requires name="zip" relation="EQ" version="1.3-4"/>
   3.183 +	    </unsatisfiable>
   3.184 +	</result>
   3.185 +    </test>
   3.186 +
   3.187 +    <test name="testInstallSinglePackageRequireVer2Installed">
   3.188 +	<set name="system">
   3.189 +	    <package name="zip" version="1.3-4" arch="i386"/>
   3.190 +	</set>
   3.191 +	<set name="repo">
   3.192 +	    <package name="zsh" version="1-1" arch="i386">
   3.193 +		<requires name="zip" relation="EQ" version="1.3-4"/>
   3.194 +	    </package>
   3.195 +	</set>
   3.196 +	<transaction>
   3.197 +	    <install name="zsh"/>
   3.198 +	</transaction>
   3.199 +	<result>
   3.200 +	    <set>
   3.201 +		<package name="zip" version="1.3-4" arch="i386"/>
   3.202 +		<package name="zsh" version="1-1" arch="i386"/>
   3.203 +	    </set>
   3.204 +	</result>
   3.205 +    </test>
   3.206 +
   3.207 +    <test name="testInstallSinglePackageRequireVer3NotProvided">
   3.208 +	<set name="system">
   3.209 +	    <package name="zip" version="0:1.3-4" arch="i386"/>
   3.210 +	</set>
   3.211 +	<set name="repo">
   3.212 +	    <package name="zsh" version="1-1" arch="i386">
   3.213 +		<requires name="zip" relation="GE" version="1:1.3-4"/>
   3.214 +	    </package>
   3.215 +	</set>
   3.216 +	<transaction>
   3.217 +	    <install name="zsh"/>
   3.218 +	</transaction>
   3.219 +	<result>
   3.220 +	    <unsatisfiable>
   3.221 +		<requires name="zip" relation="GE" version="1:1.3-4"/>
   3.222 +	    </unsatisfiable>
   3.223 +	</result>
   3.224 +    </test>
   3.225 +
   3.226 +    <test name="testInstallSinglePackageRequireVer3Installed">
   3.227 +	<set name="system">
   3.228 +	    <package name="zip" version="2:1.3-4" arch="i386"/>
   3.229 +	</set>
   3.230 +	<set name="repo">
   3.231 +	    <package name="zsh" version="1-1" arch="i386">
   3.232 +		<requires name="zip" relation="GE" version="2:1.3-4"/>
   3.233 +	    </package>
   3.234 +	</set>
   3.235 +	<transaction>
   3.236 +	    <install name="zsh"/>
   3.237 +	</transaction>
   3.238 +	<result>
   3.239 +	    <set>
   3.240 +		<package name="zip" version="2:1.3-4" arch="i386"/>
   3.241 +		<package name="zsh" version="1-1" arch="i386"/>
   3.242 +	    </set>
   3.243 +	</result>
   3.244 +    </test>
   3.245 +
   3.246 +    <test name="testInstallSinglePackageRequireVer4NotProvided">
   3.247 +	<set name="system">
   3.248 +	    <package name="zip" version="2:1.3-4" arch="i386"/>
   3.249 +	</set>
   3.250 +	<set name="repo">
   3.251 +	    <package name="zsh" version="1-1" arch="i386">
   3.252 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.253 +	    </package>
   3.254 +	</set>
   3.255 +	<transaction>
   3.256 +	    <install name="zsh"/>
   3.257 +	</transaction>
   3.258 +	<result>
   3.259 +	    <unsatisfiable>
   3.260 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.261 +	    </unsatisfiable>
   3.262 +	</result>
   3.263 +    </test>
   3.264 +
   3.265 +    <test name="testInstallSinglePackageRequireVer4_1Installed">
   3.266 +	<set name="system">
   3.267 +	    <package name="zip" version="2:1.0-4" arch="i386"/>
   3.268 +	</set>
   3.269 +	<set name="repo">
   3.270 +	    <package name="zsh" version="1-1" arch="i386">
   3.271 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.272 +	    </package>
   3.273 +	</set>
   3.274 +	<transaction>
   3.275 +	    <install name="zsh"/>
   3.276 +	</transaction>
   3.277 +	<result>
   3.278 +	    <set>
   3.279 +		<package name="zip" version="2:1.0-4" arch="i386"/>
   3.280 +		<package name="zsh" version="1-1" arch="i386"/>
   3.281 +	    </set>
   3.282 +	</result>
   3.283 +    </test>
   3.284 +
   3.285 +    <test name="testInstallSinglePackageRequireVer4_2Installed">
   3.286 +	<set name="system">
   3.287 +	    <package name="zip" version="2:1.3-3" arch="i386"/>
   3.288 +	</set>
   3.289 +	<set name="repo">
   3.290 +	    <package name="zsh" version="1-1" arch="i386">
   3.291 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.292 +	    </package>
   3.293 +	</set>
   3.294 +	<transaction>
   3.295 +	    <install name="zsh"/>
   3.296 +	</transaction>
   3.297 +	<result>
   3.298 +	    <set>
   3.299 +		<package name="zip" version="2:1.3-3" arch="i386"/>
   3.300 +		<package name="zsh" version="1-1" arch="i386"/>
   3.301 +	    </set>
   3.302 +	</result>
   3.303 +    </test>
   3.304 +
   3.305 +    <test name="testInstallSinglePackageRequireVer4_3Installed">
   3.306 +	<set name="system">
   3.307 +	    <package name="zip" version="1.3-4" arch="i386"/>
   3.308 +	</set>
   3.309 +	<set name="repo">
   3.310 +	    <package name="zsh" version="1-1" arch="i386">
   3.311 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.312 +	    </package>
   3.313 +	</set>
   3.314 +	<transaction>
   3.315 +	    <install name="zsh"/>
   3.316 +	</transaction>
   3.317 +	<result>
   3.318 +	    <set>
   3.319 +		<package name="zip" version="1.3-4" arch="i386"/>
   3.320 +		<package name="zsh" version="1-1" arch="i386"/>
   3.321 +	    </set>
   3.322 +	</result>
   3.323 +    </test>
   3.324 +
   3.325 +    <test name="testInstallSinglePackageRequireVer4_4Installed">
   3.326 +	<set name="system">
   3.327 +	    <package name="zip" version="1:1.3-4" arch="i386"/>
   3.328 +	</set>
   3.329 +	<set name="repo">
   3.330 +	    <package name="zsh" version="1-1" arch="i386">
   3.331 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.332 +	    </package>
   3.333 +	</set>
   3.334 +	<transaction>
   3.335 +	    <install name="zsh"/>
   3.336 +	</transaction>
   3.337 +	<result>
   3.338 +	    <set>
   3.339 +		<package name="zip" version="1:1.3-4" arch="i386"/>
   3.340 +		<package name="zsh" version="1-1" arch="i386"/>
   3.341 +	    </set>
   3.342 +	</result>
   3.343 +    </test>
   3.344 +
   3.345 +    <test name="testInstallSinglePackageRequireVer4_5Installed">
   3.346 +	<set name="system">
   3.347 +	    <package name="zip" version="2:0.3-4" arch="i386"/>
   3.348 +	</set>
   3.349 +	<set name="repo">
   3.350 +	    <package name="zsh" version="1-1" arch="i386">
   3.351 +		<requires name="zip" relation="LT" version="2:1.3-4"/>
   3.352 +	    </package>
   3.353 +	</set>
   3.354 +	<transaction>
   3.355 +	    <install name="zsh"/>
   3.356 +	</transaction>
   3.357 +	<result>
   3.358 +	    <set>
   3.359 +		<package name="zip" version="2:0.3-4" arch="i386"/>
   3.360 +		<package name="zsh" version="1-1" arch="i386"/>
   3.361 +	    </set>
   3.362 +	</result>
   3.363 +    </test>
   3.364 +
   3.365 +    <test name="testInstallSinglePackageRequireXtraBadVer">
   3.366 +	<set name="system">
   3.367 +	    <package name="zip" version="2:1.3-4" arch="i386"/>
   3.368 +	</set>
   3.369 +	<set name="repo">
   3.370 +	    <package name="zsh" version="1-1" arch="i386">
   3.371 +		<requires name="zip" relation="EQ" version="2:1.3-4"/>
   3.372 +		<requires name="zap" relation="EQ" version="2:1.3-4"/>
   3.373 +	    </package>
   3.374 +	    <package name="zap" version="0:1.3-4" arch="i386"/>
   3.375 +	</set>
   3.376 +	<transaction>
   3.377 +	    <install name="zsh"/>
   3.378 +	</transaction>
   3.379 +	<result>
   3.380 +	    <unsatisfiable>
   3.381 +		<requires name="zap" relation="EQ" version="2:1.3-4"/>
   3.382 +	    </unsatisfiable>
   3.383 +	</result>
   3.384 +    </test>
   3.385 +
   3.386 +    <test name="testInstallSinglePackageRequireXtra">
   3.387 +	<set name="system">
   3.388 +	    <package name="zip" version="2:1.3-4" arch="i386"/>
   3.389 +	</set>
   3.390 +	<set name="repo">
   3.391 +	    <package name="zsh" version="1-1" arch="i386">
   3.392 +		<requires name="zip" relation="EQ" version="2:1.3-4"/>
   3.393 +		<requires name="zap" relation="EQ" version="4:2.6-8"/>
   3.394 +	    </package>
   3.395 +	    <package name="zap" version="4:2.6-8" arch="i386"/>
   3.396 +	</set>
   3.397 +	<transaction>
   3.398 +	    <install name="zsh"/>
   3.399 +	</transaction>
   3.400 +	<result>
   3.401 +	    <set>
   3.402 +		<package name="zap" version="4:2.6-8" arch="i386"/>
   3.403 +		<package name="zip" version="2:1.3-4" arch="i386"/>
   3.404 +		<package name="zsh" version="1-1" arch="i386"/>
   3.405 +	    </set>
   3.406 +	</result>
   3.407 +    </test>
   3.408 +
   3.409 +    <test name="testInstallSinglePackageRequireInstalledRequireXtra">
   3.410 +	<set name="system">
   3.411 +	    <package name="zip" version="2:1.3-4" arch="i386">
   3.412 +		<requires name="zap" relation="EQ" version="4:2.6-8"/>
   3.413 +	    </package>
   3.414 +	</set>
   3.415 +	<set name="repo">
   3.416 +	    <package name="zsh" version="1-1" arch="i386">
   3.417 +		<requires name="zip" relation="EQ" version="2:1.3-4"/>
   3.418 +	    </package>
   3.419 +	    <package name="zap" version="4:2.6-8" arch="i386"/>
   3.420 +	</set>
   3.421 +	<transaction>
   3.422 +	    <install name="zsh"/>
   3.423 +	</transaction>
   3.424 +	<result>
   3.425 +	    <set>
   3.426 +		<package name="zip" version="2:1.3-4" arch="i386"/>
   3.427 +		<package name="zsh" version="1-1" arch="i386"/>
   3.428 +	    </set>
   3.429 +	</result>
   3.430 +    </test>
   3.431 +
   3.432 +    <test name="testInstallSinglePackageRequireUpgradeRequireXtraErr">
   3.433 +	<set name="system">
   3.434 +	    <package name="zip" version="2:1.3-4" arch="i386">
   3.435 +		<requires name="zap" relation="EQ" version="2:1.3-3"/>
   3.436 +	    </package>
   3.437 +	</set>
   3.438 +	<set name="repo">
   3.439 +	    <package name="zsh" version="1-1" arch="i386">
   3.440 +		<requires name="zip" relation="EQ" version="4:2.6-8"/>
   3.441 +	    </package>
   3.442 +	    <package name="zip" version="4:2.6-8" arch="i386">
   3.443 +		<requires name="zap" relation="EQ" version="2:1.3-4"/>
   3.444 +	    </package>
   3.445 +	    <package name="zap" version="2:1.3-4" arch="i386">
   3.446 +		<requires name="zsh" relation="EQ" version="2:4-8"/>
   3.447 +	    </package>
   3.448 +	</set>
   3.449 +	<transaction>
   3.450 +	    <install name="zsh"/>
   3.451 +	</transaction>
   3.452 +	<result>
   3.453 +	    <unsatisfiable>
   3.454 +		<requires name="zsh" relation="EQ" version="2:4-8"/>
   3.455 +	    </unsatisfiable>
   3.456 +	</result>
   3.457 +    </test>
   3.458 +
   3.459 +    <test name="testInstallSinglePackageRequireUpgradeRequireXtraOk">
   3.460 +	<set name="system">
   3.461 +	    <package name="zip" version="2:1.3-4" arch="i386">
   3.462 +		<requires name="zap" relation="EQ" version="2:1.3-3"/>
   3.463 +	    </package>
   3.464 +	</set>
   3.465 +	<set name="repo">
   3.466 +	    <package name="zsh" version="1-1" arch="i386">
   3.467 +		<requires name="zip" relation="EQ" version="4:2.6-8"/>
   3.468 +	    </package>
   3.469 +	    <package name="zip" version="4:2.6-8" arch="i386">
   3.470 +		<requires name="zap" relation="EQ" version="2:1.3-4"/>
   3.471 +	    </package>
   3.472 +	    <package name="zap" version="2:1.3-4" arch="i386"/>
   3.473 +	</set>
   3.474 +	<transaction>
   3.475 +	    <install name="zsh"/>
   3.476 +	</transaction>
   3.477 +	<result>
   3.478 +	    <set>
   3.479 +		<package name="zap" version="2:1.3-4" arch="i386"/>
   3.480 +		<package name="zip" version="4:2.6-8" arch="i386"/>
   3.481 +		<package name="zsh" version="1-1" arch="i386"/>
   3.482 +	    </set>
   3.483 +	</result>
   3.484 +    </test>
   3.485 +
   3.486 +    <test name="testInstallSinglePackageRequireMultiXtra">
   3.487 +	<set name="system"/>
   3.488 +	<set name="repo">
   3.489 +	    <package name="zsh" version="1-1" arch="i386">
   3.490 +		<requires name="zip" relation="EQ" version="4:2.6-8"/>
   3.491 +	    </package>
   3.492 +	    <package name="zip" version="4:2.6-8" arch="i386">
   3.493 +		<requires name="zap" relation="EQ" version="2:1.3-4"/>
   3.494 +	    </package>
   3.495 +	    <package name="zap" version="2:1.3-4" arch="i386"/>
   3.496 +	</set>
   3.497 +	<transaction>
   3.498 +	    <install name="zsh"/>
   3.499 +	</transaction>
   3.500 +	<result>
   3.501 +	    <set>
   3.502 +		<package name="zap" version="2:1.3-4" arch="i386"/>
   3.503 +		<package name="zip" version="4:2.6-8" arch="i386"/>
   3.504 +		<package name="zsh" version="1-1" arch="i386"/>
   3.505 +	    </set>
   3.506 +	</result>
   3.507 +    </test>
   3.508 +
   3.509 +    <test name="testInstallSinglePackageRequireInstalledMultiLib">
   3.510 +	<set name="system">
   3.511 +	    <package name="zip" version="1-3" arch="i386"/>
   3.512 +	</set>
   3.513 +	<set name="repo">
   3.514 +	    <package name="zsh" version="1-1" arch="x86_64">
   3.515 +		<requires name="zip"/>
   3.516 +	    </package>
   3.517 +	    <package name="zip" version="1-3" arch="x86_64"/>
   3.518 +	</set>
   3.519 +	<transaction>
   3.520 +	    <install name="zsh"/>
   3.521 +	</transaction>
   3.522 +	<result>
   3.523 +	    <set>
   3.524 +		<package name="zip" version="1-3" arch="i386"/>
   3.525 +		<package name="zsh" version="1-1" arch="x86_64"/>
   3.526 +	    </set>
   3.527 +	</result>
   3.528 +    </test>
   3.529 +
   3.530 +    <test name="testInstallSinglePackageRequireXtra1MultiLib">
   3.531 +	<set name="system"/>
   3.532 +	<set name="repo">
   3.533 +	    <package name="zsh" version="1-1" arch="x86_64">
   3.534 +		<requires name="zip"/>
   3.535 +	    </package>
   3.536 +	    <package name="zip" version="1-3" arch="i386"/>
   3.537 +	</set>
   3.538 +	<transaction>
   3.539 +	    <install name="zsh"/>
   3.540 +	</transaction>
   3.541 +	<result>
   3.542 +	    <set>
   3.543 +		<package name="zip" version="1-3" arch="i386"/>
   3.544 +		<package name="zsh" version="1-1" arch="x86_64"/>
   3.545 +	    </set>
   3.546 +	</result>
   3.547 +    </test>
   3.548 +
   3.549 +    <test name="testInstallSinglePackageRequireXtra2_64MultiLib">
   3.550 +	<set name="system"/>
   3.551 +	<set name="repo">
   3.552 +	    <package name="zsh" version="1-1" arch="x86_64">
   3.553 +		<requires name="zip"/>
   3.554 +	    </package>
   3.555 +	    <package name="zip" version="1-3" arch="i386"/>
   3.556 +	    <package name="zip" version="1-3" arch="x86_64"/>
   3.557 +	</set>
   3.558 +	<transaction>
   3.559 +	    <install name="zsh"/>
   3.560 +	</transaction>
   3.561 +	<result>
   3.562 +	    <set>
   3.563 +		<package name="zsh" version="1-1" arch="x86_64"/>
   3.564 +		<package name="zip" version="1-3" arch="x86_64"/>
   3.565 +	    </set>
   3.566 +	</result>
   3.567 +    </test>
   3.568 +
   3.569 +    <test name="testInstallSinglePackageRequireXtra2_32MultiLib">
   3.570 +	<set name="system"/>
   3.571 +	<set name="repo">
   3.572 +	    <package name="zsh" version="1-1" arch="i386">
   3.573 +		<requires name="zip"/>
   3.574 +	    </package>
   3.575 +	    <package name="zip" version="1-3" arch="i386"/>
   3.576 +	    <package name="zip" version="1-3" arch="x86_64"/>
   3.577 +	</set>
   3.578 +	<transaction>
   3.579 +	    <install name="zsh"/>
   3.580 +	</transaction>
   3.581 +	<result>
   3.582 +	    <set>
   3.583 +		<package name="zip" version="1-3" arch="i386"/>
   3.584 +		<package name="zsh" version="1-1" arch="i386"/>
   3.585 +	    </set>
   3.586 +	</result>
   3.587 +    </test>
   3.588 +
   3.589 +    <test name="testUpdateSinglePackage">
   3.590 +	<set name="system">
   3.591 +	    <package name="zsh" version="1-1" arch="i386"/>
   3.592 +	</set>
   3.593 +	<set name="repo">
   3.594 +	    <package name="zsh" version="1-3" arch="i386"/>
   3.595 +	</set>
   3.596 +	<transaction>
   3.597 +	    <update name="zsh"/>
   3.598 +	</transaction>
   3.599 +	<result>
   3.600 +	    <set>
   3.601 +		<package name="zsh" version="1-3" arch="i386"/>
   3.602 +	    </set>
   3.603 +	</result>
   3.604 +    </test>
   3.605 +
   3.606 +    <test name="testUpdateForDependency">
   3.607 +	<set name="system">
   3.608 +	    <package name="zip" version="0:1-1" arch="i386"/>
   3.609 +	</set>
   3.610 +	<set name="repo">
   3.611 +	    <package name="zsh" version="0:1-1" arch="i386">
   3.612 +		<requires name="zip" relation="EQ" version="0:2-1"/>
   3.613 +	    </package>
   3.614 +	    <package name="zip" version="0:2-1" arch="i386"/>
   3.615 +	</set>
   3.616 +	<transaction>
   3.617 +	    <install name="zsh"/>
   3.618 +	</transaction>
   3.619 +	<result>
   3.620 +	    <set>
   3.621 +		<package name="zip" version="0:2-1" arch="i386"/>
   3.622 +		<package name="zsh" version="0:1-1" arch="i386"/>
   3.623 +	    </set>
   3.624 +	</result>
   3.625 +    </test>
   3.626 +
   3.627 +    <test name="testUpdateSplitPackage">
   3.628 +	<set name="system">
   3.629 +	    <package name="zip" version="0:1-1" arch="i386">
   3.630 +		<provides name="libzip" relation="EQ" version="0:1-1"/>
   3.631 +	    </package>
   3.632 +	</set>
   3.633 +	<set name="repo">
   3.634 +	    <package name="zsh" version="0:1-1" arch="i386">
   3.635 +		<requires name="libzip" relation="EQ" version="0:2-1"/>
   3.636 +	    </package>
   3.637 +	    <package name="zip" version="0:2-1" arch="i386">
   3.638 +		<requires name="zip-libs" relation="EQ" version="0:2-1"/>
   3.639 +	    </package>
   3.640 +	    <package name="zip-libs" version="0:2-1" arch="i386">
   3.641 +		<provides name="libzip" relation="EQ" version="0:2-1"/>
   3.642 +	    </package>
   3.643 +	</set>
   3.644 +	<transaction>
   3.645 +	    <install name="zsh"/>
   3.646 +	</transaction>
   3.647 +	<result>
   3.648 +	    <set>
   3.649 +		<package name="zip" version="0:1-1" arch="i386"/>
   3.650 +		<package name="zip-libs" version="0:2-1" arch="i386"/>
   3.651 +		<package name="zsh" version="0:1-1" arch="i386"/>
   3.652 +	    </set>
   3.653 +	</result>
   3.654 +    </test>
   3.655 +
   3.656 +    <test name="testUpdateSinglePackageNewRequires">
   3.657 +	<set name="system">
   3.658 +	    <package name="zsh" version="1-1" arch="i386"/>
   3.659 +	</set>
   3.660 +	<set name="repo">
   3.661 +	    <package name="zsh" version="1-3" arch="i386">
   3.662 +		<requires name="zip"/>
   3.663 +	    </package>
   3.664 +	    <package name="zip" version="1-3" arch="x86_64"/>
   3.665 +	</set>
   3.666 +	<transaction>
   3.667 +	    <update name="zsh"/>
   3.668 +	</transaction>
   3.669 +	<result>
   3.670 +	    <set>
   3.671 +		<package name="zsh" version="1-3" arch="i386"/>
   3.672 +		<package name="zip" version="1-3" arch="x86_64"/>
   3.673 +	    </set>
   3.674 +	</result>
   3.675 +    </test>
   3.676 +
   3.677 +    <test name="testUpdateSinglePackageOldRequires">
   3.678 +	<set name="system">
   3.679 +	    <package name="zsh" version="1-1" arch="i386">
   3.680 +		<requires name="zip"/>
   3.681 +	    </package>
   3.682 +	    <package name="zip" version="1-3" arch="x86_64"/>
   3.683 +	</set>
   3.684 +	<set name="repo">
   3.685 +	    <package name="zsh" version="1-3" arch="i386">
   3.686 +		<requires name="zip"/>
   3.687 +	    </package>
   3.688 +	</set>
   3.689 +	<transaction>
   3.690 +	    <update name="zsh"/>
   3.691 +	</transaction>
   3.692 +	<result>
   3.693 +	    <set>
   3.694 +		<package name="zip" version="1-3" arch="x86_64"/>
   3.695 +		<package name="zsh" version="1-3" arch="i386"/>
   3.696 +	    </set>
   3.697 +	</result>
   3.698 +    </test>
   3.699 +
   3.700 +    <test name="testUpdateSinglePackageOldRequiresGone">
   3.701 +	<set name="system">
   3.702 +	    <package name="zsh" version="1-1" arch="i386">
   3.703 +		<requires name="zip"/>
   3.704 +	    </package>
   3.705 +	    <package name="zip" version="1-3" arch="x86_64"/>
   3.706 +	</set>
   3.707 +	<set name="repo">
   3.708 +	    <package name="zsh" version="1-3" arch="i386"/>
   3.709 +	</set>
   3.710 +	<transaction>
   3.711 +	    <update name="zsh"/>
   3.712 +	</transaction>
   3.713 +	<result>
   3.714 +	    <set>
   3.715 +		<package name="zip" version="1-3" arch="x86_64"/>
   3.716 +		<package name="zsh" version="1-3" arch="i386"/>
   3.717 +	    </set>
   3.718 +	</result>
   3.719 +    </test>
   3.720 +
   3.721 +    <test name="testUpdateSinglePackageObsoletesOldRequirement">
   3.722 +	<set name="system">
   3.723 +	    <package name="zsh" version="1-1" arch="i386">
   3.724 +		<requires name="zip"/>
   3.725 +	    </package>
   3.726 +	    <package name="zip" version="1-1" arch="i386"/>
   3.727 +	</set>
   3.728 +	<set name="repo">
   3.729 +	    <package name="zsh" version="1-3" arch="i386">
   3.730 +		<!-- depsolvetests.py actually adds the obsoletes
   3.731 +		     to the installed zsh rather than the new zsh,
   3.732 +		     but I'm assuming that's a bug -->
   3.733 +		<obsoletes name="zip"/>
   3.734 +	    </package>
   3.735 +	</set>
   3.736 +	<transaction>
   3.737 +	    <update name="zsh"/>
   3.738 +	</transaction>
   3.739 +	<result>
   3.740 +	    <set>
   3.741 +		<package name="zsh" version="1-3" arch="i386"/>
   3.742 +	    </set>
   3.743 +	</result>
   3.744 +    </test>
   3.745 +
   3.746 +    <test name="testUpdateForConflict">
   3.747 +	<set name="system">
   3.748 +	    <package name="zip" version="0:1-1" arch="i386"/>
   3.749 +	</set>
   3.750 +	<set name="repo">
   3.751 +	    <package name="zsh" version="0:1-1" arch="i386">
   3.752 +		<conflicts name="zip" relation="LE" version="0:1-1"/>
   3.753 +	    </package>
   3.754 +	    <package name="zip" version="0:2-1" arch="i386"/>
   3.755 +	</set>
   3.756 +	<transaction>
   3.757 +	    <install name="zsh"/>
   3.758 +	</transaction>
   3.759 +	<result>
   3.760 +	    <set>
   3.761 +		<package name="zip" version="0:2-1" arch="i386"/>
   3.762 +		<package name="zsh" version="0:1-1" arch="i386"/>
   3.763 +	    </set>
   3.764 +	</result>
   3.765 +    </test>
   3.766 +
   3.767 +    <test name="testUpdateForConflict2">
   3.768 +	<set name="system">
   3.769 +	    <package name="zip" version="0:1-1" arch="i386">
   3.770 +		<conflicts name="zsh" relation="LE" version="0:1-1"/>
   3.771 +	    </package>
   3.772 +	</set>
   3.773 +	<set name="repo">
   3.774 +	    <package name="zsh" version="0:1-1" arch="i386"/>
   3.775 +	    <package name="zip" version="0:2-1" arch="i386"/>
   3.776 +	</set>
   3.777 +	<transaction>
   3.778 +	    <install name="zsh"/>
   3.779 +	</transaction>
   3.780 +	<result>
   3.781 +	    <set>
   3.782 +		<package name="zsh" version="0:1-1" arch="i386"/>
   3.783 +		<package name="zip" version="0:2-1" arch="i386"/>
   3.784 +	    </set>
   3.785 +	</result>
   3.786 +    </test>
   3.787 +
   3.788 +    <test name="testUpdateForConflictProvide">
   3.789 +	<set name="system">
   3.790 +	    <package name="zip" version="0:1-1" arch="i386">
   3.791 +		<provides name="zippy" relation="EQ" version="0:1-1"/>
   3.792 +	    </package>
   3.793 +	</set>
   3.794 +	<set name="repo">
   3.795 +	    <package name="zsh" version="0:1-1" arch="i386">
   3.796 +		<conflicts name="zippy" relation="LE" version="0:1-1"/>
   3.797 +	    </package>
   3.798 +	    <package name="zip" version="0:2-1" arch="i386"/>
   3.799 +	</set>
   3.800 +	<transaction>
   3.801 +	    <install name="zsh"/>
   3.802 +	</transaction>
   3.803 +	<result>
   3.804 +	    <set>
   3.805 +		<package name="zip" version="0:2-1" arch="i386"/>
   3.806 +		<package name="zsh" version="0:1-1" arch="i386"/>
   3.807 +	    </set>
   3.808 +	</result>
   3.809 +    </test>
   3.810 +
   3.811 +    <test name="testUpdateForConflictProvide2">
   3.812 +	<set name="system">
   3.813 +	    <package name="zip" version="0:1-1" arch="i386">
   3.814 +		<conflicts name="zippy" relation="GT" version="0:1-1"/>
   3.815 +		<conflicts name="zippy" relation="LT" version="0:1-1"/>
   3.816 +	    </package>
   3.817 +	</set>
   3.818 +	<set name="repo">
   3.819 +	    <package name="zsh" version="0:1-1" arch="i386">
   3.820 +		<provides name="zippy" relation="EQ" version="0:2-1"/>
   3.821 +	    </package>
   3.822 +	    <package name="zip" version="0:2-1" arch="i386">
   3.823 +		<conflicts name="zippy" relation="GT" version="0:2-1"/>
   3.824 +		<conflicts name="zippy" relation="LT" version="0:2-1"/>
   3.825 +	    </package>
   3.826 +	</set>
   3.827 +	<transaction>
   3.828 +	    <install name="zsh"/>
   3.829 +	</transaction>
   3.830 +	<result>
   3.831 +	    <set>
   3.832 +		<package name="zip" version="0:2-1" arch="i386"/>
   3.833 +		<package name="zsh" version="0:1-1" arch="i386"/>
   3.834 +	    </set>
   3.835 +	</result>
   3.836 +    </test>
   3.837 +
   3.838 +    <test name="testEraseSinglePackage">
   3.839 +	<set name="system">
   3.840 +	    <package name="zsh" version="0:1-1" arch="i386"/>
   3.841 +	</set>
   3.842 +	<set name="repo"/>
   3.843 +	<transaction>
   3.844 +	    <remove name="zsh"/>
   3.845 +	</transaction>
   3.846 +	<result>
   3.847 +	    <set/>
   3.848 +	</result>
   3.849 +    </test>
   3.850 +
   3.851 +    <test name="testEraseSinglePackageRequiredByOneInstalled">
   3.852 +	<set name="system">
   3.853 +	    <package name="zippy" version="0:1-1" arch="i386">
   3.854 +		<requires name="zsh"/>
   3.855 +	    </package>
   3.856 +	    <package name="zsh" version="0:1-1" arch="i386"/>
   3.857 +	</set>
   3.858 +	<set name="repo"/>
   3.859 +	<transaction>
   3.860 +	    <remove name="zsh"/>
   3.861 +	</transaction>
   3.862 +	<result>
   3.863 +	    <set/>
   3.864 +	</result>
   3.865 +    </test>
   3.866 +</tests>