public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2018-12-30  2:34 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2018-12-30  2:34 UTC (permalink / raw
  To: gentoo-commits

commit:     17cb113abf2b155b7b1f2955f7eed54f335badb0
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 30 00:21:17 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Dec 30 00:59:46 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=17cb113a

ResolverPlayground: exclude internal wrappers from essential_binaries PATH

Ensure that essential_binaries symlinks do not refer to internal
wrapper scripts, in order to avoid infinite recursion. Use the
same ebuild-helpers pattern as the portageq wrapper script since
daeb75b345c4433218ab9e7a5319e8914092f048.

Fixes: 1b5edbb5ec70 ("_doebuild_path: do not use host PATH by default and prepend EPREFIX PATH")
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index 3997ad26e..626a1f064 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -108,8 +108,21 @@ class ResolverPlayground(object):
 				"uniq",
 				"xargs",
 			)
-			for x in essential_binaries:
-				os.symlink(find_binary(x), os.path.join(eubin, x))
+			# Exclude internal wrappers from PATH lookup.
+			orig_path = os.environ['PATH']
+			included_paths = []
+			for path in orig_path.split(':'):
+				if path and not fnmatch.fnmatch(path, '*/portage/*/ebuild-helpers*'):
+					included_paths.append(path)
+			try:
+				os.environ['PATH'] = ':'.join(included_paths)
+				for x in essential_binaries:
+					path = find_binary(x)
+					if path is None:
+						raise portage.exception.CommandNotFound(x)
+					os.symlink(path, os.path.join(eubin, x))
+			finally:
+				os.environ['PATH'] = orig_path
 		else:
 			self.eprefix = normalize_path(eprefix)
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-01-20 19:27 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-01-20 19:27 UTC (permalink / raw
  To: gentoo-commits

commit:     e0c2af5078fc481c21dc4f4abfa0d61d6ed48e84
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 20 19:22:04 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Jan 20 19:24:31 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e0c2af50

ResolverPlayground: add chgrp to essential_binaries

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index 0d6340dc0..fc754fb42 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -86,6 +86,7 @@ class ResolverPlayground(object):
 				"basename",
 				"bzip2",
 				"cat",
+				"chgrp",
 				"chmod",
 				"chown",
 				"cp",


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-09-12 19:05 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-09-12 19:05 UTC (permalink / raw
  To: gentoo-commits

commit:     54cab2dea3c55cbcd3a9bc2831c0ad25b12f12fa
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 12 18:59:09 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Sep 12 19:03:04 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=54cab2de

SlotConflictMaskUpdateTestCase: remove todo flag (bug 693242)

This test passes since the fix premature backtracking termination in
commit bb0bb4104b0d6cab16abce9cd6e1683c0b6d5c8d.

Bug: https://bugs.gentoo.org/693242
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_slot_conflict_mask_update.py | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_slot_conflict_mask_update.py b/lib/portage/tests/resolver/test_slot_conflict_mask_update.py
index a90eeac29..37e969828 100644
--- a/lib/portage/tests/resolver/test_slot_conflict_mask_update.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_mask_update.py
@@ -1,4 +1,4 @@
-# Copyright 2013 Gentoo Foundation
+# Copyright 2013-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -13,9 +13,6 @@ class SlotConflictMaskUpdateTestCase(TestCase):
 		in first. This is not always a good idea. Mask the highest version instead.
 		"""
 
-		
-		self.todo = True
-
 		ebuilds = {
 			"dev-libs/A-1": { "DEPEND": "=dev-libs/C-1 dev-libs/B" },
 			"dev-libs/B-1": { "DEPEND": "=dev-libs/C-1" },


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-09-12 19:43 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-09-12 19:43 UTC (permalink / raw
  To: gentoo-commits

commit:     524aa791f28ffcc1df921d8a8a9c111b7e359099
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 12 19:40:44 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Sep 12 19:42:37 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=524aa791

VirtualCircularChoicesTestCase: remove todo flag (bug 384107)

This test passes since the fix for bug 639346 in commit
09185309aad49b83f29ef94b11318998e520e138.

Bug: https://bugs.gentoo.org/384107
Bug: https://bugs.gentoo.org/639346
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_circular_choices.py | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_circular_choices.py b/lib/portage/tests/resolver/test_circular_choices.py
index 33b730627..418173689 100644
--- a/lib/portage/tests/resolver/test_circular_choices.py
+++ b/lib/portage/tests/resolver/test_circular_choices.py
@@ -1,4 +1,4 @@
-# Copyright 2011 Gentoo Foundation
+# Copyright 2011-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -34,9 +34,6 @@ class CircularChoicesTestCase(TestCase):
 class VirtualCircularChoicesTestCase(TestCase):
 	def testDirectVirtualCircularDependency(self):
 
-		# Bug #384107
-		self.todo = True
-
 		ebuilds = {
 			"dev-java/icedtea-6.1.10.3": { "SLOT" : "6", "DEPEND": "virtual/jdk" },
 			"dev-java/icedtea6-bin-1.10.3": {},


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-09-15  3:36 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-09-15  3:36 UTC (permalink / raw
  To: gentoo-commits

commit:     c510f715b748a604c47fb78ed4796bf0391bcfdd
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 15 03:34:07 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Sep 15 03:35:48 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c510f715

SlotOperatorRuntimePkgMaskTestCase: increase --backtrack to 13

Hopefully this solves an occasional travis-ci test failure like this:

AssertionError: False != True : atoms: (=app-misc/meta-pkg-2), key: slot_collision_solutions, expected: None, got: []
atoms: (=app-misc/meta-pkg-2), key: success, expected: True, got: False

See: https://travis-ci.org/gentoo/portage/jobs/585109030
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py b/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
index f8b53e2b5..4a028def3 100644
--- a/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
+++ b/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
@@ -1,4 +1,4 @@
-# Copyright 2017 Gentoo Foundation
+# Copyright 2017-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -110,7 +110,7 @@ class SlotOperatorRuntimePkgMaskTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				["=app-misc/meta-pkg-2"],
 				options = {
-					"--backtrack": 12,
+					"--backtrack": 13,
 				},
 				success = True,
 				ambiguous_merge_order = True,


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-10-11  4:00 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-10-11  4:00 UTC (permalink / raw
  To: gentoo-commits

commit:     bfc7b14852da5a2c6274e2116b81e9f2abfcb962
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 11 03:57:10 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Oct 11 04:00:17 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=bfc7b148

tests/resolver: specify --autounmask when appropriate

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_autounmask.py             |  4 +++-
 lib/portage/tests/resolver/test_keywords.py               | 15 ++++++++++++++-
 .../tests/resolver/test_slot_operator_autounmask.py       |  4 ++--
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_autounmask.py b/lib/portage/tests/resolver/test_autounmask.py
index 809d42104..64718dbf9 100644
--- a/lib/portage/tests/resolver/test_autounmask.py
+++ b/lib/portage/tests/resolver/test_autounmask.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2018 Gentoo Foundation
+# Copyright 2010-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -579,12 +579,14 @@ class AutounmaskTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				["dev-libs/B"],
 				success=False,
+				options={"--autounmask": True},
 				mergelist=["dev-libs/A-2", "dev-libs/B-1"],
 				needed_p_mask_changes=set(["dev-libs/A-2"])),
 
 			ResolverPlaygroundTestCase(
 				["dev-libs/C"],
 				success=False,
+				options={"--autounmask": True},
 				mergelist=["dev-libs/A-9999", "dev-libs/C-1"],
 				unstable_keywords=set(["dev-libs/A-9999"]),
 				needed_p_mask_changes=set(["dev-libs/A-9999"])),

diff --git a/lib/portage/tests/resolver/test_keywords.py b/lib/portage/tests/resolver/test_keywords.py
index d59ea5881..7989bbac5 100644
--- a/lib/portage/tests/resolver/test_keywords.py
+++ b/lib/portage/tests/resolver/test_keywords.py
@@ -1,4 +1,4 @@
-# Copyright 2011 Gentoo Foundation
+# Copyright 2011-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -37,6 +37,7 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/B'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/B-1',),
 				mergelist = ['app-misc/B-1']),
 
@@ -48,24 +49,28 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/D'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/D-1',),
 				mergelist = ['app-misc/D-1']),
 
 			ResolverPlaygroundTestCase(
 				['app-misc/E'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/E-1',),
 				mergelist = ['app-misc/E-1']),
 
 			ResolverPlaygroundTestCase(
 				['app-misc/F'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/F-1',),
 				mergelist = ['app-misc/F-1']),
 
 			ResolverPlaygroundTestCase(
 				['app-misc/G'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/G-1',),
 				mergelist = ['app-misc/G-1']),
 		)
@@ -109,6 +114,7 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/B'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/B-1',),
 				mergelist = ['app-misc/B-1']),
 
@@ -120,6 +126,7 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/D'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/D-1',),
 				mergelist = ['app-misc/D-1']),
 
@@ -131,12 +138,14 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/F'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/F-1',),
 				mergelist = ['app-misc/F-1']),
 
 			ResolverPlaygroundTestCase(
 				['app-misc/G'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/G-1',),
 				mergelist = ['app-misc/G-1']),
 		)
@@ -195,18 +204,21 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/E'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/E-1',),
 				mergelist = ['app-misc/E-1']),
 
 			ResolverPlaygroundTestCase(
 				['app-misc/F'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/F-1',),
 				mergelist = ['app-misc/F-1']),
 
 			ResolverPlaygroundTestCase(
 				['app-misc/G'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/G-1',),
 				mergelist = ['app-misc/G-1']),
 		)
@@ -275,6 +287,7 @@ class KeywordsTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				['app-misc/G'],
 				success = False,
+				options={'--autounmask': True},
 				unstable_keywords = ('app-misc/G-1',),
 				mergelist = ['app-misc/G-1']),
 		)

diff --git a/lib/portage/tests/resolver/test_slot_operator_autounmask.py b/lib/portage/tests/resolver/test_slot_operator_autounmask.py
index 42efa6682..5ab8e1f67 100644
--- a/lib/portage/tests/resolver/test_slot_operator_autounmask.py
+++ b/lib/portage/tests/resolver/test_slot_operator_autounmask.py
@@ -73,14 +73,14 @@ class SlotOperatorAutoUnmaskTestCase(TestCase):
 
 			ResolverPlaygroundTestCase(
 				["dev-libs/icu"],
-				options = {"--oneshot": True, "--usepkg": True},
+				options = {"--autounmask": True, "--oneshot": True, "--usepkg": True},
 				success = False,
 				mergelist = ["[binary]dev-libs/icu-49", "dev-libs/libxml2-2.7.8" ],
 				unstable_keywords = ['dev-libs/libxml2-2.7.8']),
 
 			ResolverPlaygroundTestCase(
 				["dev-libs/icu"],
-				options = {"--oneshot": True, "--usepkgonly": True},
+				options = {"--autounmask": True, "--oneshot": True, "--usepkgonly": True},
 				success = True,
 				mergelist = ["[binary]dev-libs/icu-4.8"]),
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-10-21  8:26 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-10-21  8:26 UTC (permalink / raw
  To: gentoo-commits

commit:     72c3a6d7179d9b18b8681a958a86af95889e6d88
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 21 08:20:45 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Oct 21 08:23:27 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=72c3a6d7

SlotOperatorRuntimePkgMaskTestCase: increase --backtrack to 14

Hopefully this solves an occasional travis-ci test failure,
since the increase to 13 in c510f715b748 did not solve it.
Curiously, both observed failures were with python3.5.

See: https://travis-ci.org/gentoo/portage/jobs/600277643
See: https://travis-ci.org/gentoo/portage/jobs/585109030
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py b/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
index 4a028def3..affe33f89 100644
--- a/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
+++ b/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
@@ -110,7 +110,7 @@ class SlotOperatorRuntimePkgMaskTestCase(TestCase):
 			ResolverPlaygroundTestCase(
 				["=app-misc/meta-pkg-2"],
 				options = {
-					"--backtrack": 13,
+					"--backtrack": 14,
 				},
 				success = True,
 				ambiguous_merge_order = True,


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-11-16  9:57 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-11-16  9:57 UTC (permalink / raw
  To: gentoo-commits

commit:     c5f9cbdc45be302a04bda52612d12a891667103c
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 16 09:53:05 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Nov 16 09:53:56 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c5f9cbdc

ResolverPlayground: create installed ebuild + environment.bz2

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index 22d54e251..3d48c244f 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -1,6 +1,7 @@
 # Copyright 2010-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+import bz2
 from itertools import permutations
 import fnmatch
 import sys
@@ -332,6 +333,17 @@ class ResolverPlayground(object):
 				with open(os.path.join(vdb_pkg_dir, k), "w") as f:
 					f.write("%s\n" % v)
 
+			ebuild_path = os.path.join(vdb_pkg_dir, a.cpv.split("/")[1] + ".ebuild")
+			with open(ebuild_path, "w") as f:
+				f.write('EAPI="%s"\n' % metadata.pop('EAPI', '0'))
+				for k, v in metadata.items():
+					f.write('%s="%s"\n' % (k, v))
+
+			env_path = os.path.join(vdb_pkg_dir, 'environment.bz2')
+			with bz2.BZ2File(env_path, mode='w') as f:
+				with open(ebuild_path, 'rb') as inputfile:
+					f.write(inputfile.read())
+
 	def _create_profile(self, ebuilds, installed, profile, repo_configs, user_config, sets):
 
 		user_config_dir = os.path.join(self.eroot, USER_CONFIG_PATH)


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-12-21 23:54 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-12-21 23:54 UTC (permalink / raw
  To: gentoo-commits

commit:     4e83e35467741535463c2f9284dcf21ab4229391
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 21 22:55:34 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Dec 21 23:54:15 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4e83e354

test_circular_choices: add cases for bug 703440

The testCircularJsoncppCmakeBootstrapOrDeps method fails due to circular
dependencies triggered when it ignores cmake-bootstrap in order to
eliminate redundant packages.

Meanwhile, the testVirtualCmakeBootstrapUseConditional method solves the
problem by using a dependency conditional on the bootstrap USE flag.

Bug: https://bugs.gentoo.org/703440
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../tests/resolver/test_circular_choices.py        | 75 ++++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/lib/portage/tests/resolver/test_circular_choices.py b/lib/portage/tests/resolver/test_circular_choices.py
index 418173689..366f2bc27 100644
--- a/lib/portage/tests/resolver/test_circular_choices.py
+++ b/lib/portage/tests/resolver/test_circular_choices.py
@@ -5,6 +5,81 @@ from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
 	ResolverPlaygroundTestCase)
 
+class CircularJsoncppCmakeBootstrapTestCase(TestCase):
+
+	def testCircularJsoncppCmakeBootstrapOrDeps(self):
+
+		ebuilds = {
+			'dev-libs/jsoncpp-1.9.2': {
+				'EAPI': '7',
+				'BDEPEND': '|| ( dev-util/cmake-bootstrap dev-util/cmake )'
+			},
+			'dev-util/cmake-bootstrap-3.16.2': {
+				'EAPI': '7',
+			},
+			'dev-util/cmake-3.16.2': {
+				'EAPI': '7',
+				'BDEPEND': '>=dev-libs/jsoncpp-0.6.0_rc2:0=',
+			},
+		}
+
+		test_cases = (
+			# Demonstrate bug 703440. It ignores cmake-bootstrap in order to eliminate redundant packages.
+			#
+			#  * Error: circular dependencies:
+			#
+			# (dev-libs/jsoncpp-1.9.2:0/0::test_repo, ebuild scheduled for merge) depends on
+			#  (dev-util/cmake-3.16.2:0/0::test_repo, ebuild scheduled for merge) (buildtime)
+			#    (dev-libs/jsoncpp-1.9.2:0/0::test_repo, ebuild scheduled for merge) (buildtime_slot_op)
+			ResolverPlaygroundTestCase(
+				['dev-util/cmake'],
+				circular_dependency_solutions = {},
+				success = False,
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.cleanup()
+
+	def testVirtualCmakeBootstrapUseConditional(self):
+
+		ebuilds = {
+			'dev-libs/jsoncpp-1.9.2': {
+				'EAPI': '7',
+				'IUSE': '+bootstrap',
+				'BDEPEND': 'bootstrap? ( dev-util/cmake-bootstrap ) !bootstrap? ( dev-util/cmake )'
+			},
+			'dev-util/cmake-bootstrap-3.16.2': {
+				'EAPI': '7',
+			},
+			'dev-util/cmake-3.16.2': {
+				'EAPI': '7',
+				'BDEPEND': '>=dev-libs/jsoncpp-0.6.0_rc2:0=',
+			},
+		}
+
+		test_cases = (
+			# Solve bug 703440 with a dependency conditional on the bootstrap USE flag.
+			ResolverPlaygroundTestCase(
+				['dev-util/cmake'],
+				mergelist = ['dev-util/cmake-bootstrap-3.16.2', 'dev-libs/jsoncpp-1.9.2', 'dev-util/cmake-3.16.2'],
+				success = True,
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.cleanup()
+
 class CircularChoicesTestCase(TestCase):
 
 	def testDirectCircularDependency(self):


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-12-22  0:28 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-12-22  0:28 UTC (permalink / raw
  To: gentoo-commits

commit:     ae3e58e83b0a3e75990fd2cef04a0c14b3162650
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 22 00:24:47 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Dec 22 00:26:17 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ae3e58e8

testVirtualCmakeBootstrapUseConditional: split out virtual/cmake

If we split the dependency conditional on the bootstrap USE flag into a
virtual, then it suffices to rebuild the virtual with USE=-bootstrap
instead of rebuilding jsoncpp:

 * Error: circular dependencies:

(dev-libs/jsoncpp-1.9.2:0/0::test_repo, ebuild scheduled for merge) depends on
 (virtual/cmake-0:0/0::test_repo, ebuild scheduled for merge) (buildtime)
  (dev-util/cmake-3.16.2:0/0::test_repo, ebuild scheduled for merge) (buildtime)
   (dev-libs/jsoncpp-1.9.2:0/0::test_repo, ebuild scheduled for merge) (buildtime_slot_op)

It might be possible to break this cycle
by applying the following change:
- virtual/cmake-0 (Change USE: +bootstrap)

Note that this change can be reverted, once the package has been installed.

Bug: https://bugs.gentoo.org/703440
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_circular_choices.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/lib/portage/tests/resolver/test_circular_choices.py b/lib/portage/tests/resolver/test_circular_choices.py
index 366f2bc27..ef9e88eac 100644
--- a/lib/portage/tests/resolver/test_circular_choices.py
+++ b/lib/portage/tests/resolver/test_circular_choices.py
@@ -51,8 +51,7 @@ class CircularJsoncppCmakeBootstrapTestCase(TestCase):
 		ebuilds = {
 			'dev-libs/jsoncpp-1.9.2': {
 				'EAPI': '7',
-				'IUSE': '+bootstrap',
-				'BDEPEND': 'bootstrap? ( dev-util/cmake-bootstrap ) !bootstrap? ( dev-util/cmake )'
+				'BDEPEND': 'virtual/cmake'
 			},
 			'dev-util/cmake-bootstrap-3.16.2': {
 				'EAPI': '7',
@@ -61,13 +60,18 @@ class CircularJsoncppCmakeBootstrapTestCase(TestCase):
 				'EAPI': '7',
 				'BDEPEND': '>=dev-libs/jsoncpp-0.6.0_rc2:0=',
 			},
+			'virtual/cmake-0': {
+				'EAPI': '7',
+				'IUSE': '+bootstrap',
+				'BDEPEND': 'bootstrap? ( dev-util/cmake-bootstrap ) !bootstrap? ( dev-util/cmake )'
+			},
 		}
 
 		test_cases = (
 			# Solve bug 703440 with a dependency conditional on the bootstrap USE flag.
 			ResolverPlaygroundTestCase(
 				['dev-util/cmake'],
-				mergelist = ['dev-util/cmake-bootstrap-3.16.2', 'dev-libs/jsoncpp-1.9.2', 'dev-util/cmake-3.16.2'],
+				mergelist = ['dev-util/cmake-bootstrap-3.16.2', 'virtual/cmake-0', 'dev-libs/jsoncpp-1.9.2', 'dev-util/cmake-3.16.2'],
 				success = True,
 			),
 		)


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-12-22  0:35 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-12-22  0:35 UTC (permalink / raw
  To: gentoo-commits

commit:     ff057e1002529be8b349fd7a1a3179141a7fda0e
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 22 00:33:50 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Dec 22 00:34:28 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ff057e10

testVirtualCmakeBootstrapUseConditional: use RDEPEND for virtual/cmake

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_circular_choices.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_circular_choices.py b/lib/portage/tests/resolver/test_circular_choices.py
index ef9e88eac..d963280b7 100644
--- a/lib/portage/tests/resolver/test_circular_choices.py
+++ b/lib/portage/tests/resolver/test_circular_choices.py
@@ -63,7 +63,7 @@ class CircularJsoncppCmakeBootstrapTestCase(TestCase):
 			'virtual/cmake-0': {
 				'EAPI': '7',
 				'IUSE': '+bootstrap',
-				'BDEPEND': 'bootstrap? ( dev-util/cmake-bootstrap ) !bootstrap? ( dev-util/cmake )'
+				'RDEPEND': 'bootstrap? ( dev-util/cmake-bootstrap ) !bootstrap? ( dev-util/cmake )'
 			},
 		}
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2019-12-25  8:18 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2019-12-25  8:18 UTC (permalink / raw
  To: gentoo-commits

commit:     7dc4131eca73aee2a78fd5c4339cb41760f7a54f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 25 07:55:24 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Dec 25 08:09:22 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7dc4131e

MergeOrderTestCase: update circ-buildtime mergelist for bug 690436

Update mergelist for the circ-buildtime test case so that it will pass
after the fix for bug 690436, and also add a commented merge order
assertion which will succeed after the fix.

Bug: https://bugs.gentoo.org/690436
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_merge_order.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/test_merge_order.py b/lib/portage/tests/resolver/test_merge_order.py
index 5d000d12b..74e826661 100644
--- a/lib/portage/tests/resolver/test_merge_order.py
+++ b/lib/portage/tests/resolver/test_merge_order.py
@@ -1,4 +1,4 @@
-# Copyright 2011-2013 Gentoo Foundation
+# Copyright 2011-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import portage
@@ -319,7 +319,12 @@ class MergeOrderTestCase(TestCase):
 				["app-misc/some-app-c", "app-misc/circ-buildtime-a"],
 				success = True,
 				ambiguous_merge_order = True,
-				mergelist = [("app-misc/circ-buildtime-b-1", "app-misc/circ-buildtime-c-1"), "app-misc/circ-buildtime-a-1", "app-misc/some-app-c-1"]),
+				# The following merge order assertion reflects optimal order for
+				# a circular relationship which is DEPEND in one direction and
+				# RDEPEND in the other. The assertion currently fails, and the
+				# patch for bug 690436 will fix it.
+				#merge_order_assertions = (("app-misc/circ-buildtime-a-1", "app-misc/circ-buildtime-c-1"),),
+				mergelist = [("app-misc/circ-buildtime-b-1", "app-misc/circ-buildtime-c-1", "app-misc/circ-buildtime-a-1"), "app-misc/some-app-c-1"]),
 			# Test optimal merge order for a circular dep that is
 			# RDEPEND in one direction and PDEPEND in the other.
 			ResolverPlaygroundTestCase(


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-01-21  2:37 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-01-21  2:37 UTC (permalink / raw
  To: gentoo-commits

commit:     e5878170638a091db1331df7e7922c8a14e29e86
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 21 01:59:30 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Jan 21 02:35:43 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e5878170

Add unit test which demonstrates bug 705986

This USE suggestion appears to prevent application of || preference
adjustment to solve the cycle (pypy-exe-bin would solve it):

 * Error: circular dependencies:

(dev-python/pypy-exe-7.3.0:7.3.0/7.3.0::test_repo, ebuild scheduled for merge) depends on
 (dev-python/pypy-7.3.0:0/73::test_repo, ebuild scheduled for merge) (buildtime)
  (dev-python/pypy-exe-7.3.0:7.3.0/7.3.0::test_repo, ebuild scheduled for merge) (buildtime)

It might be possible to break this cycle
by applying the following change:
- dev-python/pypy-exe-7.3.0 (Change USE: +low-memory)

Meanwhile, an explicit pypy-exe-bin argument adjusts the || preference
and breaks the cycle:

$ emerge -pq pypy pypy-exe-bin
[ebuild  N     ] dev-python/pypy-exe-bin-7.3.0
[ebuild  N     ] dev-python/pypy-7.3.0

Bug: https://bugs.gentoo.org/705986
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../tests/resolver/test_circular_choices.py        | 48 ++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/lib/portage/tests/resolver/test_circular_choices.py b/lib/portage/tests/resolver/test_circular_choices.py
index a5c10b476..968677a46 100644
--- a/lib/portage/tests/resolver/test_circular_choices.py
+++ b/lib/portage/tests/resolver/test_circular_choices.py
@@ -160,3 +160,51 @@ class VirtualCircularChoicesTestCase(TestCase):
 				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
 		finally:
 			playground.cleanup()
+
+
+class CircularPypyExeTestCase(TestCase):
+	def testCircularPypyExe(self):
+
+		ebuilds = {
+			'dev-python/pypy-7.3.0': {
+				'EAPI': '7',
+				'SLOT' : '0/73',
+				'DEPEND': '|| ( dev-python/pypy-exe dev-python/pypy-exe-bin )'
+			},
+			'dev-python/pypy-exe-7.3.0': {
+				'EAPI': '7',
+				'IUSE': 'low-memory',
+				'SLOT' : '7.3.0',
+				'BDEPEND': '!low-memory? ( dev-python/pypy )'
+			},
+			'dev-python/pypy-exe-bin-7.3.0': {
+				'EAPI': '7',
+				'SLOT' : '7.3.0',
+			},
+		}
+
+		test_cases = (
+			# Demonstrate bug 705986, where a USE change suggestion is given
+			# even though an || preference adjustment is available.
+			ResolverPlaygroundTestCase(
+				['dev-python/pypy'],
+				circular_dependency_solutions = {'dev-python/pypy-7.3.0': {frozenset({('low-memory', True)})}},
+				success = False,
+			),
+			# Demonstrate explicit pypy-exe-bin argument used as a workaround
+			# for bug 705986.
+			ResolverPlaygroundTestCase(
+				['dev-python/pypy', 'dev-python/pypy-exe-bin'],
+				mergelist=['dev-python/pypy-exe-bin-7.3.0', 'dev-python/pypy-7.3.0'],
+				success = True,
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-01-25 22:37 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-01-25 22:37 UTC (permalink / raw
  To: gentoo-commits

commit:     a4d832db2da41240558c424710a00435a797f0d6
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 25 22:17:54 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Jan 25 22:34:36 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a4d832db

OrUpgradeInstalledTestCase: add test for bug 706278

Bug: https://bugs.gentoo.org/706278
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../tests/resolver/test_or_upgrade_installed.py    | 71 ++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/lib/portage/tests/resolver/test_or_upgrade_installed.py b/lib/portage/tests/resolver/test_or_upgrade_installed.py
index 7018e08de..c3efebf55 100644
--- a/lib/portage/tests/resolver/test_or_upgrade_installed.py
+++ b/lib/portage/tests/resolver/test_or_upgrade_installed.py
@@ -158,3 +158,74 @@ class OrUpgradeInstalledTestCase(TestCase):
 		finally:
 			playground.debug = False
 			playground.cleanup()
+
+
+	def test_llvm_slot_operator(self):
+		ebuilds = {
+			'media-libs/mesa-19.2.8': {
+				'EAPI': '7',
+				'RDEPEND': '''|| (
+					sys-devel/llvm:10
+					sys-devel/llvm:9
+					sys-devel/llvm:8
+					sys-devel/llvm:7
+				)
+				sys-devel/llvm:='''
+			},
+			'sys-devel/llvm-10': {
+				'EAPI': '7',
+				'KEYWORDS': '',
+				'SLOT': '10',
+			},
+			'sys-devel/llvm-9': {
+				'EAPI': '7',
+				'SLOT': '9',
+			},
+			'sys-devel/llvm-8': {
+				'EAPI': '7',
+				'SLOT': '8',
+			},
+		}
+
+		installed = {
+			'media-libs/mesa-19.2.8': {
+				'EAPI': '7',
+				'RDEPEND': '''|| (
+					sys-devel/llvm:10
+					sys-devel/llvm:9
+					sys-devel/llvm:8
+					sys-devel/llvm:7
+				)
+				sys-devel/llvm:8/8='''
+			},
+			'sys-devel/llvm-8': {
+				'EAPI': '7',
+				'SLOT': '8',
+			},
+		}
+
+		world = ['media-libs/mesa']
+
+		test_cases = (
+			# Demonstrate bug 706278, where there is a missed slot operator
+			# rebuild that prevents upgrade from llvm-8 to llvm-9.
+			ResolverPlaygroundTestCase(
+				['@world'],
+				options={'--update': True, '--deep': True},
+				success=True,
+				mergelist=[],
+				#mergelist=['sys-devel/llvm-9'],
+			),
+		)
+
+		playground = ResolverPlayground(debug=False,
+			ebuilds=ebuilds, installed=installed, world=world)
+
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True,
+					test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-01-26  0:20 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-01-26  0:20 UTC (permalink / raw
  To: gentoo-commits

commit:     e2a2adf4b2ff7291fd12dce43c1d4c542c399a9f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 26 00:18:48 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Jan 26 00:19:44 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e2a2adf4

MultirepoTestCase: package.keywords -> package.accept_keywords

Bug: https://bugs.gentoo.org/607852
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_multirepo.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_multirepo.py b/lib/portage/tests/resolver/test_multirepo.py
index dabec6af9..bdfcf2120 100644
--- a/lib/portage/tests/resolver/test_multirepo.py
+++ b/lib/portage/tests/resolver/test_multirepo.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -246,7 +246,7 @@ class MultirepoTestCase(TestCase):
 			"dev-libs/B-2": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
 			"dev-libs/B-3": { "DEPEND": "dev-libs/A[-foo]", "EAPI": 2 },
 
-			#package.keywords test
+			#package.accept_keywords test
 			"dev-libs/C-1": { "KEYWORDS": "~x86" },
 			"dev-libs/C-1::repo1": { "KEYWORDS": "~x86" },
 
@@ -286,7 +286,7 @@ class MultirepoTestCase(TestCase):
 				(
 					"dev-libs/A::repo1 foo",
 				),
-			"package.keywords":
+			"package.accept_keywords":
 				(
 					"=dev-libs/C-1::test_repo",
 				),
@@ -332,7 +332,7 @@ class MultirepoTestCase(TestCase):
 				success = False,
 				check_repo_names = True),
 
-			#package.keywords test
+			#package.accept_keywords test
 			ResolverPlaygroundTestCase(
 				["dev-libs/C"],
 				success = True,


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-01-26  6:27 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-01-26  6:27 UTC (permalink / raw
  To: gentoo-commits

commit:     097cf78c22b3d523f701ab36f47714c604690b23
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 26 06:20:17 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Jan 26 06:27:00 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=097cf78c

OrChoicesTestCase: split out bug 480736 libpostproc test case

This case will become an expected failure after bug 706278
is fixed. The packages that triggered bug 480736 not longer
exist.

Bug: https://bugs.gentoo.org/480736
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 115 +++++++++++++-------------
 1 file changed, 59 insertions(+), 56 deletions(-)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index 63e62d010..c0316bfb3 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -78,62 +78,6 @@ class OrChoicesTestCase(TestCase):
 		finally:
 			playground.cleanup()
 
-	def testOrChoicesLibpostproc(self):
-		ebuilds = {
-			"media-video/ffmpeg-0.10" : {
-				"EAPI": "5",
-				"SLOT": "0.10"
-			},
-			"media-video/ffmpeg-1.2.2" : {
-				"EAPI": "5",
-				"SLOT": "0"
-			},
-			"media-libs/libpostproc-0.8.0.20121125" : {
-				"EAPI": "5"
-			},
-			"media-plugins/gst-plugins-ffmpeg-0.10.13_p201211-r1" : {
-				"EAPI": "5",
-				"RDEPEND" : "|| ( media-video/ffmpeg:0 media-libs/libpostproc )"
-			},
-		}
-
-		installed = {
-			"media-video/ffmpeg-0.10" : {
-				"EAPI": "5",
-				"SLOT": "0.10"
-			},
-			"media-libs/libpostproc-0.8.0.20121125" : {
-				"EAPI": "5"
-			},
-			"media-plugins/gst-plugins-ffmpeg-0.10.13_p201211-r1" : {
-				"EAPI": "5",
-				"RDEPEND" : "|| ( media-video/ffmpeg:0 media-libs/libpostproc )"
-			},
-		}
-
-		world = ["media-plugins/gst-plugins-ffmpeg"]
-
-		test_cases = (
-			# Demonstrate that libpostproc is preferred
-			# over ffmpeg:0 for bug #480736.
-			ResolverPlaygroundTestCase(
-				["@world"],
-				options = {"--update": True, "--deep": True},
-				success=True,
-				all_permutations = True,
-				mergelist = []),
-		)
-
-		playground = ResolverPlayground(ebuilds=ebuilds, installed=installed,
-			world=world, debug=False)
-		try:
-			for test_case in test_cases:
-				playground.run_TestCase(test_case)
-				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
-		finally:
-			playground.cleanup()
-
-
 	def testInitiallyUnsatisfied(self):
 
 		ebuilds = {
@@ -340,3 +284,62 @@ class OrChoicesTestCase(TestCase):
 			# Disable debug so that cleanup works.
 			playground.debug = False
 			playground.cleanup()
+
+class OrChoicesLibpostprocTestCase(TestCase):
+
+	def testOrChoicesLibpostproc(self):
+
+		ebuilds = {
+			"media-video/ffmpeg-0.10" : {
+				"EAPI": "5",
+				"SLOT": "0.10"
+			},
+			"media-video/ffmpeg-1.2.2" : {
+				"EAPI": "5",
+				"SLOT": "0"
+			},
+			"media-libs/libpostproc-0.8.0.20121125" : {
+				"EAPI": "5"
+			},
+			"media-plugins/gst-plugins-ffmpeg-0.10.13_p201211-r1" : {
+				"EAPI": "5",
+				"RDEPEND" : "|| ( media-video/ffmpeg:0 media-libs/libpostproc )"
+			},
+		}
+
+		installed = {
+			"media-video/ffmpeg-0.10" : {
+				"EAPI": "5",
+				"SLOT": "0.10"
+			},
+			"media-libs/libpostproc-0.8.0.20121125" : {
+				"EAPI": "5"
+			},
+			"media-plugins/gst-plugins-ffmpeg-0.10.13_p201211-r1" : {
+				"EAPI": "5",
+				"RDEPEND" : "|| ( media-video/ffmpeg:0 media-libs/libpostproc )"
+			},
+		}
+
+		world = ["media-plugins/gst-plugins-ffmpeg"]
+
+		test_cases = (
+			# Demonstrate that libpostproc is preferred
+			# over ffmpeg:0 for bug #480736.
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {"--update": True, "--deep": True},
+				success=True,
+				all_permutations = True,
+				mergelist = []),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, installed=installed,
+			world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-02-01  4:48 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-02-01  4:48 UTC (permalink / raw
  To: gentoo-commits

commit:     1419af8b0830af4a93adda4a4b63d6bba8f3deb6
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 31 03:25:26 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Feb  1 04:47:36 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=1419af8b

Add test case that demonstrates bug 707108

Bug: https://bugs.gentoo.org/707108
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 123 ++++++++++++++++++++++++++
 1 file changed, 123 insertions(+)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index a50ad0151..78946ccec 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -285,6 +285,129 @@ class OrChoicesTestCase(TestCase):
 			playground.debug = False
 			playground.cleanup()
 
+	def test_python_slot(self):
+		ebuilds = {
+
+			"dev-lang/python-3.8" : {
+				"EAPI": "7",
+				"SLOT": "3.8"
+			},
+
+			"dev-lang/python-3.7" : {
+				"EAPI": "7",
+				"SLOT": "3.7"
+			},
+
+			"dev-lang/python-3.6" : {
+				"EAPI": "7",
+				"SLOT": "3.6"
+			},
+
+			"app-misc/bar-1" : {
+				"EAPI": "7",
+				"IUSE": "python_targets_python3_6 +python_targets_python3_7",
+				"RDEPEND": "python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_6? ( dev-lang/python:3.6 )"
+			},
+
+			"app-misc/foo-1" : {
+				"EAPI": "7",
+				"RDEPEND": "|| ( dev-lang/python:3.8 dev-lang/python:3.7 dev-lang/python:3.6 )"
+			},
+
+		}
+
+		installed = {
+
+			"dev-lang/python-3.7" : {
+				"EAPI": "7",
+				"SLOT": "3.7"
+			},
+
+			"app-misc/bar-1" : {
+				"EAPI": "7",
+				"IUSE": "python_targets_python3_6 +python_targets_python3_7",
+				"USE": "python_targets_python3_7",
+				"RDEPEND": "dev-lang/python:3.7"
+			},
+
+			"app-misc/foo-1" : {
+				"EAPI": "7",
+				"RDEPEND": "|| ( dev-lang/python:3.8 dev-lang/python:3.7 dev-lang/python:3.6 )"
+			},
+
+		}
+
+		world = ["app-misc/foo", "app-misc/bar"]
+
+		test_cases = (
+
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {"--update": True, "--deep": True},
+				success = True,
+				mergelist = ['dev-lang/python-3.8']
+			),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+		installed = {
+
+			"dev-lang/python-3.8" : {
+				"EAPI": "7",
+				"SLOT": "3.8"
+			},
+
+			"dev-lang/python-3.7" : {
+				"EAPI": "7",
+				"SLOT": "3.7"
+			},
+
+			"app-misc/bar-1" : {
+				"EAPI": "7",
+				"IUSE": "python_targets_python3_6 +python_targets_python3_7",
+				"USE": "python_targets_python3_7",
+				"RDEPEND": "dev-lang/python:3.7"
+			},
+
+			"app-misc/foo-1" : {
+				"EAPI": "7",
+				"RDEPEND": "|| ( dev-lang/python:3.8 dev-lang/python:3.7 dev-lang/python:3.6 )"
+			},
+
+		}
+
+		test_cases = (
+			# Demonstrate bug 707108, where a new python slot is erroneosly
+			# removed by emerge --depclean.
+			ResolverPlaygroundTestCase(
+				[],
+				options={"--depclean": True},
+				success=True,
+				cleanlist=['dev-lang/python-3.8'],
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+
 class OrChoicesLibpostprocTestCase(TestCase):
 
 	def testOrChoicesLibpostproc(self):


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-02-08  8:35 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-02-08  8:35 UTC (permalink / raw
  To: gentoo-commits

commit:     1aaed33429f390957514eb81b050cae8c7201d67
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Feb  8 07:05:02 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Feb  8 08:24:04 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=1aaed334

Add unit test for virtual/w3m depclean inconsistency (bug 649622)

Bug: https://bugs.gentoo.org/649622
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 114 +++++++++++++++++++++++++-
 1 file changed, 113 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index 10c613e39..f1cc75499 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -1,6 +1,8 @@
-# Copyright 2013-2015 Gentoo Foundation
+# Copyright 2013-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+import itertools
+
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
 	ResolverPlaygroundTestCase)
@@ -407,6 +409,116 @@ class OrChoicesTestCase(TestCase):
 			playground.debug = False
 			playground.cleanup()
 
+	def test_virtual_w3m(self):
+		ebuilds = {
+
+			'app-text/xmlto-0.0.28-r1' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( virtual/w3m www-client/lynx www-client/elinks )'
+			},
+
+			'www-client/elinks-0.13_pre_pre20180225' : {
+				'EAPI': '7',
+			},
+
+			'www-client/lynx-2.9.0_pre4' : {
+				'EAPI': '7',
+			},
+
+			'virtual/w3m-0' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/w3m www-client/w3mmee )'
+			},
+
+			'www-client/w3m-0.5.3_p20190105' : {
+				'EAPI': '7',
+			},
+
+			'www-client/w3mmee-0.3.2_p24-r10' : {
+				'EAPI': '7',
+			},
+
+		}
+
+		installed = {
+
+			'app-text/xmlto-0.0.28-r1' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( virtual/w3m www-client/lynx www-client/elinks )'
+			},
+
+			'www-client/elinks-0.13_pre_pre20180225' : {
+				'EAPI': '7',
+			},
+
+			'www-client/lynx-2.9.0_pre4' : {
+				'EAPI': '7',
+			},
+
+			'www-client/w3m-0.5.3_p20190105' : {
+				'EAPI': '7',
+			},
+
+		}
+
+		world = ['app-text/xmlto', 'www-client/elinks', 'www-client/lynx']
+
+		test_cases = (
+
+			# Test for bug 649622, where virtual/w3m is installed only
+			# to be removed by the next emerge --depclean.
+			ResolverPlaygroundTestCase(
+				['@world'],
+				options = {'--update': True, '--deep': True},
+				success = True,
+				mergelist = ['virtual/w3m-0']
+			),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+		installed = dict(itertools.chain(installed.items(), {
+
+			'virtual/w3m-0' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/w3m www-client/w3mmee )'
+			},
+
+		}.items()))
+
+		test_cases = (
+
+			# Test for bug 649622, where virtual/w3m is removed by
+			# emerge --depclean immediately after it's installed
+			# by a world update.
+			ResolverPlaygroundTestCase(
+				[],
+				options={'--depclean': True},
+				success=True,
+				cleanlist=['virtual/w3m-0', 'www-client/w3m-0.5.3_p20190105'],
+			),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
 
 class OrChoicesLibpostprocTestCase(TestCase):
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-02-09 23:15 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-02-09 23:15 UTC (permalink / raw
  To: gentoo-commits

commit:     21d9b579dc3fda2105caf3328ac5f0afbd80b9a2
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Feb  9 23:04:50 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Feb  9 23:15:01 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=21d9b579

test_virtual_w3m: test with www-client/w3m in @world

Test for behavior reported in bug 649622 comment #10, where
depclean removed virtual/w3m-0 even though www-client/w3m
was in the world file. Since nothing is removed here, it
means that we have not reproduced the behavior reported in
this comment.

Bug: https://bugs.gentoo.org/649622#c19
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 29 +++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index 5679d0b5b..a295c9a22 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -523,6 +523,35 @@ class OrChoicesTestCase(TestCase):
 			playground.cleanup()
 
 
+		test_cases = (
+
+			# Test for behavior reported in bug 649622 comment #10, where
+			# depclean removed virtual/w3m-0 even though www-client/w3m
+			# was in the world file. Since nothing is removed here, it
+			# means that we have not reproduced the behavior reported in
+			# this comment.
+			ResolverPlaygroundTestCase(
+				[],
+				options={'--depclean': True},
+				success=True,
+				cleanlist=[],
+			),
+
+		)
+
+		world += ['www-client/w3m']
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+
 class OrChoicesLibpostprocTestCase(TestCase):
 
 	def testOrChoicesLibpostproc(self):


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-02-09 23:57 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-02-09 23:57 UTC (permalink / raw
  To: gentoo-commits

commit:     c3e9a0fe26434edcc2c034c6b863789eb6afbc34
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Feb  9 23:53:42 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Feb  9 23:56:16 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c3e9a0fe

test_virtual_w3m: test without www-client/w3m installed

Add test case showing that virtual/w3m-0 is not pulled in when
www-client/w3m is not installed and not in @world.

Bug: https://bugs.gentoo.org/649622
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 39 +++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index a295c9a22..a7ede1fac 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -455,18 +455,47 @@ class OrChoicesTestCase(TestCase):
 				'EAPI': '7',
 			},
 
+		}
+
+		world = ['app-text/xmlto', 'www-client/elinks', 'www-client/lynx']
+
+		test_cases = (
+
+			# Test for bug 649622 (without www-client/w3m installed),
+			# where virtual/w3m was pulled in only to be removed by the
+			# next emerge --depclean.
+			ResolverPlaygroundTestCase(
+				['@world'],
+				options = {'--update': True, '--deep': True},
+				success = True,
+				mergelist = []
+			),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+		installed = dict(itertools.chain(installed.items(), {
+
 			'www-client/w3m-0.5.3_p20190105' : {
 				'EAPI': '7',
 			},
 
-		}
-
-		world = ['app-text/xmlto', 'www-client/elinks', 'www-client/lynx']
+		}.items()))
 
 		test_cases = (
 
-			# Test for bug 649622, where virtual/w3m was pulled in only
-			# to be removed by the next emerge --depclean.
+			# Test for bug 649622 (with www-client/w3m installed),
+			# where virtual/w3m was pulled in only to be removed by the
+			# next emerge --depclean.
 			ResolverPlaygroundTestCase(
 				['@world'],
 				options = {'--update': True, '--deep': True},


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-02-10  2:29 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-02-10  2:29 UTC (permalink / raw
  To: gentoo-commits

commit:     b98dbb357b711f64c8fc1e305c5bca38be203f1d
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 01:10:14 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Feb 10 02:24:11 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=b98dbb35

test_virtual_w3m: add realistic case, deps copied from real ebuilds

Since virtual/w3m-0 is not removed in the depclean case,
this test fails to reproduce bug 649622.

Bug: https://bugs.gentoo.org/649622
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 142 ++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index a7ede1fac..f31a5ff22 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -581,6 +581,148 @@ class OrChoicesTestCase(TestCase):
 			playground.cleanup()
 
 
+	def test_virtual_w3m_realistic(self):
+		"""
+		Test for bug 649622 with realistic www-client/w3m dependencies copied
+		from real ebuilds.
+		"""
+		ebuilds = {
+
+			'app-misc/neofetch-6.1.0': {
+				'EAPI': '7',
+				'RDEPEND': 'www-client/w3m'
+			},
+
+			'app-text/xmlto-0.0.28-r1' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( virtual/w3m www-client/lynx www-client/elinks )'
+			},
+
+			'mail-client/neomutt-20191207': {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/lynx www-client/w3m www-client/elinks )'
+			},
+
+			'www-client/elinks-0.13_pre_pre20180225' : {
+				'EAPI': '7',
+			},
+
+			'www-client/lynx-2.9.0_pre4' : {
+				'EAPI': '7',
+			},
+
+			'virtual/w3m-0' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/w3m www-client/w3mmee )'
+			},
+
+			'www-client/w3m-0.5.3_p20190105' : {
+				'EAPI': '7',
+			},
+
+			'www-client/w3mmee-0.3.2_p24-r10' : {
+				'EAPI': '7',
+			},
+
+			'x11-base/xorg-server-1.20.7' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/links www-client/lynx www-client/w3m ) app-text/xmlto',
+			}
+		}
+
+		installed = {
+
+			'app-misc/neofetch-6.1.0': {
+				'EAPI': '7',
+				'RDEPEND': 'www-client/w3m'
+			},
+
+			'app-text/xmlto-0.0.28-r1' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( virtual/w3m www-client/lynx www-client/elinks )'
+			},
+
+			'mail-client/neomutt-20191207': {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/lynx www-client/w3m www-client/elinks )'
+			},
+
+			'www-client/lynx-2.9.0_pre4' : {
+				'EAPI': '7',
+			},
+
+			'www-client/w3m-0.5.3_p20190105' : {
+				'EAPI': '7',
+			},
+
+			'x11-base/xorg-server-1.20.7' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/links www-client/lynx www-client/w3m ) app-text/xmlto',
+			}
+		}
+
+		world = ['app-misc/neofetch', 'mail-client/neomutt', 'www-client/lynx', 'x11-base/xorg-server']
+
+		test_cases = (
+
+			# Test for bug 649622 (with www-client/w3m installed via
+			# xorg-server dependency), where virtual/w3m was pulled in
+			# only to be removed by the next emerge --depclean.
+			ResolverPlaygroundTestCase(
+				['@world'],
+				options = {'--update': True, '--deep': True},
+				success = True,
+				mergelist=['virtual/w3m-0'],
+			),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+
+		installed = dict(itertools.chain(installed.items(), {
+
+			'virtual/w3m-0' : {
+				'EAPI': '7',
+				'RDEPEND': '|| ( www-client/w3m www-client/w3mmee )'
+			},
+
+		}.items()))
+
+		test_cases = (
+
+			# Test for bug 649622, where virtual/w3m is removed by
+			# emerge --depclean immediately after it's installed
+			# by a world update. Since virtual/w3m-0 is not removed
+			# here, this case fails to reproduce bug 649622.
+			ResolverPlaygroundTestCase(
+				[],
+				options={'--depclean': True},
+				success=True,
+				cleanlist=[],
+			),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+
 class OrChoicesLibpostprocTestCase(TestCase):
 
 	def testOrChoicesLibpostproc(self):


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-02-10  3:19 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-02-10  3:19 UTC (permalink / raw
  To: gentoo-commits

commit:     240e7124f02a84a572a7a115e9f0df22579e1c55
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 03:18:26 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Feb 10 03:18:53 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=240e7124

ResolverPlayground: set PORTAGE_DEBUG=1 for debug mode

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index d7fbe4390..cc0aa46e9 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -555,6 +555,9 @@ class ResolverPlayground(object):
 			"PORTAGE_REPOSITORIES": "\n".join("[%s]\n%s" % (repo_name, "\n".join("%s = %s" % (k, v) for k, v in repo_config.items())) for repo_name, repo_config in self._repositories.items())
 		}
 
+		if self.debug:
+			env["PORTAGE_DEBUG"] = "1"
+
 		trees = portage.create_trees(env=env, eprefix=self.eprefix,
 			**create_trees_kwargs)
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-04-11 23:50 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-04-11 23:50 UTC (permalink / raw
  To: gentoo-commits

commit:     f049604664bff616b297a5c022b6a8277542eac9
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 11 23:45:33 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Apr 11 23:50:21 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f0496046

Add test case to reproduce bug 717140

Bug: https://bugs.gentoo.org/717140
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../resolver/test_slot_operator_reverse_deps.py    | 94 +++++++++++++++++++++-
 1 file changed, 93 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py b/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
index ce614a4dc..5c5295510 100644
--- a/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
+++ b/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
@@ -1,4 +1,4 @@
-# Copyright 2016 Gentoo Foundation
+# Copyright 2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -111,3 +111,95 @@ class SlotOperatorReverseDepsTestCase(TestCase):
 					test_case.fail_msg)
 		finally:
 			playground.cleanup()
+
+
+class SlotOperatorReverseDepsLibGit2TestCase(TestCase):
+
+	def testSlotOperatorReverseDepsLibGit2(self):
+		"""
+		Test bug #717140, where the depgraph _slot_operator_update_probe
+		method ignored <dev-libs/libgit2-1:0= dependency and tried to
+		trigger an upgrade to dev-libs/libgit2-1.0.0-r1, ultimately
+		resulting in an undesirable downgrade to dev-libs/libgit2-0.28.4-r1.
+		"""
+		self.todo = True
+
+		ebuilds = {
+
+			"dev-libs/libgit2-0.28.4-r1" : {
+				"EAPI": "7",
+				"SLOT": "0/28",
+			},
+
+			"dev-libs/libgit2-0.99.0-r1" : {
+				"EAPI": "7",
+				"SLOT": "0/0.99",
+			},
+
+			"dev-libs/libgit2-1.0.0-r1" : {
+				"EAPI": "7",
+				"SLOT": "0/1.0",
+			},
+
+			"dev-libs/libgit2-glib-0.28.0.1" : {
+				"EAPI": "7",
+				"SLOT": "0",
+				"RDEPEND": "<dev-libs/libgit2-0.29:0= >=dev-libs/libgit2-0.26.0",
+			},
+
+			"dev-libs/libgit2-glib-0.99.0.1" : {
+				"EAPI": "7",
+				"SLOT": "0",
+				"RDEPEND": "<dev-libs/libgit2-1:0= >=dev-libs/libgit2-0.26.0",
+			},
+
+			"dev-vcs/gitg-3.32.1-r1" : {
+				"EAPI": "7",
+				"SLOT": "0",
+				"RDEPEND": "dev-libs/libgit2:= >=dev-libs/libgit2-glib-0.27 <dev-libs/libgit2-glib-1",
+			},
+		}
+
+		installed = {
+
+			"dev-libs/libgit2-0.99.0-r1" : {
+				"EAPI": "7",
+				"SLOT": "0/0.99",
+			},
+
+			"dev-libs/libgit2-glib-0.99.0.1" : {
+				"EAPI": "7",
+				"SLOT": "0",
+				"RDEPEND": "<dev-libs/libgit2-1:0/0.99= >=dev-libs/libgit2-0.26.0",
+			},
+
+			"dev-vcs/gitg-3.32.1-r1" : {
+				"EAPI": "7",
+				"SLOT": "0",
+				"RDEPEND": "dev-libs/libgit2:0/0.99= >=dev-libs/libgit2-glib-0.27 <dev-libs/libgit2-glib-1",
+			},
+
+		}
+
+		world = ["dev-vcs/gitg"]
+
+		test_cases = (
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {"--update": True, "--deep": True},
+				success = True,
+				#mergelist = ['dev-libs/libgit2-0.28.4-r1', 'dev-libs/libgit2-glib-0.99.0.1', 'dev-vcs/gitg-3.32.1-r1'],
+				mergelist = [],
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True,
+					test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-08-03 19:30 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-08-03 19:30 UTC (permalink / raw
  To: gentoo-commits

commit:     7cee10a961965b02db75833ac01bac7b2866756f
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 19:05:44 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 19:21:27 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7cee10a9

lib/portage/tests/resolver/test_merge_order.py: fix unused-import

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_merge_order.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/test_merge_order.py b/lib/portage/tests/resolver/test_merge_order.py
index 11752d71e..0003cd7d8 100644
--- a/lib/portage/tests/resolver/test_merge_order.py
+++ b/lib/portage/tests/resolver/test_merge_order.py
@@ -1,7 +1,6 @@
-# Copyright 2011-2019 Gentoo Authors
+# Copyright 2011-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-import portage
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
 	ResolverPlaygroundTestCase)


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-08-03 21:42 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-08-03 21:42 UTC (permalink / raw
  To: gentoo-commits

commit:     649727ede1079a700bf296061287298d28cc1f37
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 20:20:29 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 21:25:53 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=649727ed

lib/portage/tests/resolver/ResolverPlayground.py: drop unused-import

* Drop unused-import
* Slight refactor on imports

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index b15cc7f36..1e382002a 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -2,14 +2,14 @@
 # Distributed under the terms of the GNU General Public License v2
 
 import bz2
-from itertools import permutations
 import fnmatch
 import tempfile
 import portage
+
+from itertools import permutations
 from portage import os
 from portage import shutil
-from portage.const import (GLOBAL_CONFIG_PATH, PORTAGE_BASE_PATH,
-	USER_CONFIG_PATH)
+from portage.const import (GLOBAL_CONFIG_PATH, USER_CONFIG_PATH)
 from portage.process import find_binary
 from portage.dep import Atom, _repo_separator
 from portage.package.ebuild.config import config


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-08-03 23:28 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-08-03 23:28 UTC (permalink / raw
  To: gentoo-commits

commit:     a791a8a076690ef357939583de6478fe7dd1d3f6
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 22:43:04 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 23:28:00 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a791a8a0

lib/portage/tests/resolver/test_slot_collisions.py: fix whitespace

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_slot_collisions.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_slot_collisions.py b/lib/portage/tests/resolver/test_slot_collisions.py
index a15ebf4e0..d84ccfcef 100644
--- a/lib/portage/tests/resolver/test_slot_collisions.py
+++ b/lib/portage/tests/resolver/test_slot_collisions.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2019 Gentoo Authors
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -9,7 +9,7 @@ class SlotCollisionTestCase(TestCase):
 	def testSlotCollision(self):
 
 		ebuilds = {
-			"dev-libs/A-1": { "PDEPEND": "foo? ( dev-libs/B )", "IUSE": "foo" }, 
+			"dev-libs/A-1": { "PDEPEND": "foo? ( dev-libs/B )", "IUSE": "foo" },
 			"dev-libs/B-1": { "IUSE": "foo" },
 			"dev-libs/C-1": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
 			"dev-libs/D-1": { "DEPEND": "dev-libs/A[foo=] dev-libs/B[foo=]", "IUSE": "foo", "EAPI": 2 },
@@ -50,11 +50,11 @@ class SlotCollisionTestCase(TestCase):
 			"dev-lang/perl-5.16": {"SLOT": "0/5.16", "EAPI": "5"},
 			}
 		installed = {
-			"dev-libs/A-1": { "PDEPEND": "foo? ( dev-libs/B )", "IUSE": "foo", "USE": "foo" }, 
+			"dev-libs/A-1": { "PDEPEND": "foo? ( dev-libs/B )", "IUSE": "foo", "USE": "foo" },
 			"dev-libs/B-1": { "IUSE": "foo", "USE": "foo" },
 			"dev-libs/C-1": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
 			"dev-libs/D-1": { "DEPEND": "dev-libs/A[foo=] dev-libs/B[foo=]", "IUSE": "foo", "USE": "foo", "EAPI": 2 },
-			
+
 			"sci-libs/K-1": { "IUSE": "foo", "USE": "" },
 			"sci-libs/L-1": { "DEPEND": "sci-libs/K[-foo]" },
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-08-03 23:28 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-08-03 23:28 UTC (permalink / raw
  To: gentoo-commits

commit:     2351a19ed4406e944eaaa28b1926f70ae2825150
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 22:43:05 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 23:28:00 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2351a19e

lib/portage/tests/resolver/test_simple.py: fix whitespace

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_simple.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/test_simple.py b/lib/portage/tests/resolver/test_simple.py
index 324ffa2a6..b457b9d7a 100644
--- a/lib/portage/tests/resolver/test_simple.py
+++ b/lib/portage/tests/resolver/test_simple.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -8,7 +8,7 @@ class SimpleResolverTestCase(TestCase):
 
 	def testSimple(self):
 		ebuilds = {
-			"dev-libs/A-1": { "KEYWORDS": "x86" }, 
+			"dev-libs/A-1": { "KEYWORDS": "x86" },
 			"dev-libs/A-2": { "KEYWORDS": "~x86" },
 			"dev-libs/B-1.2": {},
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-08-03 23:28 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-08-03 23:28 UTC (permalink / raw
  To: gentoo-commits

commit:     e0ca1855bc60925f56f625737afe117317b3278c
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 22:43:21 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 23:28:04 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e0ca1855

lib/portage/tests/resolver/test_old_dep_chain_display.py: fix whitespace

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_old_dep_chain_display.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/portage/tests/resolver/test_old_dep_chain_display.py b/lib/portage/tests/resolver/test_old_dep_chain_display.py
index 8aedf5999..7ab21e8e9 100644
--- a/lib/portage/tests/resolver/test_old_dep_chain_display.py
+++ b/lib/portage/tests/resolver/test_old_dep_chain_display.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -8,8 +8,8 @@ class OldDepChainDisplayTestCase(TestCase):
 
 	def testOldDepChainDisplay(self):
 		ebuilds = {
-			"dev-libs/A-1": { "DEPEND": "foo? ( dev-libs/B[-bar] )", "IUSE": "+foo", "EAPI": "2" }, 
-			"dev-libs/A-2": { "DEPEND": "foo? ( dev-libs/C )", "IUSE": "+foo", "EAPI": "1" }, 
+			"dev-libs/A-1": { "DEPEND": "foo? ( dev-libs/B[-bar] )", "IUSE": "+foo", "EAPI": "2" },
+			"dev-libs/A-2": { "DEPEND": "foo? ( dev-libs/C )", "IUSE": "+foo", "EAPI": "1" },
 			"dev-libs/B-1": { "IUSE": "bar", "DEPEND": "!bar? ( dev-libs/D[-baz] )", "EAPI": "2" },
 			"dev-libs/C-1": { "KEYWORDS": "~x86" },
 			"dev-libs/D-1": { "IUSE": "+baz", "EAPI": "1" },


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-08-30 22:39 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-08-30 22:39 UTC (permalink / raw
  To: gentoo-commits

commit:     8b9345976c95ff41c7f075f7917d498f77d7d155
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 30 22:18:35 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Aug 30 22:38:42 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=8b934597

test_slot_conflict_rebuild: Add dev-lang/go case for bug 439688

Demonstrate this unwanted dev-lang/go rebuild triggered by a missed
update due to a slot conflict:

[ebuild   R    ] dev-lang/go-1.14.7

WARNING: One or more updates/rebuilds have been skipped due to a dependency conflict:

dev-lang/go:0

  (dev-lang/go-1.15:0/1.15::test_repo, ebuild scheduled for merge) USE="" conflicts with
    =dev-lang/go-1.14* required by (net-p2p/syncthing-1.3.4-r1:0/0::test_repo, installed) USE=""
    ^            ^^^^^

Bug: https://bugs.gentoo.org/439688
Bug: https://bugs.gentoo.org/739648
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../tests/resolver/test_slot_conflict_rebuild.py   | 64 +++++++++++++++++++++-
 1 file changed, 63 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_slot_conflict_rebuild.py b/lib/portage/tests/resolver/test_slot_conflict_rebuild.py
index 95b6396ba..b3bcf44d0 100644
--- a/lib/portage/tests/resolver/test_slot_conflict_rebuild.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_rebuild.py
@@ -1,4 +1,4 @@
-# Copyright 2012-2014 Gentoo Foundation
+# Copyright 2012-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -453,3 +453,65 @@ class SlotConflictRebuildTestCase(TestCase):
 				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
 		finally:
 			playground.cleanup()
+
+class SlotConflictRebuildGolangTestCase(TestCase):
+
+	def testSlotConflictRebuildGolang(self):
+		self.todo = True
+
+		ebuilds = {
+
+			"dev-lang/go-1.14.7" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.7"
+			},
+
+			"dev-lang/go-1.15" : {
+				"EAPI": "7",
+				"SLOT": "0/1.15"
+			},
+
+			"net-p2p/syncthing-1.3.4-r1" : {
+				"EAPI": "7",
+				"BDEPEND": "=dev-lang/go-1.14* >=dev-lang/go-1.12"
+			},
+
+		}
+
+		installed = {
+
+			"dev-lang/go-1.14.7" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.7"
+			},
+
+			"net-p2p/syncthing-1.3.4-r1" : {
+				"EAPI": "7",
+				"BDEPEND": "=dev-lang/go-1.14* >=dev-lang/go-1.12"
+			},
+
+		}
+
+		world = ["dev-lang/go", "net-p2p/syncthing"]
+
+		test_cases = (
+
+			# Demonstrate an unwanted dev-lang/go rebuild triggered by a missed
+			# update due to a slot conflict (bug #439688).
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {"--update": True, "--deep": True},
+				success = True,
+				mergelist = []),
+
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-09-19 20:28 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-09-19 20:28 UTC (permalink / raw
  To: gentoo-commits

commit:     302a93e5857ff56d43ee0b9dabee9f00d907a8ad
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 13 01:42:30 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Sep 19 20:22:41 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=302a93e5

Add unit test demonstrating excessive backtracking for bug 743115

Due to excessive backtracking, this test case currently needs
at least --backtrack=21 to succeed.

Bug: https://bugs.gentoo.org/743115
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../resolver/test_slot_operator_missed_update.py   | 112 +++++++++++++++++++++
 1 file changed, 112 insertions(+)

diff --git a/lib/portage/tests/resolver/test_slot_operator_missed_update.py b/lib/portage/tests/resolver/test_slot_operator_missed_update.py
new file mode 100644
index 000000000..fce012f62
--- /dev/null
+++ b/lib/portage/tests/resolver/test_slot_operator_missed_update.py
@@ -0,0 +1,112 @@
+# Copyright 2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+	ResolverPlayground,
+	ResolverPlaygroundTestCase,
+)
+
+
+class BacktrackMissedUpdateTestCase(TestCase):
+	def testBacktrackMissedUpdateTestCase(self):
+
+		ebuilds = {
+			"dev-lang/python-2.7.18-r2": {
+				"EAPI": "7",
+				"SLOT": "2.7",
+			},
+			"dev-python/pypy3-7.3.2_rc2_p37-r1": {
+				"EAPI": "7",
+				"SLOT": "0/pypy37-pp73",
+			},
+			"dev-python/pypy3-7.3.1-r3": {
+				"EAPI": "7",
+				"SLOT": "0/pypy36-pp73",
+			},
+			"dev-python/setuptools-50.3.0": {
+				"EAPI": "7",
+				"IUSE": "python_targets_pypy3",
+				"RDEPEND": "python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+			"dev-python/setuptools-50.2.0": {
+				"EAPI": "7",
+				"IUSE": "python_targets_pypy3",
+				"RDEPEND": "python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+			"dev-python/setuptools-50.1.0": {
+				"EAPI": "7",
+				"IUSE": "python_targets_pypy3",
+				"RDEPEND": "python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+			"dev-python/setuptools-49.6.0": {
+				"EAPI": "7",
+				"IUSE": "python_targets_pypy3",
+				"RDEPEND": "python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+			"dev-python/setuptools-46.4.0-r2": {
+				"EAPI": "7",
+				"IUSE": "+python_targets_pypy3 +python_targets_python2_7",
+				"RDEPEND": "python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+			"dev-lang/python-2.7.18-r2": {
+				"EAPI": "7",
+				"IUSE": "+python_targets_pypy3 +python_targets_python2_7",
+				"RDEPEND": "python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+			"dev-vcs/mercurial-5.5.1": {
+				"EAPI": "7",
+				"IUSE": "+python_targets_pypy3 +python_targets_python2_7",
+				"RDEPEND": "dev-python/setuptools[python_targets_pypy3?,python_targets_python2_7?] python_targets_python2_7? ( dev-lang/python:2.7 ) python_targets_pypy3? ( dev-python/pypy3:= )",
+			},
+		}
+
+		installed = {
+			"dev-lang/python-2.7.18-r2": {
+				"EAPI": "7",
+				"SLOT": "2.7",
+			},
+			"dev-python/pypy3-7.3.1-r3": {
+				"EAPI": "7",
+				"SLOT": "0/pypy36-pp73",
+			},
+			"dev-python/setuptools-46.4.0-r2": {
+				"EAPI": "7",
+				"IUSE": "+python_targets_pypy3 +python_targets_python2_7",
+				"USE": "python_targets_pypy3 python_targets_python2_7",
+				"RDEPEND": "dev-python/pypy3:0/pypy36-pp73=",
+			},
+			"dev-vcs/mercurial-5.5.1": {
+				"EAPI": "7",
+				"IUSE": "+python_targets_pypy3 +python_targets_python2_7",
+				"USE": "python_targets_pypy3 python_targets_python2_7",
+				"RDEPEND": "dev-python/setuptools[python_targets_pypy3,python_targets_python2_7] dev-python/pypy3:0/pypy36-pp73=",
+			},
+		}
+
+		world = ["dev-vcs/mercurial"]
+
+		test_cases = (
+			# Bug 743115: missed updates trigger excessive backtracking
+			ResolverPlaygroundTestCase(
+				[">=dev-python/pypy3-7.3.2_rc", "@world"],
+				options={"--update": True, "--deep": True, "--backtrack": 25},
+				success=True,
+				mergelist=[
+					"dev-python/pypy3-7.3.2_rc2_p37-r1",
+					"dev-python/setuptools-46.4.0-r2",
+					"dev-vcs/mercurial-5.5.1",
+				],
+			),
+		)
+
+		playground = ResolverPlayground(
+			ebuilds=ebuilds, installed=installed, world=world, debug=False
+		)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-11-15  5:56 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-11-15  5:56 UTC (permalink / raw
  To: gentoo-commits

commit:     e9c0ef7609e8e2068af8c9c7138f1a2dc22fcfb0
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 15 04:25:22 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Nov 15 05:54:37 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e9c0ef76

Add slot operator := BDEPEND unit tests for bug 752153

Test these two distinct cases:

1) Regular dev-lang/go upgrade, with rebuild of packages that
have dev-lang/go:= in BDEPEND.

2) Rebuild of packages that have dev-lang/go:= in BDEPEND, after
the built slot operator deps have already been broken by an
earlier dev-lang/go upgrade.

Bug: https://bugs.gentoo.org/752153
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../tests/resolver/test_slot_operator_bdeps.py     | 209 +++++++++++++++++++++
 1 file changed, 209 insertions(+)

diff --git a/lib/portage/tests/resolver/test_slot_operator_bdeps.py b/lib/portage/tests/resolver/test_slot_operator_bdeps.py
new file mode 100644
index 000000000..f5b1bce1b
--- /dev/null
+++ b/lib/portage/tests/resolver/test_slot_operator_bdeps.py
@@ -0,0 +1,209 @@
+# Copyright 2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
+	ResolverPlaygroundTestCase)
+
+class SlotOperatorBdependTestCase(TestCase):
+
+	def testSlotOperatorBdepend(self):
+		"""
+		Test regular dev-lang/go upgrade, with rebuild of packages
+		that have dev-lang/go:= in BDEPEND.
+		"""
+
+		ebuilds = {
+			"app-emulation/buildah-1.16.1":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:=",
+			},
+
+			"app-emulation/libpod-2.1.0":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:=",
+			},
+
+			"dev-lang/go-1.15.5":{
+				"EAPI": "7",
+				"SLOT": "0/1.15.5"
+			},
+
+			"dev-lang/go-1.14.12" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.12"
+			},
+		}
+
+		binpkgs = {
+			"app-emulation/buildah-1.16.1":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"app-emulation/libpod-2.1.0":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"dev-lang/go-1.14.12" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.12"
+			},
+		}
+
+		installed = {
+			"app-emulation/buildah-1.16.1":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"app-emulation/libpod-2.1.0":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"dev-lang/go-1.14.12" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.12"
+			},
+		}
+
+		world = ["app-emulation/buildah", "app-emulation/libpod"]
+
+		test_cases = (
+
+			# Test rebuild triggered by slot operator := dependency in BDEPEND.
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {
+					"--update": True,
+					"--deep": True,
+				},
+				success = True,
+				mergelist = ["dev-lang/go-1.15.5", "app-emulation/buildah-1.16.1", "app-emulation/libpod-2.1.0"]
+			),
+
+			# Test the above case with --usepkg --with-bdeps=y. It should not use the
+			# binary packages because rebuild is needed.
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {
+					"--usepkg": True,
+					"--with-bdeps": "y",
+					"--update": True,
+					"--deep": True,
+				},
+				success = True,
+				mergelist = ["dev-lang/go-1.15.5", "app-emulation/buildah-1.16.1", "app-emulation/libpod-2.1.0"]
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, binpkgs=binpkgs,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()
+
+	def testSlotOperatorBdependAfterBreakage(self):
+		"""
+		Test rebuild of packages that have dev-lang/go:= in BDEPEND,
+		after the built slot operator deps have already been broken
+		by an earlier dev-lang/go upgrade.
+		"""
+
+		ebuilds = {
+			"app-emulation/buildah-1.16.1":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:=",
+			},
+
+			"app-emulation/libpod-2.1.0":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:=",
+			},
+
+			"dev-lang/go-1.15.5":{
+				"EAPI": "7",
+				"SLOT": "0/1.15.5"
+			},
+
+			"dev-lang/go-1.14.12" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.12"
+			},
+		}
+
+		binpkgs = {
+			"app-emulation/buildah-1.16.1":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"app-emulation/libpod-2.1.0":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"dev-lang/go-1.14.12" : {
+				"EAPI": "7",
+				"SLOT": "0/1.14.12"
+			},
+			"dev-lang/go-1.15.5" : {
+				"EAPI": "7",
+				"SLOT": "0/1.15.5"
+			},
+		}
+
+		installed = {
+			"app-emulation/buildah-1.16.1":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"app-emulation/libpod-2.1.0":{
+				"EAPI": "7",
+				"BDEPEND": "dev-lang/go:0/1.14.12=",
+			},
+			"dev-lang/go-1.15.5" : {
+				"EAPI": "7",
+				"SLOT": "0/1.15.5"
+			},
+		}
+
+		world = ["app-emulation/buildah", "app-emulation/libpod"]
+
+		test_cases = (
+
+			# Test rebuild triggered by slot operator := dependency in BDEPEND.
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {
+					"--update": True,
+					"--deep": True,
+				},
+				success = True,
+				mergelist = ["app-emulation/buildah-1.16.1", "app-emulation/libpod-2.1.0"]
+			),
+
+			# Test the above case with --usepkg --with-bdeps=y. It should not use the
+			# binary packages because rebuild is needed.
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {
+					"--usepkg": True,
+					"--with-bdeps": "y",
+					"--update": True,
+					"--deep": True,
+				},
+				success = True,
+				mergelist = ["app-emulation/buildah-1.16.1", "app-emulation/libpod-2.1.0"]
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, binpkgs=binpkgs,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2020-12-02 17:33 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2020-12-02 17:33 UTC (permalink / raw
  To: gentoo-commits

commit:     c1671591dc2b46038c871f9038ff4cb46dccc160
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Dec  2 17:28:45 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Dec  2 17:32:36 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c1671591

MergeOrderTestCase: fix x11-drivers/xf86-video-fbdev slot operator deps

The real ebuild has the x11-base/xorg-server:= dependency in RDEPEND
rather than DEPEND.

Fixes: 07a604537e74 ("find_smallest_cycle: don't merge satisfied PDEPEND too early")
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_merge_order.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_merge_order.py b/lib/portage/tests/resolver/test_merge_order.py
index 0510a0636..db063ed9d 100644
--- a/lib/portage/tests/resolver/test_merge_order.py
+++ b/lib/portage/tests/resolver/test_merge_order.py
@@ -231,8 +231,8 @@ class MergeOrderTestCase(TestCase):
 			},
 			"x11-drivers/xf86-video-fbdev-0.5.0-r1": {
 				"EAPI": "7",
-				"DEPEND": "x11-base/xorg-server:=",
-				"RDEPEND": "x11-base/xorg-server",
+				"DEPEND": "x11-base/xorg-server",
+				"RDEPEND": "x11-base/xorg-server:=",
 			}
 		}
 
@@ -325,8 +325,8 @@ class MergeOrderTestCase(TestCase):
 			},
 			"x11-drivers/xf86-video-fbdev-0.5.0-r1": {
 				"EAPI": "7",
-				"DEPEND": "x11-base/xorg-server:0/1.14.1=",
-				"RDEPEND": "x11-base/xorg-server",
+				"DEPEND": "x11-base/xorg-server",
+				"RDEPEND": "x11-base/xorg-server:0/1.14.1=",
 			}
 		}
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-01-11  3:40 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-01-11  3:40 UTC (permalink / raw
  To: gentoo-commits

commit:     9b6417f527aa98742a51d7859051342b6fb1383f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Jan 11 01:57:44 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Jan 11 03:04:28 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=9b6417f5

Add unit test demonstrating bug 764764

Bug: https://bugs.gentoo.org/764764
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../resolver/test_slot_operator_reverse_deps.py    | 98 +++++++++++++++++++++-
 1 file changed, 97 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py b/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
index 6641e9987..6e7214043 100644
--- a/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
+++ b/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
@@ -1,4 +1,4 @@
-# Copyright 2016-2020 Gentoo Authors
+# Copyright 2016-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -202,3 +202,99 @@ class SlotOperatorReverseDepsLibGit2TestCase(TestCase):
 		finally:
 			playground.debug = False
 			playground.cleanup()
+
+
+class SlotOperatorReverseDepsVirtualTestCase(TestCase):
+
+	def testSlotOperatorReverseDepsVirtual(self):
+		"""
+		Demonstrate bug #764764, where slot operator rebuilds were
+		not triggered for reverse deps of virtual/dist-kernel.
+		"""
+
+		ebuilds = {
+
+			"app-emulation/virtualbox-modules-6.1.16-r1": {
+				"EAPI": "7",
+				"DEPEND": "virtual/dist-kernel",
+				"RDEPEND": "virtual/dist-kernel:=",
+			},
+
+			"sys-kernel/gentoo-kernel-5.10.6": {
+				"EAPI": "7",
+				"SLOT": "5.10.6",
+			},
+
+			"sys-kernel/gentoo-kernel-5.10.5": {
+				"EAPI": "7",
+				"SLOT": "5.10.5",
+			},
+
+			"virtual/dist-kernel-5.10.5" : {
+				"EAPI": "7",
+				"SLOT": "0/5.10.5",
+				"RDEPEND": "~sys-kernel/gentoo-kernel-5.10.5",
+			},
+
+			"virtual/dist-kernel-5.10.6" : {
+				"EAPI": "7",
+				"SLOT": "0/5.10.6",
+				"RDEPEND": "~sys-kernel/gentoo-kernel-5.10.6"
+			},
+
+			"x11-drivers/nvidia-drivers-460.32.03" : {
+				"EAPI": "7",
+				"DEPEND": "virtual/dist-kernel",
+				"RDEPEND": "virtual/dist-kernel:=",
+			},
+
+		}
+
+		installed = {
+
+			"app-emulation/virtualbox-modules-6.1.16-r1": {
+				"EAPI": "7",
+				"DEPEND": "virtual/dist-kernel",
+				"RDEPEND": "virtual/dist-kernel:0/5.10.5=",
+			},
+
+			"sys-kernel/gentoo-kernel-5.10.5": {
+				"EAPI": "7",
+				"SLOT": "5.10.5",
+			},
+
+			"virtual/dist-kernel-5.10.5" : {
+				"EAPI": "7",
+				"SLOT": "0/5.10.5",
+				"RDEPEND": "~sys-kernel/gentoo-kernel-5.10.5"
+			},
+
+			"x11-drivers/nvidia-drivers-460.32.03" : {
+				"EAPI": "7",
+				"DEPEND": "virtual/dist-kernel",
+				"RDEPEND": "virtual/dist-kernel:0/5.10.5="
+			},
+
+		}
+
+		world = ["app-emulation/virtualbox-modules", "x11-drivers/nvidia-drivers"]
+
+		test_cases = (
+			ResolverPlaygroundTestCase(
+				["@world"],
+				options = {"--update": True, "--deep": True},
+				success = True,
+				mergelist = []
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds,
+			installed=installed, world=world, debug=False)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True,
+					test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-02-23 22:39 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-02-23 22:39 UTC (permalink / raw
  To: gentoo-commits

commit:     f5a58b3f2e2adc7f9d2794d4e91d44ec1419b56a
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 23 22:14:30 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Feb 23 22:37:34 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f5a58b3f

Add USE conflict unit test for bug 615824

Test bug 615824, where an automask USE change results in
a conflict which is not reported. In order to install L,
foo must be disabled for both K and M, but autounmask
disables foo for K and leaves it enabled for M:

[ebuild  N     ] sci-libs/K-1  USE="-foo"
[ebuild  N     ] sci-libs/L-1
[ebuild  N     ] sci-libs/M-1  USE="foo"

The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by sci-libs/L-1::test_repo
# required by sci-libs/L (argument)
>=sci-libs/K-1 -foo

Bug: https://bugs.gentoo.org/615824
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../resolver/test_autounmask_use_slot_conflict.py  | 51 ++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py b/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py
new file mode 100644
index 000000000..2e090d45e
--- /dev/null
+++ b/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py
@@ -0,0 +1,51 @@
+# Copyright 2017-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+	ResolverPlayground,
+	ResolverPlaygroundTestCase,
+)
+
+
+class AutounmaskUseSlotConflictTestCase(TestCase):
+	def testAutounmaskUseSlotConflict(self):
+		self.todo = True
+
+		ebuilds = {
+			"sci-libs/K-1": {"IUSE": "+foo", "EAPI": 1},
+			"sci-libs/L-1": {"DEPEND": "sci-libs/K[-foo]", "EAPI": 2},
+			"sci-libs/M-1": {"DEPEND": "sci-libs/K[foo=]", "IUSE": "+foo", "EAPI": 2},
+		}
+
+		installed = {}
+
+		test_cases = (
+			# Test bug 615824, where an automask USE change results in
+			# a conflict which is not reported. In order to install L,
+			# foo must be disabled for both K and M, but autounmask
+			# disables foo for K and leaves it enabled for M.
+			ResolverPlaygroundTestCase(
+				["sci-libs/L", "sci-libs/M"],
+				options={"--backtrack": 0},
+				success=False,
+				mergelist=[
+					"sci-libs/L-1",
+					"sci-libs/M-1",
+					"sci-libs/K-1",
+				],
+				ignore_mergelist_order=True,
+				slot_collision_solutions=[
+					{"sci-libs/K-1": {"foo": False}, "sci-libs/M-1": {"foo": False}}
+				],
+			),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, installed=installed)
+		try:
+			for test_case in test_cases:
+				playground.run_TestCase(test_case)
+				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+		finally:
+			playground.debug = False
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-03-01  6:43 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-03-01  6:43 UTC (permalink / raw
  To: gentoo-commits

commit:     7a683809e4f7f61590a770df7f79cfa633a18d8e
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Mar  1 06:36:29 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Mar  1 06:40:26 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7a683809

Add unit test demonstrating --autounmask-use / --binpkg-respect-use=y conflict

Bug: https://bugs.gentoo.org/773469
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_useflags.py | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_useflags.py b/lib/portage/tests/resolver/test_useflags.py
index 0a5f3b3ff..7439dc306 100644
--- a/lib/portage/tests/resolver/test_useflags.py
+++ b/lib/portage/tests/resolver/test_useflags.py
@@ -10,17 +10,24 @@ class UseFlagsTestCase(TestCase):
 		ebuilds = {
 			"dev-libs/A-1": { "IUSE": "X", },
 			"dev-libs/B-1": { "IUSE": "X Y", },
+			"dev-libs/C-1": { "IUSE": "abi_x86_32", "EAPI": "7" },
+			"dev-libs/D-1": { "IUSE": "abi_x86_32", "EAPI": "7", "RDEPEND": "dev-libs/C[abi_x86_32?]" },
 			}
 
 		installed = {
 			"dev-libs/A-1": { "IUSE": "X", },
 			"dev-libs/B-1": { "IUSE": "X", },
+			"dev-libs/C-1": { "IUSE": "abi_x86_32", "USE": "abi_x86_32", "EAPI": "7" },
+			"dev-libs/D-1": { "IUSE": "abi_x86_32", "USE": "abi_x86_32", "EAPI": "7", "RDEPEND": "dev-libs/C[abi_x86_32]" },
 			}
 
 		binpkgs = installed
 
 		user_config = {
-			"package.use": ( "dev-libs/A X", ),
+			"package.use": (
+				"dev-libs/A X",
+				"dev-libs/D abi_x86_32",
+			),
 			"use.force": ( "Y", ),
 		}
 
@@ -39,6 +46,15 @@ class UseFlagsTestCase(TestCase):
 				success = True,
 				mergelist = ["dev-libs/A-1"]),
 
+			# Bug 773469 - Demonstrate --autounmask-use interference with --binpkg-respect-use=y
+			ResolverPlaygroundTestCase(
+				["dev-libs/C", "dev-libs/D"],
+				options={"--usepkg": True, "--binpkg-respect-use": "y"},
+				success=False,
+				use_changes={"dev-libs/C-1": {"abi_x86_32": True}},
+				mergelist=["dev-libs/C-1", "[binary]dev-libs/D-1"],
+			),
+
 			#--binpkg-respect-use=n: use binpkgs with different use flags
 			ResolverPlaygroundTestCase(
 				["dev-libs/A"],


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-03-01  8:56 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-03-01  8:56 UTC (permalink / raw
  To: gentoo-commits

commit:     2c322a4274fafcc04423baecd6880737e1639168
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Mar  1 07:58:33 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Mar  1 08:55:18 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2c322a42

Include --autounmask-backtrack in unit test for bug 773469

The --autounmask-backtrack option is needed in order to trigger
the --binpkg-respect-use=y behavior that appears confusingly
similar to --binpkg-respect-use=n behavior.

Bug: https://bugs.gentoo.org/773469
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_useflags.py | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/test_useflags.py b/lib/portage/tests/resolver/test_useflags.py
index 7439dc306..d66da0866 100644
--- a/lib/portage/tests/resolver/test_useflags.py
+++ b/lib/portage/tests/resolver/test_useflags.py
@@ -46,13 +46,15 @@ class UseFlagsTestCase(TestCase):
 				success = True,
 				mergelist = ["dev-libs/A-1"]),
 
-			# Bug 773469 - Demonstrate --autounmask-use interference with --binpkg-respect-use=y
+			# In the unit test case for bug 773469, the --autounmask-backtrack option
+			# is needed in order to trigger the --binpkg-respect-use=y behavior that
+			# appears confusingly similar to --binpkg-respect-use=n behavior.
 			ResolverPlaygroundTestCase(
 				["dev-libs/C", "dev-libs/D"],
-				options={"--usepkg": True, "--binpkg-respect-use": "y"},
-				success=False,
+				options={"--usepkg": True, "--binpkg-respect-use": "y", "--autounmask-backtrack": "y"},
+				success=True,
 				use_changes={"dev-libs/C-1": {"abi_x86_32": True}},
-				mergelist=["dev-libs/C-1", "[binary]dev-libs/D-1"],
+				mergelist=["[binary]dev-libs/C-1", "[binary]dev-libs/D-1"],
 			),
 
 			#--binpkg-respect-use=n: use binpkgs with different use flags


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-03-06  9:53 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-03-06  9:53 UTC (permalink / raw
  To: gentoo-commits

commit:     a607bed25cb7d9cad7ef9533879b5ab93c94277c
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Mar  6 09:51:33 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Mar  6 09:52:52 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a607bed2

Remove unit tests for deprecated EAPI-progress

Fixes: 67cf9c2b0504 ("Mark EAPIs 4-python and 5-progress as deprecated")
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 .../tests/resolver/test_unpack_dependencies.py     |  65 ----------
 lib/portage/tests/resolver/test_use_aliases.py     | 131 ---------------------
 2 files changed, 196 deletions(-)

diff --git a/lib/portage/tests/resolver/test_unpack_dependencies.py b/lib/portage/tests/resolver/test_unpack_dependencies.py
deleted file mode 100644
index cfceff4b1..000000000
--- a/lib/portage/tests/resolver/test_unpack_dependencies.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from portage.tests import TestCase
-from portage.tests.resolver.ResolverPlayground import ResolverPlayground, ResolverPlaygroundTestCase
-
-class UnpackDependenciesTestCase(TestCase):
-	def testUnpackDependencies(self):
-		distfiles = {
-			"A-1.tar.gz": b"binary\0content",
-			"B-1.TAR.XZ": b"binary\0content",
-			"B-docs-1.tar.bz2": b"binary\0content",
-			"C-1.TAR.XZ": b"binary\0content",
-			"C-docs-1.tar.bz2": b"binary\0content",
-		}
-
-		ebuilds = {
-			"dev-libs/A-1": {"SRC_URI": "A-1.tar.gz", "EAPI": "5-progress"},
-			"dev-libs/B-1": {"IUSE": "doc", "SRC_URI": "B-1.TAR.XZ doc? ( B-docs-1.tar.bz2 )", "EAPI": "5-progress"},
-			"dev-libs/C-1": {"IUSE": "doc", "SRC_URI": "C-1.TAR.XZ doc? ( C-docs-1.tar.bz2 )", "EAPI": "5-progress"},
-			"app-arch/bzip2-1": {},
-			"app-arch/gzip-1": {},
-			"app-arch/tar-1": {},
-			"app-arch/xz-utils-1": {},
-		}
-
-		repo_configs = {
-			"test_repo": {
-				"unpack_dependencies/5-progress": (
-					"tar.bz2 app-arch/tar app-arch/bzip2",
-					"tar.gz app-arch/tar app-arch/gzip",
-					"tar.xz app-arch/tar app-arch/xz-utils",
-				),
-			},
-		}
-
-		test_cases = (
-			ResolverPlaygroundTestCase(
-				["dev-libs/A"],
-				success = True,
-				ignore_mergelist_order = True,
-				mergelist = ["app-arch/tar-1", "app-arch/gzip-1", "dev-libs/A-1"]),
-			ResolverPlaygroundTestCase(
-				["dev-libs/B"],
-				success = True,
-				ignore_mergelist_order = True,
-				mergelist = ["app-arch/tar-1", "app-arch/xz-utils-1", "dev-libs/B-1"]),
-			ResolverPlaygroundTestCase(
-				["dev-libs/C"],
-				success = True,
-				ignore_mergelist_order = True,
-				mergelist = ["app-arch/tar-1", "app-arch/xz-utils-1", "app-arch/bzip2-1", "dev-libs/C-1"]),
-		)
-
-		user_config = {
-			"package.use": ("dev-libs/C doc",)
-		}
-
-		playground = ResolverPlayground(distfiles=distfiles, ebuilds=ebuilds, repo_configs=repo_configs, user_config=user_config)
-		try:
-			for test_case in test_cases:
-				playground.run_TestCase(test_case)
-				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
-		finally:
-			playground.cleanup()

diff --git a/lib/portage/tests/resolver/test_use_aliases.py b/lib/portage/tests/resolver/test_use_aliases.py
deleted file mode 100644
index 7c2debbb1..000000000
--- a/lib/portage/tests/resolver/test_use_aliases.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# Copyright 2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from portage.tests import TestCase
-from portage.tests.resolver.ResolverPlayground import ResolverPlayground, ResolverPlaygroundTestCase
-
-class UseAliasesTestCase(TestCase):
-	def testUseAliases(self):
-		ebuilds = {
-			"dev-libs/A-1": {"DEPEND": "dev-libs/K[x]", "RDEPEND": "dev-libs/K[x]", "EAPI": "5"},
-			"dev-libs/B-1": {"DEPEND": "dev-libs/L[x]", "RDEPEND": "dev-libs/L[x]", "EAPI": "5"},
-			"dev-libs/C-1": {"DEPEND": "dev-libs/M[xx]", "RDEPEND": "dev-libs/M[xx]", "EAPI": "5"},
-			"dev-libs/D-1": {"DEPEND": "dev-libs/N[-x]", "RDEPEND": "dev-libs/N[-x]", "EAPI": "5"},
-			"dev-libs/E-1": {"DEPEND": "dev-libs/O[-xx]", "RDEPEND": "dev-libs/O[-xx]", "EAPI": "5"},
-			"dev-libs/F-1": {"DEPEND": "dev-libs/P[-xx]", "RDEPEND": "dev-libs/P[-xx]", "EAPI": "5"},
-			"dev-libs/G-1": {"DEPEND": "dev-libs/Q[x-y]", "RDEPEND": "dev-libs/Q[x-y]", "EAPI": "5"},
-			"dev-libs/H-1": {"DEPEND": "=dev-libs/R-1*[yy]", "RDEPEND": "=dev-libs/R-1*[yy]", "EAPI": "5"},
-			"dev-libs/H-2": {"DEPEND": "=dev-libs/R-2*[yy]", "RDEPEND": "=dev-libs/R-2*[yy]", "EAPI": "5"},
-			"dev-libs/I-1": {"DEPEND": "dev-libs/S[y-z]", "RDEPEND": "dev-libs/S[y-z]", "EAPI": "5"},
-			"dev-libs/I-2": {"DEPEND": "dev-libs/S[y_z]", "RDEPEND": "dev-libs/S[y_z]", "EAPI": "5"},
-			"dev-libs/J-1": {"DEPEND": "dev-libs/T[x]", "RDEPEND": "dev-libs/T[x]", "EAPI": "5"},
-			"dev-libs/K-1": {"IUSE": "+x", "EAPI": "5"},
-			"dev-libs/K-2::repo1": {"IUSE": "+X", "EAPI": "5-progress"},
-			"dev-libs/L-1": {"IUSE": "+x", "EAPI": "5"},
-			"dev-libs/M-1::repo1": {"IUSE": "X", "EAPI": "5-progress"},
-			"dev-libs/N-1": {"IUSE": "x", "EAPI": "5"},
-			"dev-libs/N-2::repo1": {"IUSE": "X", "EAPI": "5-progress"},
-			"dev-libs/O-1": {"IUSE": "x", "EAPI": "5"},
-			"dev-libs/P-1::repo1": {"IUSE": "+X", "EAPI": "5-progress"},
-			"dev-libs/Q-1::repo2": {"IUSE": "X.Y", "EAPI": "5-progress"},
-			"dev-libs/R-1::repo1": {"IUSE": "Y", "EAPI": "5-progress"},
-			"dev-libs/R-2::repo1": {"IUSE": "y", "EAPI": "5-progress"},
-			"dev-libs/S-1::repo2": {"IUSE": "Y.Z", "EAPI": "5-progress"},
-			"dev-libs/S-2::repo2": {"IUSE": "Y.Z", "EAPI": "5-progress"},
-			"dev-libs/T-1::repo1": {"IUSE": "+X", "EAPI": "5"},
-		}
-
-		installed = {
-			"dev-libs/L-2::repo1": {"IUSE": "+X", "USE": "X", "EAPI": "5-progress"},
-			"dev-libs/O-2::repo1": {"IUSE": "X", "USE": "", "EAPI": "5-progress"},
-		}
-
-		repo_configs = {
-			"repo1": {
-				"use.aliases": ("X x xx",),
-				"package.use.aliases": (
-					"=dev-libs/R-1* Y yy",
-					"=dev-libs/R-2* y yy",
-				)
-			},
-			"repo2": {
-				"eapi": ("5-progress",),
-				"use.aliases": ("X.Y x-y",),
-				"package.use.aliases": (
-					"=dev-libs/S-1* Y.Z y-z",
-					"=dev-libs/S-2* Y.Z y_z",
-				),
-			},
-		}
-
-		test_cases = (
-			ResolverPlaygroundTestCase(
-				["dev-libs/A"],
-				success = True,
-				mergelist = ["dev-libs/K-2", "dev-libs/A-1"]),
-			ResolverPlaygroundTestCase(
-				["dev-libs/B"],
-				success = True,
-				mergelist = ["dev-libs/B-1"]),
-			ResolverPlaygroundTestCase(
-				["dev-libs/C"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/M-1", "dev-libs/C-1"],
-				use_changes = {"dev-libs/M-1": {"X": True}}),
-			ResolverPlaygroundTestCase(
-				["dev-libs/D"],
-				success = True,
-				mergelist = ["dev-libs/N-2", "dev-libs/D-1"]),
-			ResolverPlaygroundTestCase(
-				["dev-libs/E"],
-				success = True,
-				mergelist = ["dev-libs/E-1"]),
-			ResolverPlaygroundTestCase(
-				["dev-libs/F"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/P-1", "dev-libs/F-1"],
-				use_changes = {"dev-libs/P-1": {"X": False}}),
-			ResolverPlaygroundTestCase(
-				["dev-libs/G"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/Q-1", "dev-libs/G-1"],
-				use_changes = {"dev-libs/Q-1": {"X.Y": True}}),
-			ResolverPlaygroundTestCase(
-				["=dev-libs/H-1*"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/R-1", "dev-libs/H-1"],
-				use_changes = {"dev-libs/R-1": {"Y": True}}),
-			ResolverPlaygroundTestCase(
-				["=dev-libs/H-2*"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/R-2", "dev-libs/H-2"],
-				use_changes = {"dev-libs/R-2": {"y": True}}),
-			ResolverPlaygroundTestCase(
-				["=dev-libs/I-1*"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/S-1", "dev-libs/I-1"],
-				use_changes = {"dev-libs/S-1": {"Y.Z": True}}),
-			ResolverPlaygroundTestCase(
-				["=dev-libs/I-2*"],
-				options = {"--autounmask": True},
-				success = False,
-				mergelist = ["dev-libs/S-2", "dev-libs/I-2"],
-				use_changes = {"dev-libs/S-2": {"Y.Z": True}}),
-			ResolverPlaygroundTestCase(
-				["dev-libs/J"],
-				success = False),
-		)
-
-		playground = ResolverPlayground(ebuilds=ebuilds, installed=installed, repo_configs=repo_configs)
-		try:
-			for test_case in test_cases:
-				playground.run_TestCase(test_case)
-				self.assertEqual(test_case.test_success, True, test_case.fail_msg)
-		finally:
-			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-03-28  6:21 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-03-28  6:21 UTC (permalink / raw
  To: gentoo-commits

commit:     a86016cb736f0da83fa88031d66192f28edd3c96
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 28 06:12:13 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Mar 28 06:20:20 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a86016cb

ResolverPlayground: enable package.use.{force,mask}

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index 89feea47a..4575156f2 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Gentoo Authors
+# Copyright 2010-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import bz2
@@ -44,7 +44,13 @@ class ResolverPlayground:
 	config_files = frozenset(("eapi", "layout.conf", "make.conf", "modules", "package.accept_keywords",
 		"package.keywords", "package.license", "package.mask", "package.properties",
 		"package.provided", "packages",
-		"package.unmask", "package.use", "package.use.aliases", "package.use.stable.mask",
+		"package.unmask",
+		"package.use",
+		"package.use.aliases",
+		"package.use.force",
+		"package.use.mask",
+		"package.use.stable.force",
+		"package.use.stable.mask",
 		"soname.provided",
 		"unpack_dependencies", "use.aliases", "use.force", "use.mask", "layout.conf"))
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2021-05-24  6:33 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2021-05-24  6:33 UTC (permalink / raw
  To: gentoo-commits

commit:     8d442378bbb03b1c95595d0a21a012291245bda7
Author:     Felix Bier <flx.bier <AT> gmail <DOT> com>
AuthorDate: Tue May 11 21:46:49 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon May 24 06:22:38 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=8d442378

unmerge: Add tests for unmerge order

This commit adds unit tests for verifying the unmerge order
that is calculated by unmerge_display().

Signed-off-by: Felix Bier <felix.bier <AT> rohde-schwarz.com>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_unmerge_order.py | 179 +++++++++++++++++++++++
 1 file changed, 179 insertions(+)

diff --git a/lib/portage/tests/resolver/test_unmerge_order.py b/lib/portage/tests/resolver/test_unmerge_order.py
new file mode 100644
index 000000000..298bfd9ea
--- /dev/null
+++ b/lib/portage/tests/resolver/test_unmerge_order.py
@@ -0,0 +1,179 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import os
+
+from _emerge.unmerge import _unmerge_display
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import ResolverPlayground
+
+class _TestData:
+	def __init__(self, unmerge_files, expected_pkgmap):
+		self.unmerge_files = unmerge_files
+
+		# The pkgmap created by unmerge_display is a list where each entry is of the form
+		# {"selected": list(...), "omitted": set(...), "protected": set(...) }.
+		# To simplify the notation of the test data, we receive a list with entries of the form
+		# (s1,o1)
+		# The entries are then translated to the expected form:
+		# {"selected": s1, "omitted": o1, "protected": set()}
+		# The "protected" field is not relevant for testing ordering.
+		# The ordering of the "omitted" field is not relevant.
+		expand = lambda x: {"selected": x[0], "omitted": set(x[1]), "protected": set()}
+		self.expected_pkgmap = list(map(expand, expected_pkgmap))
+
+class UnmergeOrderTestCase(TestCase):
+
+	def testUnmergeOrder(self):
+		ebuilds = {
+			"c/x-1": {},
+
+			"c/y-2": {},
+			"c/y-3": {},
+
+			"c/z-4": {},
+			"c/z-5": {},
+			"c/z-6": {},
+
+			"c/zz-4": {},
+			"c/zz-5": {},
+			"c/zz-6": {},
+		}
+		installed = {
+			"c/x-1": {},
+
+			"c/y-2": {},
+
+			"c/z-4": {},
+			"c/z-5": {},
+			"c/z-6": {},
+
+			"c/zz-4": {},
+			"c/zz-5": {},
+			"c/zz-6": {},
+		}
+		test_cases = (
+
+			# cp = category/package
+			# cpv = category/package-version
+
+			# Single cpv atom, representing the only available instance of the cp.
+			# The pkgmap should contain exactly that cpv and no omitted packages.
+			_TestData(["c/x-1"], [ (["c/x-1"],[]) ]),
+
+			# Single cp atom. The pkgmap should contain the only available cpv to
+			# which the cp expands, no omitted packages.
+			_TestData(["c/x"], [ (["c/x-1"],[]) ]),
+
+			# Duplicate cpv atom, representing the only available instance of the cp.
+			# The pkgmap should contain the cpv with no omitted packages, and an empty
+			# entry representing the duplicate.
+			_TestData(["c/x-1", "c/x-1"], [ (["c/x-1"],[]), ([],[]) ]),
+
+			# Duplicate cp atom, representing the only available instance. The pkgmap
+			# should contain the only available cpv to which the cp expands, with no
+			# omitted packages, and a second empty entry representing the duplicate.
+			_TestData(["c/x", "c/x"], [ (["c/x-1"],[]), ([],[]) ]),
+
+			# Single cpv atom, representing one of the two available instances. The
+			# pkgmap should contain exactly that cpv. Since the other instance is not
+			# installed, there should be no omitted packages.
+			_TestData(["c/y-2"], [ (["c/y-2"],[]) ]),
+
+			# Single cp atom. The pkgmap should contain exactly the only installed
+			# instance and no omitted packages.
+			_TestData(["c/y"], [ (["c/y-2"],[]) ]),
+
+			# Single cpv atom, representing one of the three available instances.
+			# The pkgmap should contain exactly the cpv. Since all three instances
+			# are installed, the other two instances should be in the omitted packages.
+			_TestData(["c/z-4"], [ (["c/z-4"],["c/z-5","c/z-6"]) ]),
+
+			# Single cp atom. The pkgmap should contain all three installed instances.
+			# Since there are no other installed instances, there should be no omitted
+			# packages.
+			_TestData(["c/z"], [ (["c/z-4","c/z-5","c/z-6"],[]) ]),
+
+			# Two cpv atoms belonging to the same cp. The pkgmap should contain an
+			# entry for each cpv, in the same order. The third installed cpv belonging
+			# to the cp should be listed in the omitted section of each entry.
+			_TestData(["c/z-4","c/z-5"], [ (["c/z-4"],["c/z-6"]), (["c/z-5"],["c/z-6"]) ]),
+			_TestData(["c/z-5","c/z-4"], [ (["c/z-5"],["c/z-6"]), (["c/z-4"],["c/z-6"]) ]),
+
+			# Three cpv atoms belonging to the same cp. The pkgmap should contain an
+			# entry for each cpv, in the same order. Since there are no other instances
+			# of the cp, the omitted section of each entry should be empty.
+			_TestData(["c/z-4","c/z-5","c/z-6"], [ (["c/z-4"],[]), (["c/z-5"],[]), (["c/z-6"],[]) ]),
+			_TestData(["c/z-6","c/z-5","c/z-4"], [ (["c/z-6"],[]), (["c/z-5"],[]), (["c/z-4"],[]) ]),
+
+			# First a cp atom, then a cpv atom that is an instance of the cp. The
+			# pkgmap should contain an entry containing all installed cpv's that the cp
+			# expands to, in sorted order. It should then contain an empty entry
+			# representing the input cpv that is already covered by the expansion of
+			# the cp.
+			_TestData(["c/z","c/z-4"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]) ]),
+			_TestData(["c/z","c/z-6"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]) ]),
+
+			# First a cpv atom, then the cp to which the cpv belongs. The pkgmap
+			# should contain an entry for the first cpv, then an entry containing
+			# the remaining cpv's to which the cp expands.
+			_TestData(["c/z-4","c/z"], [ (["c/z-4"],[]), (["c/z-5","c/z-6"],[]) ]),
+			_TestData(["c/z-6","c/z"], [ (["c/z-6"],[]), (["c/z-4","c/z-5"],[]) ]),
+
+			# More mixed cp/cpv's. The cp should expand to all cpv's except those
+			# covered by a preceding cpv. The cpv's after the cp should result in empty
+			# entries, since they are already covered by the expansion of the cp.
+			_TestData(["c/z","c/z-4","c/z-5"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]), ([],[]) ]),
+			_TestData(["c/z","c/z-5","c/z-4"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]), ([],[]) ]),
+			_TestData(["c/z-4","c/z","c/z-5"], [ (["c/z-4"],[]), (["c/z-5","c/z-6"],[]), ([],[]) ]),
+			_TestData(["c/z-5","c/z","c/z-4"], [ (["c/z-5"],[]), (["c/z-4","c/z-6"],[]), ([],[]) ]),
+			_TestData(["c/z-4","c/z-5","c/z"], [ (["c/z-4"],[]), (["c/z-5"],[]), (["c/z-6"],[]) ]),
+			_TestData(["c/z-5","c/z-4","c/z"], [ (["c/z-5"],[]), (["c/z-4"],[]), (["c/z-6"],[]) ]),
+			_TestData(["c/z","c/z-4","c/z-5","c/z-6"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]), ([],[]), ([],[]) ]),
+			_TestData(["c/z","c/z-6","c/z-5","c/z-4"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]), ([],[]), ([],[]) ]),
+			_TestData(["c/z-4","c/z","c/z-5","c/z-6"], [ (["c/z-4"],[]), (["c/z-5","c/z-6"],[]), ([],[]), ([],[]) ]),
+			_TestData(["c/z-6","c/z","c/z-5","c/z-4"], [ (["c/z-6"],[]), (["c/z-4","c/z-5"],[]), ([],[]), ([],[]) ]),
+			_TestData(["c/z-4","c/z-5","c/z","c/z-6"], [ (["c/z-4"],[]), (["c/z-5"],[]), (["c/z-6"],[]), ([],[]) ]),
+			_TestData(["c/z-6","c/z-5","c/z","c/z-4"], [ (["c/z-6"],[]), (["c/z-5"],[]), (["c/z-4"],[]), ([],[]) ]),
+			_TestData(["c/z-4","c/z-5","c/z-6","c/z"], [ (["c/z-4"],[]), (["c/z-5"],[]), (["c/z-6"],[]), ([],[]) ]),
+			_TestData(["c/z-6","c/z-5","c/z-4","c/z"], [ (["c/z-6"],[]), (["c/z-5"],[]), (["c/z-4"],[]), ([],[]) ]),
+
+			# Two cpv that do not belong to the same cp. The pkgmap should contain an
+			# entry for each cpv, in the same order. If there are other installed
+			# instances of the cp to which the cpv belongs, they should be listed
+			# in the omitted section.
+			_TestData(["c/x-1","c/y-2"], [ (["c/x-1"],[]), (["c/y-2"],[]) ]),
+			_TestData(["c/y-2","c/x-1"], [ (["c/y-2"],[]), (["c/x-1"],[]) ]),
+			_TestData(["c/x-1","c/z-4"], [ (["c/x-1"],[]), (["c/z-4"],["c/z-5","c/z-6"]) ]),
+			_TestData(["c/z-4","c/x-1"], [ (["c/z-4"],["c/z-5","c/z-6"]), (["c/x-1"],[]) ]),
+
+			# cpv's/cp where some cpv's are not instances of the cp. The pkgmap should
+			# contain an entry for each in the same order, with the cp expanded
+			# to all installed instances.
+			_TestData(["c/x-1","c/z"], [ (["c/x-1"],[]), (["c/z-4","c/z-5","c/z-6"],[]) ]),
+			_TestData(["c/z","c/x-1"], [ (["c/z-4","c/z-5","c/z-6"],[]), (["c/x-1"],[]) ]),
+			_TestData(["c/x-1","c/z-4","c/z"], [ (["c/x-1"],[]), (["c/z-4"],[]), (["c/z-5","c/z-6"],[]) ]),
+			_TestData(["c/z-4","c/z","c/x-1"], [ (["c/z-4"],[]), (["c/z-5","c/z-6"],[]), (["c/x-1"],[]) ]),
+			_TestData(["c/x-1","c/z","c/z-4"], [ (["c/x-1"],[]), (["c/z-4","c/z-5","c/z-6"],[]), ([],[]) ]),
+			_TestData(["c/z","c/z-4","c/x-1"], [ (["c/z-4","c/z-5","c/z-6"],[]), ([],[]), (["c/x-1"],[]) ]),
+
+			# Two different cp's. The pkglist should contain an entry for each cp,
+			# in the same order, containing all cpv's that the cp's expands to.
+			_TestData(["c/z","c/zz"], [ (["c/z-4","c/z-5","c/z-6"],[]), (["c/zz-4","c/zz-5","c/zz-6"],[]) ]),
+			_TestData(["c/zz","c/z"], [ (["c/zz-4","c/zz-5","c/zz-6"],[]), (["c/z-4","c/z-5","c/z-6"],[]) ]),
+		)
+
+		playground = ResolverPlayground(ebuilds=ebuilds, installed=installed)
+
+		try:
+			for test_case in test_cases:
+				eroot = playground.settings['EROOT']
+				root_config = playground.trees[eroot]["root_config"]
+
+				res, pkgmap = _unmerge_display(root_config, [], "unmerge", test_case.unmerge_files, ordered=True)
+
+				self.assertEqual(res, os.EX_OK)
+				self.assertEqual(pkgmap, test_case.expected_pkgmap)
+		finally:
+			playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2022-02-14  0:14 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2022-02-14  0:14 UTC (permalink / raw
  To: gentoo-commits

commit:     041763a8b7cda7dac0b75aa4a85eb73f333b7e55
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 14 00:11:43 2022 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Feb 14 00:13:05 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=041763a8

Add unit test to reproduce bug 833014

Bug: https://bugs.gentoo.org/833014
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_installkernel.py | 111 +++++++++++++++++++++++
 1 file changed, 111 insertions(+)

diff --git a/lib/portage/tests/resolver/test_installkernel.py b/lib/portage/tests/resolver/test_installkernel.py
new file mode 100644
index 000000000..b73bbe5bb
--- /dev/null
+++ b/lib/portage/tests/resolver/test_installkernel.py
@@ -0,0 +1,111 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+    ResolverPlayground,
+    ResolverPlaygroundTestCase,
+)
+
+
+class InstallKernelTestCase(TestCase):
+    def testInstallKernel(self):
+        ebuilds = {
+            "sys-kernel/installkernel-systemd-boot-1": {
+                "EAPI": "8",
+                "RDEPEND": "!sys-kernel/installkernel-gentoo",
+            },
+            "sys-kernel/installkernel-gentoo-3": {
+                "EAPI": "8",
+                "RDEPEND": "!sys-kernel/installkernel-systemd-boot",
+            },
+            "sys-kernel/gentoo-kernel-5.15.23": {
+                "EAPI": "8",
+                "PDEPEND": ">=virtual/dist-kernel-5.15.23",
+                "RDEPEND": "|| ( sys-kernel/installkernel-gentoo sys-kernel/installkernel-systemd-boot )",
+            },
+            "sys-kernel/gentoo-kernel-bin-5.15.23": {
+                "EAPI": "8",
+                "PDEPEND": ">=virtual/dist-kernel-5.15.23",
+                "RDEPEND": "|| ( sys-kernel/installkernel-gentoo sys-kernel/installkernel-systemd-boot )",
+            },
+            "virtual/dist-kernel-5.15.23": {
+                "EAPI": "8",
+                "PDEPEND": "|| ( ~sys-kernel/gentoo-kernel-5.15.23 ~sys-kernel/gentoo-kernel-bin-5.15.23 )",
+            },
+        }
+
+        installed = {
+            "sys-kernel/installkernel-gentoo-3": {
+                "EAPI": "8",
+                "RDEPEND": "!sys-kernel/installkernel-systemd-boot",
+            },
+        }
+
+        test_cases = (
+            ResolverPlaygroundTestCase(
+                [
+                    "sys-kernel/installkernel-systemd-boot",
+                ],
+                ambiguous_merge_order=True,
+                success=True,
+                mergelist=[
+                    "sys-kernel/installkernel-systemd-boot-1",
+                    "[uninstall]sys-kernel/installkernel-gentoo-3",
+                    (
+                        "!sys-kernel/installkernel-gentoo",
+                        "!sys-kernel/installkernel-systemd-boot",
+                    ),
+                ],
+            ),
+            # Demonstrate bug 833014, where the calculation fails unless
+            # --update and --deep are specified.
+            ResolverPlaygroundTestCase(
+                [
+                    "sys-kernel/installkernel-systemd-boot",
+                    "sys-kernel/gentoo-kernel-bin",
+                ],
+                ambiguous_merge_order=True,
+                success=False,
+                mergelist=[
+                    "sys-kernel/installkernel-systemd-boot-1",
+                    "sys-kernel/gentoo-kernel-bin-5.15.23",
+                    "virtual/dist-kernel-5.15.23",
+                    (
+                        "!sys-kernel/installkernel-gentoo",
+                        "!sys-kernel/installkernel-systemd-boot",
+                    ),
+                ],
+            ),
+            ResolverPlaygroundTestCase(
+                [
+                    "sys-kernel/installkernel-systemd-boot",
+                    "sys-kernel/gentoo-kernel-bin",
+                ],
+                ambiguous_merge_order=True,
+                success=True,
+                options={"--deep": True, "--update": True},
+                mergelist=[
+                    "virtual/dist-kernel-5.15.23",
+                    "sys-kernel/installkernel-systemd-boot-1",
+                    "sys-kernel/gentoo-kernel-bin-5.15.23",
+                    "[uninstall]sys-kernel/installkernel-gentoo-3",
+                    (
+                        "!sys-kernel/installkernel-systemd-boot",
+                        "!sys-kernel/installkernel-gentoo",
+                    ),
+                ],
+            ),
+        )
+
+        playground = ResolverPlayground(
+            debug=False, ebuilds=ebuilds, installed=installed
+        )
+
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.debug = False
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2022-07-25 20:44 Mike Gilbert
  0 siblings, 0 replies; 56+ messages in thread
From: Mike Gilbert @ 2022-07-25 20:44 UTC (permalink / raw
  To: gentoo-commits

commit:     377af689e165db987981385a1f683444c9cdfcda
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 25 20:19:26 2022 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Mon Jul 25 20:19:26 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=377af689

ResolverPlayground: add "bash" to essential_binaries

Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index ec69ee068..788334f89 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -146,6 +146,7 @@ class ResolverPlayground:
             essential_binaries = (
                 "awk",
                 "basename",
+                "bash",
                 "bzip2",
                 "cat",
                 "chgrp",


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2022-07-25 22:01 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2022-07-25 22:01 UTC (permalink / raw
  To: gentoo-commits

commit:     44ea72efd7378cb26cb58cea7534449b1f4968c6
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 25 21:36:16 2022 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Jul 25 21:37:04 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=44ea72ef

ResolverPlayground: unconditionally setup essential_binaries

Closes: https://bugs.gentoo.org/861077
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index 788334f89..361de16af 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -129,8 +129,11 @@ class ResolverPlayground:
         """
 
         self.debug = debug
-        if eprefix is None:
-            self.eprefix = normalize_path(tempfile.mkdtemp())
+        if True:
+            if eprefix is None:
+                self.eprefix = normalize_path(tempfile.mkdtemp())
+            else:
+                self.eprefix = normalize_path(eprefix)
 
             # EPREFIX/bin is used by fake true_binaries. Real binaries goes into EPREFIX/usr/bin
             eubin = os.path.join(self.eprefix, "usr", "bin")
@@ -192,8 +195,6 @@ class ResolverPlayground:
                     os.symlink(path, os.path.join(eubin, x))
             finally:
                 os.environ["PATH"] = orig_path
-        else:
-            self.eprefix = normalize_path(eprefix)
 
         # Tests may override portage.const.EPREFIX in order to
         # simulate a prefix installation. It's reasonable to do


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-01-02 20:45 Mike Gilbert
  0 siblings, 0 replies; 56+ messages in thread
From: Mike Gilbert @ 2023-01-02 20:45 UTC (permalink / raw
  To: gentoo-commits

commit:     d1eedbb56386e2e7509c6140a238280aaf55eb17
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 31 22:52:25 2022 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Mon Jan  2 20:35:29 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=d1eedbb5

ResolverPlayground: include PATH in env passed to portage.create_trees()

Fixes failing tests after previous change to _doebuild_path.

Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/tests/resolver/ResolverPlayground.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index e43b12dd3..6cd10acda 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -686,6 +686,7 @@ class ResolverPlayground:
             create_trees_kwargs["target_root"] = self.target_root
 
         env = {
+            "PATH": os.environ["PATH"],
             "PORTAGE_REPOSITORIES": "\n".join(
                 "[%s]\n%s"
                 % (
@@ -693,7 +694,7 @@ class ResolverPlayground:
                     "\n".join("{} = {}".format(k, v) for k, v in repo_config.items()),
                 )
                 for repo_name, repo_config in self._repositories.items()
-            )
+            ),
         }
 
         if self.debug:


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-02-19 19:19 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-02-19 19:19 UTC (permalink / raw
  To: gentoo-commits

commit:     996babb5aa005edef4abb86de1dc585d630ac21d
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 18 13:26:47 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Feb 19 19:19:44 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=996babb5

tests: resolver: add basic BDEPEND + IDEPEND tests

These aren't very interesting but they at least check that
BDEPEND/IDEPEND affect dependency resolution.

I started to look at testing --with-bdeps but got into
the weeds.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/tests/resolver/test_eapi.py | 43 +++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/lib/portage/tests/resolver/test_eapi.py b/lib/portage/tests/resolver/test_eapi.py
index 1d6c58633..5d425ccdb 100644
--- a/lib/portage/tests/resolver/test_eapi.py
+++ b/lib/portage/tests/resolver/test_eapi.py
@@ -185,3 +185,46 @@ class EAPITestCase(TestCase):
                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
         finally:
             playground.cleanup()
+
+    def testBdepend(self):
+        ebuilds = {
+            "dev-libs/A-1.0": {"EAPI": 7},
+            "dev-libs/B-1.0": {"EAPI": 7, "BDEPEND": "dev-libs/A"},
+        }
+
+        # Verify that BDEPEND is considered at all.
+        test_case = ResolverPlaygroundTestCase(
+            ["=dev-libs/B-1.0"],
+            success=True,
+            mergelist=["dev-libs/A-1.0", "dev-libs/B-1.0"],
+        )
+
+        playground = ResolverPlayground(ebuilds=ebuilds, debug=True)
+        try:
+            playground.run_TestCase(test_case)
+            self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()
+
+    def testIdepend(self):
+        ebuilds = {
+            "dev-libs/A-1.0": {"EAPI": 8},
+            "dev-libs/B-1.0": {"EAPI": 8, "IDEPEND": "dev-libs/A"},
+        }
+
+        test_cases = (
+            # Verify that IDEPEND is considered at all.
+            ResolverPlaygroundTestCase(
+                ["=dev-libs/B-1.0"],
+                success=True,
+                mergelist=["dev-libs/A-1.0", "dev-libs/B-1.0"],
+            ),
+        )
+
+        playground = ResolverPlayground(ebuilds=ebuilds)
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-05-26 15:45 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-05-26 15:45 UTC (permalink / raw
  To: gentoo-commits

commit:     43f6dc219035bacd1bb3013c457fd3ea64f2d0d8
Author:     David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Mon May  1 09:26:54 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 26 15:44:36 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=43f6dc21

tests: resolver: port testAutounmaskMultilibUse to pytest using xfail

...instead of the addTodo mechanism.

Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/tests/resolver/test_autounmask_multilib_use.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/portage/tests/resolver/test_autounmask_multilib_use.py b/lib/portage/tests/resolver/test_autounmask_multilib_use.py
index b25318343..9be0f09cf 100644
--- a/lib/portage/tests/resolver/test_autounmask_multilib_use.py
+++ b/lib/portage/tests/resolver/test_autounmask_multilib_use.py
@@ -1,6 +1,8 @@
 # Copyright 2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+import pytest
+
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (
     ResolverPlayground,
@@ -9,6 +11,7 @@ from portage.tests.resolver.ResolverPlayground import (
 
 
 class AutounmaskMultilibUseTestCase(TestCase):
+    @pytest.mark.xfail()
     def testAutounmaskMultilibUse(self):
         self.todo = True
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-05-26 15:45 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-05-26 15:45 UTC (permalink / raw
  To: gentoo-commits

commit:     811fcbc046bb4657af311c98936abdf0e26c58a2
Author:     David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Fri Apr 28 14:19:37 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 26 15:44:36 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=811fcbc0

tests: resolver: use xfail w/ pytest

Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/tests/resolver/test_or_choices.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index 9e2c0980b..19ecfe31c 100644
--- a/lib/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
@@ -3,6 +3,8 @@
 
 import itertools
 
+import pytest
+
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (
     ResolverPlayground,
@@ -637,6 +639,7 @@ class OrChoicesTestCase(TestCase):
 
 
 class OrChoicesLibpostprocTestCase(TestCase):
+    @pytest.mark.xfail(reason="Irrelevant blocker conflict")
     def testOrChoicesLibpostproc(self):
         # This test case is expected to fail after the fix for bug 706278,
         # since the "undesirable" slot upgrade which triggers a blocker conflict


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-05-26 15:45 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-05-26 15:45 UTC (permalink / raw
  To: gentoo-commits

commit:     8469e5fa81f34466a15d3a422b0bb04a19f19869
Author:     David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Fri May  5 13:17:20 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 26 15:44:36 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=8469e5fa

tests: resolver: port testAutounmaskUseSlotConflict to pytest using xfail

Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py b/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py
index 5f3e03b56..2db1396bc 100644
--- a/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py
+++ b/lib/portage/tests/resolver/test_autounmask_use_slot_conflict.py
@@ -1,6 +1,8 @@
-# Copyright 2017-2021 Gentoo Authors
+# Copyright 2017-2021, 2023 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+import pytest
+
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (
     ResolverPlayground,
@@ -9,6 +11,7 @@ from portage.tests.resolver.ResolverPlayground import (
 
 
 class AutounmaskUseSlotConflictTestCase(TestCase):
+    @pytest.mark.xfail()
     def testAutounmaskUseSlotConflict(self):
         self.todo = True
 


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-06-16  3:34 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-06-16  3:34 UTC (permalink / raw
  To: gentoo-commits

commit:     2af4bc17d1b4ea1581bb191dfa7f34ec64ab140b
Author:     YiFei Zhu <zhuyifei1999 <AT> gmail <DOT> com>
AuthorDate: Mon Jun 12 02:07:39 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jun 16 03:34:46 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2af4bc17

tests: resolver: Test the (bad) behavior of bug #622270

Without fixing the bug. This is so we have a baseline behavior to
compare against.

Bug: https://bugs.gentoo.org/439688
Bug: https://bugs.gentoo.org/622270
Signed-off-by: YiFei Zhu <zhuyifei1999 <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../resolver/test_slot_conflict_blocked_prune.py   | 78 ++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/lib/portage/tests/resolver/test_slot_conflict_blocked_prune.py b/lib/portage/tests/resolver/test_slot_conflict_blocked_prune.py
new file mode 100644
index 000000000..14e98cd00
--- /dev/null
+++ b/lib/portage/tests/resolver/test_slot_conflict_blocked_prune.py
@@ -0,0 +1,78 @@
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+    ResolverPlayground,
+    ResolverPlaygroundTestCase,
+)
+
+
+class SlotConflictBlockedPruneTestCase(TestCase):
+    def testSlotConflictBlockedPrune(self):
+        """
+        Bug 622270
+        Downgrading package (as openssl here) due to un-accepting unstable.
+        Dependent package (as rustup here) cannot be rebuilt due to missing
+        keyword, so dependee downgrade is cancelled, but other dependents
+        (such as xwayland here) are rebuilt nevertheless. This should not
+        happen and the rebuilds should be pruned.
+        """
+        ebuilds = {
+            "x11-base/xwayland-23.1.1": {
+                "EAPI": "5",
+                "RDEPEND": "dev-libs/openssl:=",
+            },
+            "dev-util/rustup-1.25.2": {
+                "EAPI": "5",
+                "RDEPEND": "dev-libs/openssl:0=",
+                "KEYWORDS": "~x86",
+            },
+            "dev-libs/openssl-1.1.1u": {
+                "EAPI": "5",
+                "SLOT": "0/1.1",
+            },
+            "dev-libs/openssl-3.1.1": {
+                "EAPI": "5",
+                "SLOT": "0/3",
+                "KEYWORDS": "~x86",
+            },
+        }
+
+        installed = {
+            "x11-base/xwayland-23.1.1": {
+                "EAPI": "5",
+                "RDEPEND": "dev-libs/openssl:0/3=",
+            },
+            "dev-util/rustup-1.25.2": {
+                "EAPI": "5",
+                "RDEPEND": "dev-libs/openssl:0/3=",
+                "KEYWORDS": "~x86",
+            },
+            "dev-libs/openssl-3.1.1": {
+                "EAPI": "5",
+                "SLOT": "0/3",
+                "KEYWORDS": "~x86",
+            },
+        }
+
+        world = ["x11-base/xwayland", "dev-util/rustup"]
+
+        test_cases = (
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                options={"--deep": True, "--update": True, "--verbose": True},
+                success=True,
+                mergelist=["x11-base/xwayland-23.1.1"],
+            ),
+        )
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds, installed=installed, world=world
+        )
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-06-16  3:34 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-06-16  3:34 UTC (permalink / raw
  To: gentoo-commits

commit:     ff457f742b513a65e6609054e5310f8beee488ec
Author:     YiFei Zhu <zhuyifei1999 <AT> gmail <DOT> com>
AuthorDate: Tue Jun 13 08:08:51 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jun 16 03:34:46 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ff457f74

tests: resolver: Test the broken behavior of Perl rebuild bug

Bug: https://bugs.gentoo.org/463976
Bug: https://bugs.gentoo.org/592880
Bug: https://bugs.gentoo.org/596664
Bug: https://bugs.gentoo.org/631490
Bug: https://bugs.gentoo.org/764365
Bug: https://bugs.gentoo.org/793992
Signed-off-by: YiFei Zhu <zhuyifei1999 <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../tests/resolver/test_perl_rebuild_bug.py        | 121 +++++++++++++++++++++
 1 file changed, 121 insertions(+)

diff --git a/lib/portage/tests/resolver/test_perl_rebuild_bug.py b/lib/portage/tests/resolver/test_perl_rebuild_bug.py
new file mode 100644
index 000000000..928fd47d7
--- /dev/null
+++ b/lib/portage/tests/resolver/test_perl_rebuild_bug.py
@@ -0,0 +1,121 @@
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+    ResolverPlayground,
+    ResolverPlaygroundTestCase,
+)
+
+
+class PerlRebuildBugTestCase(TestCase):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+    def testPerlRebuildBug(self):
+        """
+        The infamous Perl rebuild bug.
+
+        A non-slotted build-time dependency cycle is created by:
+        dev-lang/perl -> sys-libs/zlib -> sys-devel/automake -> dev-lang/perl
+        Everything else depends on this cycle.
+
+        Bug in solving for smallest cycle causes slot in RDEPEND of
+        dev-perl/Locale-gettext to be ignored, so all dependencies other than
+        perl's >=sys-libs/zlib-1.2.12 are satisfied by already-installed
+        packages. dev-perl/Locale-gettext and sys-devel/automake become leaves
+        of the depgraph after satisfied packages are ignored. They become
+        emerged first. This causes an issue because dev-perl/Locale-gettext is
+        now built before the slot upgrade of dev-lang/perl.
+        """
+        ebuilds = {
+            "dev-lang/perl-5.36.0-r2": {
+                "EAPI": "5",
+                "DEPEND": ">=sys-libs/zlib-1.2.12",
+                "RDEPEND": ">=sys-libs/zlib-1.2.12",
+                "SLOT": "0/5.36",
+            },
+            "dev-perl/Locale-gettext-1.70.0-r1": {
+                "EAPI": "5",
+                "DEPEND": "dev-lang/perl",
+                "RDEPEND": "dev-lang/perl:=",
+            },
+            "sys-apps/help2man-1.49.3": {
+                "EAPI": "5",
+                "DEPEND": "dev-lang/perl dev-perl/Locale-gettext",
+                "RDEPEND": "dev-lang/perl dev-perl/Locale-gettext",
+            },
+            "sys-devel/automake-1.16.5": {
+                "EAPI": "5",
+                "DEPEND": "dev-lang/perl",
+                "RDEPEND": "dev-lang/perl",
+            },
+            "sys-libs/zlib-1.2.13-r1": {
+                "EAPI": "5",
+                "DEPEND": "sys-devel/automake",
+            },
+        }
+
+        installed = {
+            "dev-lang/perl-5.34.0-r3": {
+                "EAPI": "5",
+                "DEPEND": "sys-libs/zlib",
+                "RDEPEND": "sys-libs/zlib",
+                "SLOT": "0/5.34",
+            },
+            "dev-perl/Locale-gettext-1.70.0-r1": {
+                "EAPI": "5",
+                "DEPEND": "dev-lang/perl",
+                "RDEPEND": "dev-lang/perl:0/5.34=",
+            },
+            "sys-apps/help2man-1.48.5": {
+                "EAPI": "5",
+                "DEPEND": "dev-lang/perl dev-perl/Locale-gettext",
+                "RDEPEND": "dev-lang/perl dev-perl/Locale-gettext",
+            },
+            "sys-devel/automake-1.16.4": {
+                "EAPI": "5",
+                "DEPEND": "dev-lang/perl",
+                "RDEPEND": "dev-lang/perl",
+            },
+            "sys-libs/zlib-1.2.11-r4": {
+                "EAPI": "5",
+                "DEPEND": "sys-devel/automake",
+            },
+        }
+
+        world = ["sys-apps/help2man"]
+
+        test_cases = (
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                options={"--deep": True, "--update": True, "--verbose": True},
+                success=True,
+                ambiguous_merge_order=True,
+                merge_order_assertions=(
+                    (
+                        "dev-perl/Locale-gettext-1.70.0-r1",
+                        "dev-lang/perl-5.36.0-r2",
+                    ),
+                ),
+                mergelist=[
+                    "dev-perl/Locale-gettext-1.70.0-r1",
+                    "sys-devel/automake-1.16.5",
+                    "sys-libs/zlib-1.2.13-r1",
+                    "dev-lang/perl-5.36.0-r2",
+                    "sys-apps/help2man-1.49.3",
+                ],
+            ),
+        )
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds,
+            installed=installed,
+            world=world,
+        )
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-06-19 21:17 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-06-19 21:17 UTC (permalink / raw
  To: gentoo-commits

commit:     ed1314f10623b25365a697c74eb25d557eb91edd
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 19 20:25:34 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Jun 19 21:17:37 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ed1314f1

tests: rename test_unecessary_slot_upgrade.py -> test_unnecessary_slot_upgrade.py

Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../{test_unecessary_slot_upgrade.py => test_unnecessary_slot_upgrade.py} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/lib/portage/tests/resolver/test_unecessary_slot_upgrade.py b/lib/portage/tests/resolver/test_unnecessary_slot_upgrade.py
similarity index 100%
rename from lib/portage/tests/resolver/test_unecessary_slot_upgrade.py
rename to lib/portage/tests/resolver/test_unnecessary_slot_upgrade.py


^ permalink raw reply	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-11-18  1:16 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2023-11-18  1:16 UTC (permalink / raw
  To: gentoo-commits

commit:     1525b51fb1df477f8801470509e786558ab153dc
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 17 07:47:07 2023 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Nov 17 07:57:15 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=1525b51f

Add test case to reproduce bug 917259

Test bug 917259, where app-alternatives/gzip is upgraded
before its pigz RDEPEND is installed. This is triggered
when find_smallest_cycle selects a large cycle and the
topological sort produces poor results when leaf_nodes returns
app-alternatives/gzip as part of a large group of nodes.
This problem might be solved by implementing a finer-grained
ignore_priority for leaf_nodes calls.

Bug: https://bugs.gentoo.org/917259
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/meson.build             |   1 +
 .../tests/resolver/test_alternatives_gzip.py       | 248 +++++++++++++++++++++
 2 files changed, 249 insertions(+)

diff --git a/lib/portage/tests/resolver/meson.build b/lib/portage/tests/resolver/meson.build
index 0d8c2921e1..7d2bd367d4 100644
--- a/lib/portage/tests/resolver/meson.build
+++ b/lib/portage/tests/resolver/meson.build
@@ -1,6 +1,7 @@
 py.install_sources(
     [
         'ResolverPlayground.py',
+        'test_alternatives_gzip.py',
         'test_aggressive_backtrack_downgrade.py',
         'test_autounmask.py',
         'test_autounmask_binpkg_use.py',

diff --git a/lib/portage/tests/resolver/test_alternatives_gzip.py b/lib/portage/tests/resolver/test_alternatives_gzip.py
new file mode 100644
index 0000000000..602ed1756f
--- /dev/null
+++ b/lib/portage/tests/resolver/test_alternatives_gzip.py
@@ -0,0 +1,248 @@
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import pytest
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+    ResolverPlayground,
+    ResolverPlaygroundTestCase,
+)
+
+
+@pytest.mark.xfail()
+class AlternativesGzipTestCase(TestCase):
+    def testAlternativesGzip(self):
+        """
+        Test bug 917259, where app-alternatives/gzip is upgraded before
+        its pigz RDEPEND is installed. This is triggered when
+        find_smallest_cycle selects a large cycle and the topological
+        sort produces poor results when leaf_nodes returns
+        app-alternatives/gzip as part of a large group of nodes.
+        This problem might be solved by implementing a finer-grained
+        ignore_priority for leaf_nodes calls.
+        """
+        ebuilds = {
+            "app-alternatives/gzip-1": {
+                "EAPI": "8",
+                "RDEPEND": "reference? ( >=app-arch/gzip-1.12-r3 ) pigz? ( >=app-arch/pigz-2.8[-symlink(-)] )",
+                "IUSE": "reference pigz",
+                "REQUIRED_USE": "^^ ( reference pigz )",
+            },
+            "app-alternatives/gzip-0": {
+                "EAPI": "8",
+                "RDEPEND": "reference? ( >=app-arch/gzip-1.12-r3 ) pigz? ( app-arch/pigz[-symlink(-)] )",
+                "IUSE": "reference pigz",
+                "REQUIRED_USE": "^^ ( reference pigz )",
+            },
+            "app-arch/gzip-1.13": {
+                "EAPI": "8",
+                "RDEPEND": "!app-arch/pigz[symlink(-)]",
+                "PDEPEND": "app-alternatives/gzip",
+            },
+            "app-arch/zstd-1.5.5": {
+                "EAPI": "8",
+                "DEPEND": ">=sys-libs/zlib-1.2.3",
+                "RDEPEND": ">=sys-libs/zlib-1.2.3",
+            },
+            "app-arch/pigz-2.8": {
+                "EAPI": "8",
+                "DEPEND": ">=sys-libs/zlib-1.2.3",
+                "RDEPEND": ">=sys-libs/zlib-1.2.3",
+                "PDEPEND": "app-alternatives/gzip",
+            },
+            "dev-lang/perl-5.36.1-r3": {
+                "EAPI": "8",
+                "BDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:=",
+                "RDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:=",
+                "DEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:=",
+            },
+            "dev-libs/libgcrypt-1.10.2": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+                "DEPEND": "sys-libs/glibc",
+                "RDEPEND": "sys-libs/glibc",
+            },
+            "dev-libs/libpcre2-10.42-r1": {
+                "EAPI": "8",
+                "SLOT": "0/3",
+                "DEPEND": "sys-libs/zlib",
+                "RDEPEND": "sys-libs/zlib",
+            },
+            "sys-apps/locale-gen-2.23-r1": {
+                "EAPI": "8",
+                "RDEPEND": "app-alternatives/gzip",
+            },
+            "sys-apps/systemd-253.6": {
+                "EAPI": "8",
+                "SLOT": "0/2",
+                "BDEPEND": "dev-lang/perl",
+                "DEPEND": ">=sys-apps/util-linux-2.30:= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:= dev-libs/libpcre2",
+                "RDEPEND": ">=sys-apps/util-linux-2.30:= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:= dev-libs/libpcre2",
+            },
+            "sys-apps/util-linux-2.38.1-r2": {
+                "EAPI": "8",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+                "DEPEND": "virtual/libcrypt:= sys-libs/zlib:= virtual/libudev:= dev-libs/libpcre2:=",
+                "RDEPEND": "sys-apps/systemd sys-libs/zlib:= virtual/libudev:= dev-libs/libpcre2:=",
+            },
+            "sys-devel/automake-1.16.5-r1": {
+                "EAPI": "8",
+                "BDEPEND": "app-alternatives/gzip",
+                "RDEPEND": ">=dev-lang/perl-5.6",
+            },
+            "sys-libs/glibc-2.37-r7": {
+                "EAPI": "8",
+                "BDEPEND": "sys-apps/locale-gen",
+                "IDEPEND": "sys-apps/locale-gen",
+                "RDEPEND": "dev-lang/perl",
+            },
+            "sys-libs/libxcrypt-4.4.36": {
+                "BDEPEND": "dev-lang/perl",
+                "DEPEND": "sys-libs/glibc",
+                "RDEPEND": "sys-libs/glibc",
+            },
+            "sys-libs/zlib-1.3-r1": {
+                "EAPI": "8",
+                "SLOT": "0/1",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+            },
+            "sys-libs/zlib-1.2.13-r2": {
+                "EAPI": "8",
+                "SLOT": "0/1",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+            },
+            "virtual/libcrypt-2-r1": {
+                "EAPI": "8",
+                "SLOT": "0/2",
+                "RDEPEND": "sys-libs/libxcrypt",
+            },
+            "virtual/libudev-251-r2": {
+                "EAPI": "8",
+                "SLOT": "0/1",
+                "RDEPEND": ">=sys-apps/systemd-251:0/2",
+            },
+        }
+
+        installed = {
+            "app-alternatives/gzip-0": {
+                "EAPI": "8",
+                "RDEPEND": "reference? ( >=app-arch/gzip-1.12-r3 ) pigz? ( app-arch/pigz[-symlink(-)] )",
+                "IUSE": "reference pigz",
+                "USE": "reference",
+            },
+            "app-arch/gzip-1.13": {
+                "EAPI": "8",
+                "RDEPEND": "!app-arch/pigz[symlink(-)]",
+                "PDEPEND": "app-alternatives/gzip",
+            },
+            "app-arch/zstd-1.5.5": {
+                "EAPI": "8",
+                "DEPEND": ">=sys-libs/zlib-1.2.3",
+                "RDEPEND": ">=sys-libs/zlib-1.2.3",
+            },
+            "dev-lang/perl-5.36.1-r3": {
+                "EAPI": "8",
+                "BDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:0/2=",
+                "RDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:0/2=",
+                "DEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:0/2=",
+            },
+            "dev-libs/libgcrypt-1.10.2": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+                "DEPEND": "sys-libs/glibc",
+                "RDEPEND": "sys-libs/glibc",
+            },
+            "dev-libs/libpcre2-10.42-r1": {
+                "EAPI": "8",
+                "SLOT": "0/3",
+                "DEPEND": "sys-libs/zlib",
+                "RDEPEND": "sys-libs/zlib",
+            },
+            "sys-apps/locale-gen-2.23-r1": {
+                "EAPI": "8",
+                "RDEPEND": "app-alternatives/gzip",
+            },
+            "sys-apps/systemd-253.6": {
+                "EAPI": "8",
+                "SLOT": "0/2",
+                "BDEPEND": "dev-lang/perl",
+                "DEPEND": ">=sys-apps/util-linux-2.30:0= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:0/2= dev-libs/libpcre2",
+                "RDEPEND": ">=sys-apps/util-linux-2.30:0= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:0/2= dev-libs/libpcre2",
+            },
+            "sys-apps/util-linux-2.38.1-r2": {
+                "EAPI": "8",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+                "DEPEND": "virtual/libcrypt:0/2= sys-libs/zlib:0/1= virtual/libudev:0/1= dev-libs/libpcre2:0/3=",
+                "RDEPEND": "sys-apps/systemd sys-libs/zlib:0/1= virtual/libudev:0/1= dev-libs/libpcre2:0/3=",
+            },
+            "sys-devel/automake-1.16.5-r1": {
+                "EAPI": "8",
+                "BDEPEND": "app-alternatives/gzip",
+                "RDEPEND": ">=dev-lang/perl-5.6",
+            },
+            "sys-libs/glibc-2.37-r7": {
+                "EAPI": "8",
+                "BDEPEND": "sys-apps/locale-gen",
+                "IDEPEND": "sys-apps/locale-gen",
+                "RDEPEND": "dev-lang/perl",
+            },
+            "sys-libs/libxcrypt-4.4.36": {
+                "BDEPEND": "dev-lang/perl",
+                "DEPEND": "sys-libs/glibc",
+                "RDEPEND": "sys-libs/glibc",
+            },
+            "sys-libs/zlib-1.2.13-r2": {
+                "EAPI": "8",
+                "SLOT": "0/1",
+                "BDEPEND": ">=sys-devel/automake-1.16.5",
+            },
+            "virtual/libcrypt-2-r1": {
+                "EAPI": "8",
+                "SLOT": "0/2",
+                "RDEPEND": "sys-libs/libxcrypt",
+            },
+            "virtual/libudev-251-r2": {
+                "EAPI": "8",
+                "SLOT": "0/1",
+                "RDEPEND": ">=sys-apps/systemd-251:0/2",
+            },
+        }
+
+        world = [
+            "app-alternatives/gzip",
+            "app-arch/gzip",
+            "app-arch/zstd",
+            "sys-apps/systemd",
+        ]
+
+        user_config = {
+            "package.use": ("app-alternatives/gzip -reference pigz",),
+        }
+
+        test_cases = (
+            ResolverPlaygroundTestCase(
+                ["app-alternatives/gzip", "sys-libs/zlib"],
+                success=True,
+                mergelist=[
+                    "sys-libs/zlib-1.3-r1",
+                    "app-arch/pigz-2.8",
+                    "app-alternatives/gzip-1",
+                ],
+            ),
+        )
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds,
+            installed=installed,
+            world=world,
+            user_config=user_config,
+        )
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-11-28 22:26 Sam James
  0 siblings, 0 replies; 56+ messages in thread
From: Sam James @ 2023-11-28 22:26 UTC (permalink / raw
  To: gentoo-commits

commit:     2b02d8f5495cd5004c294f87beb365fd490018bd
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Nov 28 05:33:56 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Nov 28 22:07:46 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2b02d8f5

tests: add runtime cycle test case with binpkgs

In the reported bug, net-misc/curl gets merged (binary), then dev-util/cmake gets
bulit (from source) which fails because one of the built curl's dependencies
(net-libs/nghttp2) is missing:
```
[binary   R    ] net-misc/curl-8.4.0::test_repo  USE="http2%*" 0 KiB
[ebuild     U  ] dev-util/cmake-3.27.8::test_repo [3.26.5-r2::test_repo] 0 KiB
[ebuild  N     ] net-libs/nghttp2-1.57.0::test_repo  0 KiB
```

We should consider the existing dev-util/cmake as sufficient for nghttp2 and instead do:
1. net-libs/nghttp2-1.57.0
2. net-misc/curl-8.4.0 (binary)
3. dev-util/cmake-3.27.8 (upgrade, we didn't need to do this first as we already had a CMake installed)

Bug: https://bugs.gentoo.org/918683
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../resolver/test_runtime_cycle_merge_order.py     | 145 +++++++++++++++++++++
 1 file changed, 145 insertions(+)

diff --git a/lib/portage/tests/resolver/test_runtime_cycle_merge_order.py b/lib/portage/tests/resolver/test_runtime_cycle_merge_order.py
index a955ac3dc3..26850ccad2 100644
--- a/lib/portage/tests/resolver/test_runtime_cycle_merge_order.py
+++ b/lib/portage/tests/resolver/test_runtime_cycle_merge_order.py
@@ -7,6 +7,8 @@ from portage.tests.resolver.ResolverPlayground import (
     ResolverPlaygroundTestCase,
 )
 
+import pytest
+
 
 class RuntimeCycleMergeOrderTestCase(TestCase):
     def testRuntimeCycleMergeOrder(self):
@@ -74,3 +76,146 @@ class RuntimeCycleMergeOrderTestCase(TestCase):
                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
         finally:
             playground.cleanup()
+
+    @pytest.mark.xfail()
+    def testBuildtimeRuntimeCycleMergeOrder(self):
+        installed = {
+            "dev-util/cmake-3.26.5-r2": {
+                "EAPI": "8",
+                "KEYWORDS": "x86",
+                "DEPEND": "net-misc/curl",
+                "RDEPEND": "net-misc/curl",
+            },
+            "net-dns/c-ares-1.21.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+                "RDEPEND": "net-dns/c-ares",
+            },
+            "net-misc/curl-8.4.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+                "DEPEND": """
+                    net-dns/c-ares
+                    http2? ( net-libs/nghttp2:= )
+                """,
+                "RDEPEND": """
+                    net-dns/c-ares
+                    http2? ( net-libs/nghttp2:= )
+                 """,
+            },
+            "net-dns/c-ares-1.21.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+            },
+        }
+
+        binpkgs = {
+            "net-misc/curl-8.4.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+                "IUSE": "http2",
+                "USE": "http2",
+                "DEPEND": """
+                    net-dns/c-ares
+                    http2? ( net-libs/nghttp2:= )
+                """,
+                "RDEPEND": """
+                    net-dns/c-ares
+                    http2? ( net-libs/nghttp2:= )
+                """,
+            },
+            "dev-util/cmake-3.26.5-r2": {
+                "EAPI": "8",
+                "KEYWORDS": "x86",
+                "DEPEND": "net-misc/curl",
+                "RDEPEND": "net-misc/curl",
+            },
+        }
+
+        ebuilds = {
+            "dev-util/cmake-3.26.5-r2": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+                "DEPEND": "net-misc/curl",
+                "RDEPEND": "net-misc/curl",
+            },
+            "dev-util/cmake-3.27.8": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "~x86",
+                "DEPEND": "net-misc/curl",
+                "RDEPEND": "net-misc/curl",
+            },
+            "net-dns/c-ares-1.21.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+            },
+            "net-libs/nghttp2-1.57.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+                "BDEPEND": "dev-util/cmake",
+                "RDEPEND": "net-dns/c-ares",
+            },
+            "net-misc/curl-8.4.0": {
+                "EAPI": "8",
+                "SLOT": "0",
+                "KEYWORDS": "x86",
+                "IUSE": "http2",
+                "DEPEND": """
+                    net-dns/c-ares
+                    http2? ( net-libs/nghttp2:= )
+                """,
+                "RDEPEND": """
+                    net-dns/c-ares
+                    http2? ( net-libs/nghttp2:= )
+                """,
+            },
+        }
+
+        world = ("dev-util/cmake",)
+
+        test_cases = (
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                options={
+                    "--verbose": True,
+                    "--update": True,
+                    "--deep": True,
+                    "--newuse": True,
+                    "--usepkg": True,
+                },
+                success=True,
+                mergelist=[
+                    "net-libs/nghttp2-1.57.0",
+                    "[binary]net-misc/curl-8.4.0",
+                    "dev-util/cmake-3.27.8",
+                ],
+            ),
+        )
+
+        playground = ResolverPlayground(
+            world=world,
+            installed=installed,
+            binpkgs=binpkgs,
+            ebuilds=ebuilds,
+            debug=False,
+            user_config={
+                "make.conf": (
+                    f'ACCEPT_KEYWORDS="~x86"',
+                    f'USE="http2"',
+                ),
+            },
+        )
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2023-12-24 19:30 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2023-12-24 19:30 UTC (permalink / raw
  To: gentoo-commits

commit:     eeb4c29a64927efbaa7028153230367651bcf3b7
Author:     Andrei Horodniceanu <a.horodniceanu <AT> proton <DOT> me>
AuthorDate: Sat Oct 21 14:38:36 2023 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Dec 24 19:29:16 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=eeb4c29a

tests/resolver: test depclean order with IDEPEND and circular deps

Bug: https://bugs.gentoo.org/916135
Signed-off-by: Andrei Horodniceanu <a.horodniceanu <AT> proton.me>
Closes: https://github.com/gentoo/portage/pull/1147
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_depclean_order.py | 50 +++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/lib/portage/tests/resolver/test_depclean_order.py b/lib/portage/tests/resolver/test_depclean_order.py
index 08dd249e11..867b1a54ca 100644
--- a/lib/portage/tests/resolver/test_depclean_order.py
+++ b/lib/portage/tests/resolver/test_depclean_order.py
@@ -1,6 +1,8 @@
 # Copyright 2013 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+import pytest
+
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (
     ResolverPlayground,
@@ -57,3 +59,51 @@ class SimpleDepcleanTestCase(TestCase):
                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
         finally:
             playground.cleanup()
+
+    @pytest.mark.xfail()
+    def testIDEPENDDepclean(self):
+        ebuilds = {
+            "dev-util/A-1": {},
+            "dev-libs/B-1": {
+                "EAPI": "8",
+                "IDEPEND": "dev-util/A",
+                "RDEPEND": "dev-libs/B:=",
+            },
+            "dev-libs/C-1": {},
+        }
+
+        installed = {
+            "dev-util/A-1": {},
+            "dev-libs/B-1": {
+                "EAPI": "8",
+                "IDEPEND": "dev-util/A",
+                "RDEPEND": "dev-libs/B:0/0=",
+            },
+            "dev-libs/C-1": {},
+        }
+
+        world = ("dev-libs/C",)
+
+        test_cases = (
+            # Remove dev-libs/B first because it IDEPENDs on dev-util/A
+            ResolverPlaygroundTestCase(
+                [],
+                options={"--depclean": True},
+                success=True,
+                ordered=True,
+                cleanlist=[
+                    "dev-libs/B-1",
+                    "dev-util/A-1",
+                ],
+            ),
+        )
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds, installed=installed, world=world
+        )
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2024-02-09 21:40 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2024-02-09 21:40 UTC (permalink / raw
  To: gentoo-commits

commit:     be37f0761752f13a855aed66fa6e49e2f7211a0f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Feb  9 21:36:02 2024 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Feb  9 21:36:28 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=be37f076

EAPITestCase: Disable playground debug so tempdir is cleaned up

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_eapi.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/resolver/test_eapi.py b/lib/portage/tests/resolver/test_eapi.py
index 5d425ccdb9..32dcb49895 100644
--- a/lib/portage/tests/resolver/test_eapi.py
+++ b/lib/portage/tests/resolver/test_eapi.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Gentoo Authors
+# Copyright 2010-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.tests import TestCase
@@ -199,7 +199,7 @@ class EAPITestCase(TestCase):
             mergelist=["dev-libs/A-1.0", "dev-libs/B-1.0"],
         )
 
-        playground = ResolverPlayground(ebuilds=ebuilds, debug=True)
+        playground = ResolverPlayground(ebuilds=ebuilds)
         try:
             playground.run_TestCase(test_case)
             self.assertEqual(test_case.test_success, True, test_case.fail_msg)


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2024-05-26 18:48 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2024-05-26 18:48 UTC (permalink / raw
  To: gentoo-commits

commit:     11bded10a2a4f143e8d7f8ccb2f91f2b6fed59b5
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun May 26 14:44:56 2024 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun May 26 18:27:02 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=11bded10

tests: add testcase for app-arch/tar merge order with binpkgs

In the bug, dilfridge reports releng@ is hitting the following:
```
$ emerge -epvk world | grep -E "(app-arch/tar|sys-apps/acl)"
[ebuild  N     ] sys-apps/acl-2.3.2-r1::gentoo  USE="nls -static-libs" 363 KiB
[binary   R    ] app-arch/tar-1.35-1::gentoo  USE="acl* nls* xattr* -minimal (-selinux) -verify-sig" 0 KiB
[...]
```

Test for bug #922629 where binary app-arch/tar[acl] was merged
before its dependency sys-apps/acl (with virtual/acl merged but
unsatisfied).

It (appears to be) a bad interaction with @system containing app-alternatives/tar
plus a circular dependency on app-arch/tar. The USE change is also important,
as e.g. dropping "sys-apps/attr nls" from package.use makes things okay.

XFAIL'd for now.

Bug: https://bugs.gentoo.org/922629
Signed-off-by: Sam James <sam <AT> gentoo.org>
Closes: https://github.com/gentoo/portage/pull/1332
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/meson.build             |   1 +
 lib/portage/tests/resolver/test_tar_merge_order.py | 495 +++++++++++++++++++++
 2 files changed, 496 insertions(+)

diff --git a/lib/portage/tests/resolver/meson.build b/lib/portage/tests/resolver/meson.build
index 8892c78131..ea948982e7 100644
--- a/lib/portage/tests/resolver/meson.build
+++ b/lib/portage/tests/resolver/meson.build
@@ -81,6 +81,7 @@ py.install_sources(
         'test_slot_operator_update_probe_parent_downgrade.py',
         'test_solve_non_slot_operator_slot_conflicts.py',
         'test_targetroot.py',
+        'test_tar_merge_order.py',
         'test_unmerge_order.py',
         'test_unnecessary_slot_upgrade.py',
         'test_update.py',

diff --git a/lib/portage/tests/resolver/test_tar_merge_order.py b/lib/portage/tests/resolver/test_tar_merge_order.py
new file mode 100644
index 0000000000..7e1a18bc21
--- /dev/null
+++ b/lib/portage/tests/resolver/test_tar_merge_order.py
@@ -0,0 +1,495 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import os
+import pytest
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+    ResolverPlayground,
+    ResolverPlaygroundTestCase,
+)
+
+
+class TarMergeOrderTestCase(TestCase):
+    @pytest.mark.xfail(reason="bug #922629 isn't yet fixed")
+    def testTarMergeOrder(self):
+        """
+        Test for bug #922629 where binary app-arch/tar[acl] was merged
+        before its dependency sys-apps/acl (with virtual/acl merged but
+        unsatisfied).
+
+        It poorly interacted with @system containing app-alternatives/tar
+        as a circular dependency on app-arch/tar.
+        """
+
+        ebuilds = {
+            "app-alternatives/tar-0-1": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    !<app-arch/tar-1.34-r2
+                    gnu? ( >=app-arch/tar-1.34-r2 )
+                    libarchive? ( app-arch/libarchive )
+                """,
+                "IUSE": "+gnu libarchive",
+                "REQUIRED_USE": "^^ ( gnu libarchive )",
+            },
+            "app-arch/libarchive-3.7.4": {"EAPI": "8"},
+            "app-arch/tar-1.35": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "BDEPEND": """
+                    nls? ( sys-devel/gettext )
+                """,
+                "IUSE": "acl nls xattr",
+            },
+            "virtual/acl-0-r2": {
+                "EAPI": "8",
+                "RDEPEND": ">=sys-apps/acl-2.2.52-r1",
+            },
+            "sys-devel/gettext-0.22.4": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "IUSE": "acl nls xattr",
+            },
+            "sys-apps/attr-2.5.2-r1": {
+                "EAPI": "8",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+            },
+            "sys-apps/acl-2.3.2-r1": {
+                "EAPI": "8",
+                "DEPEND": ">=sys-apps/attr-2.4.47-r1",
+                "RDEPEND": ">=sys-apps/attr-2.4.47-r1",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+            },
+        }
+
+        installed = {
+            "app-alternatives/tar-0-1": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    !<app-arch/tar-1.34-r2
+                    gnu? ( >=app-arch/tar-1.34-r2 )
+                    libarchive? ( app-arch/libarchive )
+                """,
+                "IUSE": "+gnu libarchive",
+                "USE": "gnu",
+                "REQUIRED_USE": "^^ ( gnu libarchive )",
+            },
+            "app-arch/tar-1.35": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "BDEPEND": """
+                    nls? ( sys-devel/gettext )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "",
+            },
+            "sys-devel/gettext-0.22.4": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "xattr",
+            },
+            "sys-apps/attr-2.5.2-r1": {
+                "EAPI": "8",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+                "USE": "",
+            },
+        }
+
+        binpkgs = {
+            "app-alternatives/tar-0-1": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    !<app-arch/tar-1.34-r2
+                    gnu? ( >=app-arch/tar-1.34-r2 )
+                    libarchive? ( app-arch/libarchive )
+                """,
+                "IUSE": "+gnu libarchive",
+                "USE": "gnu",
+                "REQUIRED_USE": "^^ ( gnu libarchive )",
+            },
+            "app-arch/tar-1.35": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "BDEPEND": """
+                    nls? ( sys-devel/gettext )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "acl nls xattr",
+            },
+            "virtual/acl-0-r2": {
+                "EAPI": "8",
+                "RDEPEND": ">=sys-apps/acl-2.2.52-r1",
+            },
+            "sys-devel/gettext-0.22.4": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "acl nls xattr",
+            },
+            "sys-apps/attr-2.5.2-r1": {
+                "EAPI": "8",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+                "USE": "nls",
+            },
+        }
+
+        world = []
+
+        user_config = {
+            "package.use": (
+                "app-arch/tar acl nls xattr",
+                "sys-apps/acl nls",
+                "sys-apps/attr nls",
+                "sys-devel/gettext acl nls xattr",
+            ),
+        }
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds,
+            installed=installed,
+            binpkgs=binpkgs,
+            world=world,
+            user_config=user_config,
+        )
+        settings = playground.settings
+        profile_path = settings.profile_path
+
+        # Add app-alternatives/tar to @system too
+        with open(os.path.join(profile_path, "packages"), "w") as f:
+            f.writelines(["*app-alternatives/tar\n", "*app-arch/tar\n"])
+        test_cases = (
+            # Check without binpkgs first
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                success=True,
+                options={"--emptytree": True},
+                mergelist=[
+                    "sys-apps/acl-2.3.2-r1",
+                    "virtual/acl-0-r2",
+                    "sys-apps/attr-2.5.2-r1",
+                    "sys-devel/gettext-0.22.4",
+                    "app-arch/tar-1.35",
+                    "app-alternatives/tar-0",
+                ],
+            ),
+            # In the bug, only --emptytree was broken, so check
+            # some cases without it.
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                success=True,
+                options={
+                    "--usepkg": True,
+                },
+                mergelist=[
+                    "sys-apps/acl-2.3.2-r1",
+                    "[binary]virtual/acl-0-r2",
+                    "[binary]app-arch/tar-1.35",
+                    "[binary]app-alternatives/tar-0",
+                ],
+            ),
+            ResolverPlaygroundTestCase(
+                ["app-arch/tar"],
+                success=True,
+                options={
+                    "--oneshot": True,
+                    "--usepkg": True,
+                },
+                mergelist=[
+                    "sys-apps/acl-2.3.2-r1",
+                    "[binary]virtual/acl-0-r2",
+                    "[binary]app-arch/tar-1.35",
+                ],
+            ),
+            # binpkg --emptytree case which broke
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                success=True,
+                options={
+                    "--emptytree": True,
+                    "--usepkg": True,
+                },
+                mergelist=[
+                    "[binary]sys-apps/attr-2.5.2-r1",
+                    "[binary]virtual/acl-0-r2",
+                    "[binary]sys-devel/gettext-0.22.4",
+                    "sys-apps/acl-2.3.2-r1",
+                    "[binary]app-arch/tar-1.35",
+                    "[binary]app-alternatives/tar-0",
+                ],
+            ),
+        )
+
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()
+
+    def testTarMergeOrderWithoutAlternatives(self):
+        """
+        Variant of test for bug #922629 where binary app-arch/tar[acl] was merged
+        before its dependency sys-apps/acl (with virtual/acl merged but
+        unsatisfied).
+
+        This variant lacks the problematic app-alternatives/tar to check we handle
+        the simpler case correctly.
+        """
+
+        ebuilds = {
+            "app-arch/tar-1.35": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "BDEPEND": """
+                    nls? ( sys-devel/gettext )
+                """,
+                "IUSE": "acl nls xattr",
+            },
+            "virtual/acl-0-r2": {
+                "EAPI": "8",
+                "RDEPEND": ">=sys-apps/acl-2.2.52-r1",
+            },
+            "sys-devel/gettext-0.22.4": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "IUSE": "acl nls xattr",
+            },
+            "sys-apps/attr-2.5.2-r1": {
+                "EAPI": "8",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+            },
+            "sys-apps/acl-2.3.2-r1": {
+                "EAPI": "8",
+                "DEPEND": ">=sys-apps/attr-2.4.47-r1",
+                "RDEPEND": ">=sys-apps/attr-2.4.47-r1",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+            },
+        }
+
+        installed = {
+            "app-arch/tar-1.35": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "BDEPEND": """
+                    nls? ( sys-devel/gettext )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "",
+            },
+            "sys-devel/gettext-0.22.4": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "xattr",
+            },
+            "sys-apps/attr-2.5.2-r1": {
+                "EAPI": "8",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+                "USE": "",
+            },
+        }
+
+        binpkgs = {
+            "app-arch/tar-1.35": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "BDEPEND": """
+                    nls? ( sys-devel/gettext )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "acl nls xattr",
+            },
+            "virtual/acl-0-r2": {
+                "EAPI": "8",
+                "RDEPEND": ">=sys-apps/acl-2.2.52-r1",
+            },
+            "sys-devel/gettext-0.22.4": {
+                "EAPI": "8",
+                "RDEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "DEPEND": """
+                    acl? ( virtual/acl )
+                    xattr? ( sys-apps/attr )
+                """,
+                "IUSE": "acl nls xattr",
+                "USE": "acl nls xattr",
+            },
+            "sys-apps/attr-2.5.2-r1": {
+                "EAPI": "8",
+                "BDEPEND": "nls? ( sys-devel/gettext )",
+                "IUSE": "nls",
+                "USE": "nls",
+            },
+        }
+
+        world = []
+
+        user_config = {
+            "package.use": (
+                "app-arch/tar acl nls xattr",
+                "sys-apps/acl nls",
+                "sys-apps/attr nls",
+                "sys-devel/gettext acl nls xattr",
+            ),
+        }
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds,
+            installed=installed,
+            binpkgs=binpkgs,
+            world=world,
+            user_config=user_config,
+        )
+        settings = playground.settings
+        profile_path = settings.profile_path
+
+        with open(os.path.join(profile_path, "packages"), "w") as f:
+            f.writelines(["*app-arch/tar\n"])
+        test_cases = (
+            # Check without binpkgs first
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                success=True,
+                options={"--emptytree": True, "--verbose": True},
+                mergelist=[
+                    "sys-apps/acl-2.3.2-r1",
+                    "virtual/acl-0-r2",
+                    "sys-apps/attr-2.5.2-r1",
+                    "sys-devel/gettext-0.22.4",
+                    "app-arch/tar-1.35",
+                ],
+            ),
+            # In the bug, only --emptytree was broken, so check
+            # some cases without it.
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                success=True,
+                options={
+                    "--usepkg": True,
+                },
+                mergelist=[
+                    "sys-apps/acl-2.3.2-r1",
+                    "[binary]virtual/acl-0-r2",
+                    "[binary]app-arch/tar-1.35",
+                ],
+            ),
+            ResolverPlaygroundTestCase(
+                ["app-arch/tar"],
+                success=True,
+                options={
+                    "--oneshot": True,
+                    "--usepkg": True,
+                },
+                mergelist=[
+                    "sys-apps/acl-2.3.2-r1",
+                    "[binary]virtual/acl-0-r2",
+                    "[binary]app-arch/tar-1.35",
+                ],
+            ),
+            # binpkg --emptytree case which broke
+            ResolverPlaygroundTestCase(
+                ["@world"],
+                success=True,
+                options={
+                    "--emptytree": True,
+                    "--usepkg": True,
+                },
+                mergelist=[
+                    "[binary]sys-apps/attr-2.5.2-r1",
+                    "[binary]virtual/acl-0-r2",
+                    "[binary]sys-devel/gettext-0.22.4",
+                    "sys-apps/acl-2.3.2-r1",
+                    "[binary]app-arch/tar-1.35",
+                ],
+            ),
+        )
+
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+        finally:
+            playground.cleanup()


^ permalink raw reply related	[flat|nested] 56+ messages in thread

* [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/
@ 2024-05-26 18:58 Zac Medico
  0 siblings, 0 replies; 56+ messages in thread
From: Zac Medico @ 2024-05-26 18:58 UTC (permalink / raw
  To: gentoo-commits

commit:     ff22b5bf954574f1fad789fc148945d67c3a1215
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun May 26 18:57:38 2024 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun May 26 18:57:58 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ff22b5bf

test_tar_merge_order.py: Fix unused pytest unused-import

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/test_tar_merge_order.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/portage/tests/resolver/test_tar_merge_order.py b/lib/portage/tests/resolver/test_tar_merge_order.py
index 4bd9b4df4a..c66d01ee31 100644
--- a/lib/portage/tests/resolver/test_tar_merge_order.py
+++ b/lib/portage/tests/resolver/test_tar_merge_order.py
@@ -2,7 +2,6 @@
 # Distributed under the terms of the GNU General Public License v2
 
 import os
-import pytest
 
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import (


^ permalink raw reply related	[flat|nested] 56+ messages in thread

end of thread, other threads:[~2024-05-26 18:58 UTC | newest]

Thread overview: 56+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-26 18:58 [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/ Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2024-05-26 18:48 Zac Medico
2024-02-09 21:40 Zac Medico
2023-12-24 19:30 Zac Medico
2023-11-28 22:26 Sam James
2023-11-18  1:16 Zac Medico
2023-06-19 21:17 Sam James
2023-06-16  3:34 Sam James
2023-06-16  3:34 Sam James
2023-05-26 15:45 Sam James
2023-05-26 15:45 Sam James
2023-05-26 15:45 Sam James
2023-02-19 19:19 Sam James
2023-01-02 20:45 Mike Gilbert
2022-07-25 22:01 Zac Medico
2022-07-25 20:44 Mike Gilbert
2022-02-14  0:14 Zac Medico
2021-05-24  6:33 Zac Medico
2021-03-28  6:21 Zac Medico
2021-03-06  9:53 Zac Medico
2021-03-01  8:56 Zac Medico
2021-03-01  6:43 Zac Medico
2021-02-23 22:39 Zac Medico
2021-01-11  3:40 Zac Medico
2020-12-02 17:33 Zac Medico
2020-11-15  5:56 Zac Medico
2020-09-19 20:28 Zac Medico
2020-08-30 22:39 Zac Medico
2020-08-03 23:28 Zac Medico
2020-08-03 23:28 Zac Medico
2020-08-03 23:28 Zac Medico
2020-08-03 21:42 Zac Medico
2020-08-03 19:30 Zac Medico
2020-04-11 23:50 Zac Medico
2020-02-10  3:19 Zac Medico
2020-02-10  2:29 Zac Medico
2020-02-09 23:57 Zac Medico
2020-02-09 23:15 Zac Medico
2020-02-08  8:35 Zac Medico
2020-02-01  4:48 Zac Medico
2020-01-26  6:27 Zac Medico
2020-01-26  0:20 Zac Medico
2020-01-25 22:37 Zac Medico
2020-01-21  2:37 Zac Medico
2019-12-25  8:18 Zac Medico
2019-12-22  0:35 Zac Medico
2019-12-22  0:28 Zac Medico
2019-12-21 23:54 Zac Medico
2019-11-16  9:57 Zac Medico
2019-10-21  8:26 Zac Medico
2019-10-11  4:00 Zac Medico
2019-09-15  3:36 Zac Medico
2019-09-12 19:43 Zac Medico
2019-09-12 19:05 Zac Medico
2019-01-20 19:27 Zac Medico
2018-12-30  2:34 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox