close(fd);
}
-struct test_set {
- char *name;
- struct razor_set *set;
- struct test_set *next;
-};
-
struct test_context {
+ struct razor_set *system_set, *repo_set, *result_set;
+
struct razor_importer *importer;
- struct test_set *sets;
- struct razor_package_iterator *package_iterator;
- struct razor_property_iterator *property_iterator;
+ struct razor_set **importer_set;
+
+ char *install_pkgs[3], *remove_pkgs[3];
+ int n_install_pkgs, n_remove_pkgs;
+
+ int in_result, result_errors;
};
static void
va_end(ap);
}
-static void
-parse_property(struct test_context *ctx, const char **atts,
- enum razor_property_type type)
+static enum razor_version_relation
+parse_relation (const char *rel_str)
{
- const char *name = NULL, *version = NULL;
+ if (!rel_str)
+ return -1;
+ if (rel_str[0] == 'l')
+ return rel_str[1] == 'e' ? RAZOR_VERSION_LESS_OR_EQUAL : RAZOR_VERSION_LESS;
+ else if (rel_str[0] == 'g')
+ return rel_str[1] == 'e' ? RAZOR_VERSION_GREATER_OR_EQUAL : RAZOR_VERSION_GREATER;
+ else if (rel_str[0] == 'e' || rel_str[1] == 'q')
+ return RAZOR_VERSION_EQUAL;
+ else
+ return -1;
+}
- get_atts(atts, "name", &name, "eq", &version, NULL);
+static void
+start_test(struct test_context *ctx, const char **atts)
+{
+ const char *name = NULL;
- if (name == NULL) {
- fprintf(stderr, "no name specified for property\n");
- exit(-1);
+ get_atts(atts, "name", &name, NULL);
+ if (!name) {
+ fprintf(stderr, "Test with no name\n");
+ exit(1);
}
-
- razor_importer_add_property(ctx->importer, name,
- RAZOR_VERSION_EQUAL, version, type);
+ printf("%s\n", name);
}
static void
-start_set_element(void *data, const char *element, const char **atts)
+end_test(struct test_context *ctx)
{
- struct test_context *ctx = data;
- struct test_set *set;
- const char *name, *version;
-
- if (strcmp(element, "set") == 0) {
- get_atts(atts, "name", &name, NULL);
- ctx->importer = razor_importer_new();
- set = malloc(sizeof *set);
- set->name = strdup(name);
- set->next = ctx->sets;
- ctx->sets = set;
- } else if (strcmp(element, "package") == 0) {
- get_atts(atts, "name", &name, "version", &version, NULL);
- razor_importer_begin_package(ctx->importer, name, version);
- } else if (strcmp(element, "requires") == 0) {
- parse_property(ctx, atts, RAZOR_PROPERTY_REQUIRES);
- } else if (strcmp(element, "provides") == 0) {
- parse_property(ctx, atts, RAZOR_PROPERTY_PROVIDES);
- } else if (strcmp(element, "obsoletes") == 0) {
- parse_property(ctx, atts, RAZOR_PROPERTY_OBSOLETES);
- } else if (strcmp(element, "conflicts") == 0) {
- parse_property(ctx, atts, RAZOR_PROPERTY_CONFLICTS);
- } else if (strcmp(element, "file") == 0) {
- get_atts(atts, "name", &name, NULL);
- razor_importer_add_file(ctx->importer, name);
- } else if (strcmp(element, "dir") == 0) {
- get_atts(atts, "name", &name, NULL);
- razor_importer_add_file(ctx->importer, name);
+ if (ctx->system_set) {
+ razor_set_destroy(ctx->system_set);
+ ctx->system_set = NULL;
+ }
+ if (ctx->repo_set) {
+ razor_set_destroy(ctx->repo_set);
+ ctx->repo_set = NULL;
+ }
+ if (ctx->result_set) {
+ razor_set_destroy(ctx->result_set);
+ ctx->result_set = NULL;
}
}
static void
-end_set_element (void *data, const char *name)
+start_set(struct test_context *ctx, const char **atts)
{
- struct test_context *ctx = data;
-
- if (strcmp(name, "set") == 0) {
- ctx->sets->set = razor_importer_finish(ctx->importer);
- } else if (strcmp(name, "package") == 0) {
- razor_importer_finish_package(ctx->importer);
+ const char *name = NULL;
+
+ ctx->importer = razor_importer_new();
+ get_atts(atts, "name", &name, NULL);
+ if (!name)
+ ctx->importer_set = &ctx->result_set;
+ else if (!strcmp(name, "system"))
+ ctx->importer_set = &ctx->system_set;
+ else if (!strcmp(name, "repo"))
+ ctx->importer_set = &ctx->repo_set;
+ else {
+ fprintf(stderr, " bad set name '%s'\n", name);
+ exit(1);
}
}
-static struct razor_set *
-lookup_set(struct test_context *ctx, const char *name)
+static void
+end_set(struct test_context *ctx)
{
- struct test_set *set;
+ *ctx->importer_set = razor_importer_finish(ctx->importer);
+ ctx->importer = NULL;
+}
- for (set = ctx->sets; set != NULL; set = set->next) {
- if (strcmp(set->name, name) == 0)
- return set->set;
+static void
+start_package(struct test_context *ctx, const char **atts)
+{
+ const char *name = NULL, *version = NULL, *arch = NULL;
+
+ get_atts(atts, "name", &name, "version", &version, "arch", &arch, NULL);
+ if (!name) {
+ fprintf(stderr, " package with no name\n");
+ exit(1);
}
- return NULL;
+ razor_importer_begin_package(ctx->importer, name, version);
+ razor_importer_add_property(ctx->importer, name,
+ RAZOR_VERSION_EQUAL, version,
+ RAZOR_PROPERTY_PROVIDES);
}
static void
-verify_begin(struct test_context *ctx, const char **atts)
+end_package(struct test_context *ctx)
{
- struct razor_set *set;
- const char *type, *name;
+ razor_importer_finish_package(ctx->importer);
+}
- get_atts(atts, "type", &type, "set", &name, NULL);
- set = lookup_set(ctx, name);
- if (set == NULL) {
- fprintf(stderr, "set %s not found\n", name);
- exit(-1);
- }
+static void
+start_property(struct test_context *ctx, enum razor_property_type type, const char **atts)
+{
+ const char *name = NULL, *rel_str = NULL, *version = NULL;
+ enum razor_version_relation rel;
- if (strcmp(type, "packages") == 0) {
- ctx->package_iterator =
- razor_package_iterator_create(set);
- } else if (strcmp(type, "properties") == 0) {
- ctx->property_iterator =
- razor_property_iterator_create(set, NULL);
- } else {
- fprintf(stderr,
- "unknown compare type \"%s\"\n", type);
- exit(-1);
+ get_atts(atts, "name", &name, "rel", &rel_str, "version", &version, NULL);
+ if (name == NULL) {
+ fprintf(stderr, " no name specified for property\n");
+ exit(1);
}
+ if (version) {
+ rel = parse_relation(rel_str);
+ if (rel == -1) {
+ fprintf(stderr, " bad or missing version relation for property %s\n", name);
+ exit(1);
+ }
+ } else
+ rel = RAZOR_VERSION_EQUAL;
+
+ razor_importer_add_property(ctx->importer, name,
+ rel, version, type);
}
static void
-verify_end(struct test_context *ctx)
+start_transaction(struct test_context *ctx, const char **atts)
{
- struct razor_package *package;
- struct razor_property *property;
- const char *name, *version;
- enum razor_property_type type;
- enum razor_version_relation relation;
-
- if (ctx->package_iterator != NULL) {
- if (razor_package_iterator_next(ctx->package_iterator,
- &package,
- &name, &version)) {
- fprintf(stderr, "too few packages in set\n");
- exit(-1);
- }
-
- razor_package_iterator_destroy(ctx->package_iterator);
- ctx->package_iterator = NULL;
- }
+ ctx->n_install_pkgs = 0;
+ ctx->n_remove_pkgs = 0;
+}
- if (ctx->property_iterator != NULL) {
- if (razor_property_iterator_next(ctx->property_iterator,
- &property,
- &name, &relation, &version,
- &type)) {
- fprintf(stderr, "too few properties in set\n");
- exit(-1);
- }
+static void
+end_transaction(struct test_context *ctx)
+{
+ /* FIXME: removes */
+ ctx->system_set = razor_set_update(ctx->system_set,
+ ctx->repo_set,
+ ctx->n_install_pkgs,
+ (const char **)ctx->install_pkgs);
+
+ while (ctx->n_install_pkgs--)
+ free(ctx->install_pkgs[ctx->n_install_pkgs]);
+ while (ctx->n_remove_pkgs--)
+ free(ctx->remove_pkgs[ctx->n_remove_pkgs]);
+}
- razor_property_iterator_destroy(ctx->property_iterator);
- ctx->property_iterator = NULL;
+static void
+start_install_or_update(struct test_context *ctx, const char **atts)
+{
+ const char *name = NULL;
+
+ get_atts(atts, "name", &name, NULL);
+ if (!name) {
+ fprintf(stderr, " install/update with no name\n");
+ exit(1);
}
+
+ ctx->install_pkgs[ctx->n_install_pkgs++] = strdup(name);
}
static void
-verify_package(struct test_context *ctx, const char **atts)
+start_remove(struct test_context *ctx, const char **atts)
{
- struct razor_package *package;
- const char *name, *version, *ref_name, *ref_version;
+ const char *name = NULL;
- if (ctx->package_iterator == NULL) {
- fprintf(stderr,
- "\"package\" element seen, "
- "but not in package verify mode\n");
- exit(-1);
+ get_atts(atts, "name", &name, NULL);
+ if (!name) {
+ fprintf(stderr, " remove with no name\n");
+ exit(1);
}
- get_atts(atts, "name", &ref_name, "version", &ref_version, NULL);
- if (!razor_package_iterator_next(ctx->package_iterator,
- &package, &name, &version)) {
- fprintf(stderr, "too many packages in set\n");
- exit(-1);
- }
-
- if (strcmp(name, ref_name) != 0 || strcmp(version, ref_version) != 0) {
- fprintf(stderr,
- "package mismatch; expected %s-%s, got %s-%s\n",
- ref_name, ref_version, name, version);
- exit(-1);
- }
+ ctx->remove_pkgs[ctx->n_remove_pkgs++] = strdup(name);
}
static void
-verify_property(struct test_context *ctx,
- enum razor_property_type ref_type, const char **atts)
+start_result(struct test_context *ctx, const char **atts)
{
- struct razor_property *property;
- const char *name, *version, *ref_name, *ref_version;
- enum razor_property_type type;
- enum razor_version_relation relation;
- int same_version;
-
- if (ctx->property_iterator == NULL) {
- fprintf(stderr,
- "\"requires/provides\" element seen, "
- "but not in property verify mode\n");
- exit(-1);
+ ctx->in_result = 1;
+}
+
+static void
+diff_callback(const char *name,
+ const char *old_version, const char *new_version,
+ void *data)
+{
+ struct test_context *ctx = data;
+
+ ctx->result_errors++;
+ if (old_version) {
+ fprintf(stderr, " result set should not contain %s %s\n",
+ name, old_version);
+ } else {
+ fprintf(stderr, " result set should contain %s %s\n",
+ name, new_version);
}
+}
- get_atts(atts, "name", &ref_name, "eq", &ref_version, NULL);
- if (!razor_property_iterator_next(ctx->property_iterator, &property,
- &name, &relation, &version, &type)) {
- fprintf(stderr, "too many properties in set\n");
- exit(-1);
+static void
+end_result(struct test_context *ctx)
+{
+ ctx->in_result = 0;
+
+ /* FIXME */
+ if (ctx->n_remove_pkgs) {
+ printf (" (ignoring because of unimplemented remove)\n");
+ return;
}
-
- if (version != NULL && ref_version != NULL)
- same_version = strcmp(version, ref_version) == 0;
- else if (version == NULL && ref_version == NULL)
- same_version = 1;
- else
- same_version = 0;
- if (strcmp(name, ref_name) != 0 || !same_version || type != ref_type) {
- fprintf(stderr,
- "property mismatch; expected %s-%s/%d, got %s-%s/%d\n",
- ref_name, ref_version, ref_type,
- name, version, type);
- exit(-1);
+ if (ctx->system_set && ctx->result_set) {
+ ctx->result_errors = 0;
+ razor_set_diff(ctx->system_set, ctx->result_set,
+ diff_callback, ctx);
+ if (ctx->result_errors)
+ exit(1);
}
+
+}
+
+static void
+start_unsatisfied(struct test_context *ctx, const char **atts)
+{
+ /* FIXME */
+ fprintf(stderr, "Can't handle <unsatisfied>\n");
+ exit(1);
+}
+
+static void
+end_unsatisfied(struct test_context *ctx)
+{
}
static void
start_test_element(void *data, const char *element, const char **atts)
{
struct test_context *ctx = data;
- const char *name;
-
- if (strcmp(element, "import") == 0) {
- get_atts(atts, "file", &name, NULL);
- parse_xml_file(name, start_set_element, end_set_element, ctx);
- } else if (strcmp(element, "update") == 0) {
- /* run update to create new set */
- } else if (strcmp(element, "verify") == 0) {
- verify_begin(ctx, atts);
+
+ if (strcmp(element, "tests") == 0) {
+ ;
+ } else if (strcmp(element, "test") == 0) {
+ start_test(ctx, atts);
+ } else if (strcmp(element, "set") == 0) {
+ start_set(ctx, atts);
+ } else if (strcmp(element, "transaction") == 0) {
+ start_transaction(ctx, atts);
+ } else if (strcmp(element, "install") == 0) {
+ start_install_or_update(ctx, atts);
+ } else if (strcmp(element, "install") == 0) {
+ start_install_or_update(ctx, atts);
+ } else if (strcmp(element, "remove") == 0) {
+ start_remove(ctx, atts);
+ } else if (strcmp(element, "result") == 0) {
+ start_result(ctx, atts);
+ } else if (strcmp(element, "unsatisfied") == 0) {
+ start_unsatisfied(ctx, atts);
} else if (strcmp(element, "package") == 0) {
- verify_package(ctx, atts);
+ start_package(ctx, atts);
} else if (strcmp(element, "requires") == 0) {
- verify_property(ctx, RAZOR_PROPERTY_REQUIRES, atts);
+ start_property(ctx, RAZOR_PROPERTY_REQUIRES, atts);
} else if (strcmp(element, "provides") == 0) {
- verify_property(ctx, RAZOR_PROPERTY_PROVIDES, atts);
+ start_property(ctx, RAZOR_PROPERTY_PROVIDES, atts);
} else if (strcmp(element, "conflicts") == 0) {
- verify_property(ctx, RAZOR_PROPERTY_CONFLICTS, atts);
+ start_property(ctx, RAZOR_PROPERTY_CONFLICTS, atts);
} else if (strcmp(element, "obsoletes") == 0) {
- verify_property(ctx, RAZOR_PROPERTY_OBSOLETES, atts);
+ start_property(ctx, RAZOR_PROPERTY_OBSOLETES, atts);
+ } else {
+ fprintf(stderr, "Unrecognized element '%s'\n", element);
+ exit(1);
}
}
{
struct test_context *ctx = data;
- if (strcmp(element, "verify") == 0)
- verify_end(ctx);
+ if (strcmp(element, "test") == 0) {
+ end_test(ctx);
+ } else if (strcmp(element, "set") == 0) {
+ end_set(ctx);
+ } else if (strcmp(element, "package") == 0) {
+ end_package(ctx);
+ } else if (strcmp(element, "transaction") == 0) {
+ end_transaction(ctx);
+ } else if (strcmp(element, "result") == 0) {
+ end_result(ctx);
+ } else if (strcmp(element, "unsatisfied") == 0) {
+ end_unsatisfied(ctx);
+ }
}
int main(int argc, char *argv[])
-<test title="gah">
+<tests>
- <import file="sets.xml"/>
+ <test name="testEmpty">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ <remove name="zsh"/>
+ </transaction>
+ <result>
+ <set/>
+ </result>
+ </test>
- <update name="c" from="a" to="b"/>
+ <test name="testInstallSinglePackageNoRequires">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
- <verify set="b" type="packages">
- <package name="bash" version="3.2-18.fc8"/>
- </verify>
+ <test name="testInstallSinglePackageRequireNotProvided">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zip"/>
+ </unsatisfiable>
+ </result>
+ </test>
- <verify set="c" type="properties">
- <provides name="nss" eq="1.8-fc10"/>
- <conflicts name="y" eq="1.1"/>
- </verify>
+ <test name="testInstallSinglePackageRequireInstalled">
+ <set name="system">
+ <package name="zip" version="1-1" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1-1" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
-</test>
+ <test name="testInstallSinglePackageRequireInstalledRequireNotProvided">
+ <set name="system">
+ <package name="zip" version="1-2" arch="i386">
+ <requires name="zap"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zap"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireInstalledRequireInstall">
+ <set name="system">
+ <package name="zip" version="1-3" arch="i386">
+ <requires name="zap"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ <package name="zap" version="1-2" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ <install name="zap"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zap" version="1-2" arch="i386"/>
+ <package name="zip" version="1-3" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer1NotProvided">
+ <set name="system">
+ <package name="zip" version="1.0-2" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="1.3-2"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zip" relation="EQ" version="1.3-2"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer1Installed">
+ <set name="system">
+ <package name="zip" version="1.3-2" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="1.3-2"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1.3-2" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer2NotProvided">
+ <set name="system">
+ <package name="zip" version="1.3-2" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zip" relation="EQ" version="1.3-4"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer2Installed">
+ <set name="system">
+ <package name="zip" version="1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer3NotProvided">
+ <set name="system">
+ <package name="zip" version="0:1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="GE" version="1:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zip" relation="GE" version="1:1.3-4"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer3Installed">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="GE" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer4NotProvided">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer4_1Installed">
+ <set name="system">
+ <package name="zip" version="2:1.0-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="2:1.0-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer4_2Installed">
+ <set name="system">
+ <package name="zip" version="2:1.3-3" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="2:1.3-3" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer4_3Installed">
+ <set name="system">
+ <package name="zip" version="1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer4_4Installed">
+ <set name="system">
+ <package name="zip" version="1:1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1:1.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireVer4_5Installed">
+ <set name="system">
+ <package name="zip" version="2:0.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="LT" version="2:1.3-4"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="2:0.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireXtraBadVer">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="2:1.3-4"/>
+ <requires name="zap" relation="EQ" version="2:1.3-4"/>
+ </package>
+ <package name="zap" version="0:1.3-4" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zap" relation="EQ" version="2:1.3-4"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireXtra">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="2:1.3-4"/>
+ <requires name="zap" relation="EQ" version="4:2.6-8"/>
+ </package>
+ <package name="zap" version="4:2.6-8" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zap" version="4:2.6-8" arch="i386"/>
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireInstalledRequireXtra">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386">
+ <requires name="zap" relation="EQ" version="4:2.6-8"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="2:1.3-4"/>
+ </package>
+ <package name="zap" version="4:2.6-8" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="2:1.3-4" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireUpgradeRequireXtraErr">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386">
+ <requires name="zap" relation="EQ" version="2:1.3-3"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="4:2.6-8"/>
+ </package>
+ <package name="zip" version="4:2.6-8" arch="i386">
+ <requires name="zap" relation="EQ" version="2:1.3-4"/>
+ </package>
+ <package name="zap" version="2:1.3-4" arch="i386">
+ <requires name="zsh" relation="EQ" version="2:4-8"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <unsatisfiable>
+ <requires name="zsh" relation="EQ" version="2:4-8"/>
+ </unsatisfiable>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireUpgradeRequireXtraOk">
+ <set name="system">
+ <package name="zip" version="2:1.3-4" arch="i386">
+ <requires name="zap" relation="EQ" version="2:1.3-3"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="4:2.6-8"/>
+ </package>
+ <package name="zip" version="4:2.6-8" arch="i386">
+ <requires name="zap" relation="EQ" version="2:1.3-4"/>
+ </package>
+ <package name="zap" version="2:1.3-4" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zap" version="2:1.3-4" arch="i386"/>
+ <package name="zip" version="4:2.6-8" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireMultiXtra">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="4:2.6-8"/>
+ </package>
+ <package name="zip" version="4:2.6-8" arch="i386">
+ <requires name="zap" relation="EQ" version="2:1.3-4"/>
+ </package>
+ <package name="zap" version="2:1.3-4" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zap" version="2:1.3-4" arch="i386"/>
+ <package name="zip" version="4:2.6-8" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireInstalledMultiLib">
+ <set name="system">
+ <package name="zip" version="1-3" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="x86_64">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1-3" arch="i386"/>
+ <package name="zsh" version="1-1" arch="x86_64"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireXtra1MultiLib">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="x86_64">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1-3" arch="i386"/>
+ <package name="zsh" version="1-1" arch="x86_64"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireXtra2_64MultiLib">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="x86_64">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="i386"/>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zsh" version="1-1" arch="x86_64"/>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testInstallSinglePackageRequireXtra2_32MultiLib">
+ <set name="system"/>
+ <set name="repo">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="i386"/>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1-3" arch="i386"/>
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateSinglePackage">
+ <set name="system">
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-3" arch="i386"/>
+ </set>
+ <transaction>
+ <update name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zsh" version="1-3" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateForDependency">
+ <set name="system">
+ <package name="zip" version="0:1-1" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="0:1-1" arch="i386">
+ <requires name="zip" relation="EQ" version="0:2-1"/>
+ </package>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateSplitPackage">
+ <set name="system">
+ <package name="zip" version="0:1-1" arch="i386">
+ <provides name="libzip" relation="EQ" version="0:1-1"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="0:1-1" arch="i386">
+ <requires name="libzip" relation="EQ" version="0:2-1"/>
+ </package>
+ <package name="zip" version="0:2-1" arch="i386">
+ <requires name="zip-libs" relation="EQ" version="0:2-1"/>
+ </package>
+ <package name="zip-libs" version="0:2-1" arch="i386">
+ <provides name="libzip" relation="EQ" version="0:2-1"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="0:1-1" arch="i386"/>
+ <package name="zip-libs" version="0:2-1" arch="i386"/>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateSinglePackageNewRequires">
+ <set name="system">
+ <package name="zsh" version="1-1" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-3" arch="i386">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ <transaction>
+ <update name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zsh" version="1-3" arch="i386"/>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateSinglePackageOldRequires">
+ <set name="system">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-3" arch="i386">
+ <requires name="zip"/>
+ </package>
+ </set>
+ <transaction>
+ <update name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ <package name="zsh" version="1-3" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateSinglePackageOldRequiresGone">
+ <set name="system">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-3" arch="i386"/>
+ </set>
+ <transaction>
+ <update name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="1-3" arch="x86_64"/>
+ <package name="zsh" version="1-3" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateSinglePackageObsoletesOldRequirement">
+ <set name="system">
+ <package name="zsh" version="1-1" arch="i386">
+ <requires name="zip"/>
+ </package>
+ <package name="zip" version="1-1" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="1-3" arch="i386">
+ <!-- depsolvetests.py actually adds the obsoletes
+ to the installed zsh rather than the new zsh,
+ but I'm assuming that's a bug -->
+ <obsoletes name="zip"/>
+ </package>
+ </set>
+ <transaction>
+ <update name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zsh" version="1-3" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateForConflict">
+ <set name="system">
+ <package name="zip" version="0:1-1" arch="i386"/>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="0:1-1" arch="i386">
+ <conflicts name="zip" relation="LE" version="0:1-1"/>
+ </package>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateForConflict2">
+ <set name="system">
+ <package name="zip" version="0:1-1" arch="i386">
+ <conflicts name="zsh" relation="LE" version="0:1-1"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateForConflictProvide">
+ <set name="system">
+ <package name="zip" version="0:1-1" arch="i386">
+ <provides name="zippy" relation="EQ" version="0:1-1"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="0:1-1" arch="i386">
+ <conflicts name="zippy" relation="LE" version="0:1-1"/>
+ </package>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testUpdateForConflictProvide2">
+ <set name="system">
+ <package name="zip" version="0:1-1" arch="i386">
+ <conflicts name="zippy" relation="GT" version="0:1-1"/>
+ <conflicts name="zippy" relation="LT" version="0:1-1"/>
+ </package>
+ </set>
+ <set name="repo">
+ <package name="zsh" version="0:1-1" arch="i386">
+ <provides name="zippy" relation="EQ" version="0:2-1"/>
+ </package>
+ <package name="zip" version="0:2-1" arch="i386">
+ <conflicts name="zippy" relation="GT" version="0:2-1"/>
+ <conflicts name="zippy" relation="LT" version="0:2-1"/>
+ </package>
+ </set>
+ <transaction>
+ <install name="zsh"/>
+ </transaction>
+ <result>
+ <set>
+ <package name="zip" version="0:2-1" arch="i386"/>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ </result>
+ </test>
+
+ <test name="testEraseSinglePackage">
+ <set name="system">
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ <set name="repo"/>
+ <transaction>
+ <remove name="zsh"/>
+ </transaction>
+ <result>
+ <set/>
+ </result>
+ </test>
+
+ <test name="testEraseSinglePackageRequiredByOneInstalled">
+ <set name="system">
+ <package name="zippy" version="0:1-1" arch="i386">
+ <requires name="zsh"/>
+ </package>
+ <package name="zsh" version="0:1-1" arch="i386"/>
+ </set>
+ <set name="repo"/>
+ <transaction>
+ <remove name="zsh"/>
+ </transaction>
+ <result>
+ <set/>
+ </result>
+ </test>
+</tests>