summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2012-02-24 08:42:40 +0200
committerTimo Teräs <timo.teras@iki.fi>2012-02-24 08:42:40 +0200
commit4676c5d63ac70f4bf2c4e4c945a7fa65941676e9 (patch)
tree95cd25767adde7eb9f07240e22f8859984075bb7
parent1bb2fa7862bb896f1cfefca5bb9f1d0b477f49a5 (diff)
downloadapk-tools-4676c5d63ac70f4bf2c4e4c945a7fa65941676e9.tar.gz
apk-tools-4676c5d63ac70f4bf2c4e4c945a7fa65941676e9.tar.bz2
apk-tools-4676c5d63ac70f4bf2c4e4c945a7fa65941676e9.tar.xz
apk-tools-4676c5d63ac70f4bf2c4e4c945a7fa65941676e9.zip
test: improve pinning tests
-rw-r--r--src/apk.c13
-rw-r--r--src/solver.c5
-rw-r--r--test/pinning.installed22
-rw-r--r--test/pinning.repo220
-rw-r--r--test/pinning1.test2
-rw-r--r--test/pinning2.test2
-rw-r--r--test/pinning3.test2
-rw-r--r--test/pinning4.test2
-rw-r--r--test/pinning5.test9
-rw-r--r--test/pinning6.test11
-rw-r--r--test/pinning7.test11
11 files changed, 89 insertions, 10 deletions
diff --git a/src/apk.c b/src/apk.c
index 254a932..752409f 100644
--- a/src/apk.c
+++ b/src/apk.c
@@ -462,13 +462,16 @@ int main(int argc, char **argv)
}
for (i = 0; i < test_repos->num; i++) {
struct apk_bstream *bs;
- char *fn = test_repos->item[i];
+ apk_blob_t spec = APK_BLOB_STR(test_repos->item[i]), name, tag;
int repo_tag = 0;
- if (fn[0] == '+') {
- repo_tag = apk_db_get_tag_id(&db, APK_BLOB_STR("testing"));
- fn++;
+
+ if (apk_blob_split(spec, APK_BLOB_STR(":"), &tag, &name)) {
+ repo_tag = apk_db_get_tag_id(&db, tag);
+ } else {
+ name = spec;
}
- bs = apk_bstream_from_file(AT_FDCWD, fn);
+
+ bs = apk_bstream_from_file(AT_FDCWD, name.ptr);
if (bs != NULL) {
apk_db_index_read(&db, bs, i);
db.repo_tags[repo_tag].allowed_repos |= BIT(i);
diff --git a/src/solver.c b/src/solver.c
index 39f9683..d12ecff 100644
--- a/src/solver.c
+++ b/src/solver.c
@@ -356,7 +356,7 @@ static int get_topology_score(
};
if (ss->solver_flags & APK_SOLVERF_AVAILABLE) {
- /* not upgrading: it is not preferred to change package */
+ /* available preferred */
if ((pkg->repos == 0) && ns->has_available_pkgs)
score.non_preferred_actions++;
} else if (ns->inherited_reinstall ||
@@ -364,6 +364,9 @@ static int get_topology_score(
/* reinstall requested, but not available */
if (!pkg_available(ss->db, pkg))
score.non_preferred_actions++;
+ } else if (ns->inherited_upgrade ||
+ ((ns->solver_flags_local|ss->solver_flags) & APK_SOLVERF_UPGRADE)) {
+ /* upgrading - score is just locked here */
} else if ((ns->inherited_upgrade == 0) &&
((ns->solver_flags_local|ss->solver_flags) & APK_SOLVERF_UPGRADE) == 0 &&
((ns->solver_flags_maybe & APK_SOLVERF_UPGRADE) == 0 || (ps->locked))) {
diff --git a/test/pinning.installed b/test/pinning.installed
new file mode 100644
index 0000000..8fb45e7
--- /dev/null
+++ b/test/pinning.installed
@@ -0,0 +1,22 @@
+C:Q1eVpkasfqZAukAXFYbgwt4xffZWU=
+P:a
+V:3
+S:1
+I:1
+D:b
+p:testing
+
+C:Q1hdUpqRv5mYgJEqW52UmVsv23ysE=
+P:b
+V:3
+S:1
+I:1
+
+C:Q1eVpkasfqZAukAXFYbg324xAt4WU=
+P:c
+V:3
+S:1
+I:1
+D:a>=3
+p:testing
+
diff --git a/test/pinning.repo2 b/test/pinning.repo2
new file mode 100644
index 0000000..45c5114
--- /dev/null
+++ b/test/pinning.repo2
@@ -0,0 +1,20 @@
+C:Q1eVpkasfqZAukfffYbgwt4xffZWU=
+P:a
+V:3.1
+S:1
+I:1
+D:b
+
+C:Q1hdUpqRv5mYgJEqff2UmVsv23ysE=
+P:b
+V:3.1
+S:1
+I:1
+
+C:Q1eVpkasfqZAukAffYsd324xAt4WU=
+P:c
+V:3.1
+S:1
+I:1
+D:a>=3
+
diff --git a/test/pinning1.test b/test/pinning1.test
index 311fa3f..3416cac 100644
--- a/test/pinning1.test
+++ b/test/pinning1.test
@@ -1,6 +1,6 @@
@ARGS
--test-repo basic.repo
---test-repo +pinning.repo
+--test-repo testing:pinning.repo
add a
@EXPECT
(1/2) Installing b (2)
diff --git a/test/pinning2.test b/test/pinning2.test
index c655143..aa40250 100644
--- a/test/pinning2.test
+++ b/test/pinning2.test
@@ -1,6 +1,6 @@
@ARGS
--test-repo basic.repo
---test-repo +pinning.repo
+--test-repo testing:pinning.repo
add a@testing
@EXPECT
(1/2) Installing b (2)
diff --git a/test/pinning3.test b/test/pinning3.test
index 60e073f..c5666cc 100644
--- a/test/pinning3.test
+++ b/test/pinning3.test
@@ -1,6 +1,6 @@
@ARGS
--test-repo basic.repo
---test-repo +pinning.repo
+--test-repo testing:pinning.repo
add a@testing b@testing
@EXPECT
(1/2) Installing b@testing (3)
diff --git a/test/pinning4.test b/test/pinning4.test
index 80348f7..49a852f 100644
--- a/test/pinning4.test
+++ b/test/pinning4.test
@@ -1,6 +1,6 @@
@ARGS
--test-repo basic.repo
---test-repo +pinning.repo
+--test-repo testing:pinning.repo
add c@testing
@EXPECT
(1/3) Installing b (2)
diff --git a/test/pinning5.test b/test/pinning5.test
new file mode 100644
index 0000000..17e58d0
--- /dev/null
+++ b/test/pinning5.test
@@ -0,0 +1,9 @@
+@ARGS
+--test-repo basic.repo
+--test-repo testing:pinning.repo
+--test-repo testing:pinning.repo2
+--test-instdb pinning.installed
+--test-world "c@testing"
+add
+@EXPECT
+OK: 0 MiB in 3 packages
diff --git a/test/pinning6.test b/test/pinning6.test
new file mode 100644
index 0000000..5416c77
--- /dev/null
+++ b/test/pinning6.test
@@ -0,0 +1,11 @@
+@ARGS
+--test-repo basic.repo
+--test-repo testing:pinning.repo
+--test-repo testing:pinning.repo2
+--test-instdb pinning.installed
+--test-world "c@testing"
+upgrade
+@EXPECT
+(1/2) Upgrading a@testing (3 -> 3.1)
+(2/2) Upgrading c@testing (3 -> 3.1)
+OK: 0 MiB in 3 packages
diff --git a/test/pinning7.test b/test/pinning7.test
new file mode 100644
index 0000000..42a3570
--- /dev/null
+++ b/test/pinning7.test
@@ -0,0 +1,11 @@
+@ARGS
+--test-repo basic.repo
+--test-repo testing:pinning.repo
+--test-repo testing2:pinning.repo
+--test-instdb pinning.installed
+--test-world "c@testing"
+add c@testing2
+@EXPECT
+(1/2) Updating pinning a@testing2 (3)
+(2/2) Updating pinning c@testing2 (3)
+OK: 0 MiB in 3 packages