static int set_installonly(_SackObject *self, PyObject *obj, void *unused) { if (!PySequence_Check(obj)) { PyErr_SetString(PyExc_AttributeError, "Expected a sequence."); return -1; } const int len = PySequence_Length(obj); PycompString pStrings[len]; const char *strings[len + 1]; for (int i = 0; i < len; ++i) { UniquePtrPyObject item(PySequence_GetItem(obj, i)); if (PyUnicode_Check(item.get()) || PyString_Check(item.get())) { pStrings[i] = PycompString(item.get()); strings[i] = pStrings[i].getCString(); } else strings[i] = NULL; if (strings[i] == NULL) return -1; } strings[len] = NULL; DnfSack *sack = self->sack; dnf_sack_set_installonly(sack, strings); return 0; }
END_TEST START_TEST(test_goal_installonly_limit_with_modules) { // most complex installonly test case, includes the k-m packages const char *installonly[] = {"k", "k-m", NULL}; DnfSack *sack = test_globals.sack; dnf_sack_set_installonly(sack, installonly); dnf_sack_set_installonly_limit(sack, 3); dnf_sack_set_running_kernel_fn(sack, mock_running_kernel); HyGoal goal = hy_goal_create(sack); hy_goal_upgrade_all(goal); fail_if(hy_goal_run_flags(goal, 0)); assert_iueo(goal, 2, 0, 5, 0); GPtrArray *erasures = hy_goal_list_erasures(goal, NULL); assert_nevra_eq(g_ptr_array_index(erasures, 0), "k-1-0.x86_64"); assert_nevra_eq(g_ptr_array_index(erasures, 1), "k-m-1-0.x86_64"); assert_nevra_eq(g_ptr_array_index(erasures, 2), "k-freak-1-0-1-0.x86_64"); assert_nevra_eq(g_ptr_array_index(erasures, 3), "k-2-0.x86_64"); assert_nevra_eq(g_ptr_array_index(erasures, 4), "k-m-2-0.x86_64"); g_ptr_array_unref(erasures); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_installonly) { const char *installonly[] = {"fool", NULL}; DnfSack *sack = test_globals.sack; dnf_sack_set_installonly(sack, installonly); dnf_sack_set_installonly_limit(sack, 2); DnfPackage *pkg = get_latest_pkg(sack, "fool"); HyGoal goal = hy_goal_create(sack); fail_if(hy_goal_upgrade_to_flags(goal, pkg, HY_CHECK_INSTALLED)); g_object_unref(pkg); fail_if(hy_goal_run(goal)); assert_iueo(goal, 1, 0, 1, 0); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_installonly_limit_disabled) { // test that setting limit to 0 does not cause all intallonlies to be // uninstalled const char *installonly[] = {"k", NULL}; DnfSack *sack = test_globals.sack; dnf_sack_set_installonly(sack, installonly); dnf_sack_set_installonly_limit(sack, 0); dnf_sack_set_running_kernel_fn(sack, mock_running_kernel_no); HyGoal goal = hy_goal_create(sack); hy_goal_upgrade_all(goal); fail_if(hy_goal_run_flags(goal, 0)); assert_iueo(goal, 1, 1, 0, 0); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_installonly_limit) { const char *installonly[] = {"k", NULL}; DnfSack *sack = test_globals.sack; dnf_sack_set_installonly(sack, installonly); dnf_sack_set_installonly_limit(sack, 3); dnf_sack_set_running_kernel_fn(sack, mock_running_kernel_no); HyGoal goal = hy_goal_create(sack); hy_goal_upgrade_all(goal); fail_if(hy_goal_run_flags(goal, 0)); assert_iueo(goal, 1, 1, 3, 0); // k-m is just upgraded GPtrArray *erasures = hy_goal_list_erasures(goal, NULL); assert_nevra_eq(g_ptr_array_index(erasures, 0), "k-1-0.x86_64"); assert_nevra_eq(g_ptr_array_index(erasures, 1), "k-freak-1-0-1-0.x86_64"); assert_nevra_eq(g_ptr_array_index(erasures, 2), "k-1-1.x86_64"); g_ptr_array_unref(erasures); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_installonly_upgrade_all) { const char *installonly[] = {"fool", NULL}; DnfSack *sack = test_globals.sack; HyGoal goal = hy_goal_create(sack); dnf_sack_set_installonly(sack, installonly); dnf_sack_set_installonly_limit(sack, 2); hy_goal_upgrade_all(goal); fail_if(hy_goal_run(goal)); GPtrArray *plist = hy_goal_list_erasures(goal, NULL); assert_list_names(plist, "penny", NULL); g_ptr_array_unref(plist); plist = hy_goal_list_installs(goal, NULL); assert_list_names(plist, "fool", NULL); g_ptr_array_unref(plist); assert_iueo(goal, 1, 4, 1, 0); hy_goal_free(goal); }