END_TEST START_TEST(test_goal_verify) { g_autoptr(GError) error = NULL; DnfSack *sack = test_globals.sack; HyGoal goal = hy_goal_create(sack); fail_unless(hy_goal_run_flags(goal, DNF_VERIFY)); fail_unless(hy_goal_list_installs(goal, &error) == NULL); fail_unless(error->code == DNF_ERROR_NO_SOLUTION); fail_unless(hy_goal_count_problems(goal) == 2); const char *expected; char *problem; problem = hy_goal_describe_problem(goal, 0); expected = "nothing provides missing-dep needed by missing-1-0.x86_64"; fail_if(strncmp(problem, expected, strlen(expected))); g_free(problem); problem = hy_goal_describe_problem(goal, 1); expected = "package conflict-1-0.x86_64 conflicts with ok provided by ok-1-0.x86_64"; fail_if(strncmp(problem, expected, strlen(expected))); g_free(problem); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_verify) { HySack sack = test_globals.sack; HyGoal goal = hy_goal_create(sack); fail_unless(hy_goal_run_flags(goal, HY_VERIFY)); fail_unless(hy_goal_list_installs(goal) == NULL); fail_unless(hy_get_errno() == HY_E_NO_SOLUTION); fail_unless(hy_goal_count_problems(goal) == 2); char *expected; char *problem; problem = hy_goal_describe_problem(goal, 0); expected = "nothing provides missing-dep needed by missing-1-0.x86_64"; fail_if(strncmp(problem, expected, strlen(expected))); hy_free(problem); problem = hy_goal_describe_problem(goal, 1); expected = "package conflict-1-0.x86_64 conflicts with ok provided by ok-1-0.x86_64"; fail_if(strncmp(problem, expected, strlen(expected))); hy_free(problem); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_describe_problem_excludes) { DnfSack *sack = test_globals.sack; HyQuery q = hy_query_create_flags(sack, HY_IGNORE_EXCLUDES); hy_query_filter(q, HY_PKG_NAME, HY_EQ, "semolina"); DnfPackageSet *pset = hy_query_run_set(q); dnf_sack_add_excludes(sack, pset); g_object_unref(pset); hy_query_free(q); HyGoal goal = hy_goal_create(sack); HySelector sltr = hy_selector_create(sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "semolina"); hy_goal_install_selector(goal, sltr, NULL); hy_selector_free(sltr); fail_unless(hy_goal_run(goal)); fail_unless(hy_goal_count_problems(goal) > 0); char *problem = hy_goal_describe_problem(goal, 0); ck_assert_str_eq(problem, "package semolina does not exist"); g_free(problem); hy_goal_free(goal); }
static void dump_goal_errors(HyGoal goal) { for (int i = 0; i < hy_goal_count_problems(goal); ++i) { char *problem = hy_goal_describe_problem(goal, i); printf("%s\n", problem); g_free(problem); } }
END_TEST START_TEST(test_goal_protected) { DnfSack *sack = test_globals.sack; DnfPackageSet *protected = dnf_packageset_new(sack); DnfPackage *pkg = by_name_repo(sack, "penny-lib", HY_SYSTEM_REPO_NAME); DnfPackage *pp = by_name_repo(sack, "flying", HY_SYSTEM_REPO_NAME); const char *expected; g_autofree gchar *problem; // when protected_packages set is empty it should remove both packages HyGoal goal = hy_goal_create(sack); DnfPackageSet *empty = dnf_packageset_new(sack); dnf_goal_set_protected(goal, empty); g_object_unref(empty); hy_goal_erase(goal, pkg); fail_if(hy_goal_run_flags(goal, DNF_ALLOW_UNINSTALL)); assert_iueo(goal, 0, 0, 2, 0); hy_goal_free(goal); // fails to uninstall penny-lib because flying is protected goal = hy_goal_create(sack); dnf_packageset_add(protected, pp); dnf_goal_set_protected(goal, protected); hy_goal_erase(goal, pkg); fail_unless(hy_goal_run_flags(goal, DNF_ALLOW_UNINSTALL)); hy_goal_free(goal); // removal of protected package explicitly should trigger error goal = hy_goal_create(sack); dnf_goal_set_protected(goal, protected); hy_goal_erase(goal, pp); fail_unless(hy_goal_run(goal)); fail_unless(hy_goal_count_problems(goal) == 1); problem = hy_goal_describe_problem(goal, 0); expected = "The operation would result in removing " "the following protected packages: flying"; fail_if(g_strcmp0(problem, expected)); hy_goal_free(goal); g_object_unref(protected); g_object_unref(pkg); g_object_unref(pp); }
static PyObject * describe_problem(_GoalObject *self, PyObject *index_obj) { char *cstr; PyObject *str; if (!PyInt_Check(index_obj)) { PyErr_SetString(PyExc_TypeError, "An integer value expected."); return NULL; } cstr = hy_goal_describe_problem(self->goal, PyLong_AsLong(index_obj)); if (cstr == NULL) { PyErr_SetString(PyExc_ValueError, "Index out of range."); return NULL; } str = PyString_FromString(cstr); g_free(cstr); return str; }
/** * hif_goal_depsolve: */ gboolean hif_goal_depsolve (HyGoal goal, GError **error) { gchar *tmp; gint cnt; gint j; gint rc; _cleanup_string_free_ GString *string = NULL; rc = hy_goal_run_flags (goal, HY_ALLOW_UNINSTALL); if (rc) { string = g_string_new ("Could not depsolve transaction; "); cnt = hy_goal_count_problems (goal); if (cnt == 1) g_string_append_printf (string, "%i problem detected:\n", cnt); else g_string_append_printf (string, "%i problems detected:\n", cnt); for (j = 0; j < cnt; j++) { tmp = hy_goal_describe_problem (goal, j); g_string_append_printf (string, "%i. %s\n", j, tmp); hy_free (tmp); } g_string_truncate (string, string->len - 1); g_set_error_literal (error, HIF_ERROR, HIF_ERROR_PACKAGE_CONFLICTS, string->str); return FALSE; } /* anything to do? */ if (hy_goal_req_length (goal) == 0) { g_set_error_literal (error, HIF_ERROR, HIF_ERROR_NO_PACKAGES_TO_UPDATE, "The transaction was empty"); return FALSE; } return TRUE; }
uint32_t TDNFGoalReportProblems( HyGoal hGoal ) { uint32_t dwError = 0; int i = 0; int nCount = 0; char* pszProblem = NULL; if(!hGoal) { dwError = ERROR_TDNF_INVALID_PARAMETER; BAIL_ON_TDNF_ERROR(dwError); } nCount = hy_goal_count_problems(hGoal); if(nCount > 0) { fprintf(stdout, "Found %d problem(s) while resolving\n", nCount); for(; i < nCount; ++i) { pszProblem = hy_goal_describe_problem(hGoal, i); fprintf(stdout, "%d. %s\n", i+1, pszProblem); hy_free(pszProblem); pszProblem = NULL; } } cleanup: if(pszProblem) { hy_free(pszProblem); } return dwError; error: goto cleanup; }
END_TEST START_TEST(test_goal_describe_problem) { HySack sack = test_globals.sack; HyPackage pkg = get_latest_pkg(sack, "hello"); HyGoal goal = hy_goal_create(sack); hy_goal_install(goal, pkg); fail_unless(hy_goal_run(goal)); fail_unless(hy_goal_list_installs(goal) == NULL); fail_unless(hy_get_errno() == HY_E_NO_SOLUTION); fail_unless(hy_goal_count_problems(goal) > 0); char *problem = hy_goal_describe_problem(goal, 0); const char *expected = "nothing provides goodbye"; fail_if(strncmp(problem, expected, strlen(expected))); hy_free(problem); hy_package_free(pkg); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_describe_problem) { g_autoptr(GError) error = NULL; DnfSack *sack = test_globals.sack; DnfPackage *pkg = get_latest_pkg(sack, "hello"); HyGoal goal = hy_goal_create(sack); hy_goal_install(goal, pkg); fail_unless(hy_goal_run(goal)); fail_unless(hy_goal_list_installs(goal, &error) == NULL); fail_unless(error->code == DNF_ERROR_NO_SOLUTION); fail_unless(hy_goal_count_problems(goal) > 0); char *problem = hy_goal_describe_problem(goal, 0); const char *expected = "nothing provides goodbye"; fail_if(strncmp(problem, expected, strlen(expected))); g_free(problem); g_object_unref(pkg); hy_goal_free(goal); }