Ejemplo n.º 1
0
    def testDepcleanAndWildcards(self):

        installed = {
            "dev-libs/A-1": {
                "RDEPEND": "dev-libs/B"
            },
            "dev-libs/B-1": {},
        }

        test_cases = (
            ResolverPlaygroundTestCase(
                ["*/*"],
                options={"--depclean": True},
                success=True,
                cleanlist=["dev-libs/A-1", "dev-libs/B-1"]),
            ResolverPlaygroundTestCase(
                ["dev-libs/*"],
                options={"--depclean": True},
                success=True,
                cleanlist=["dev-libs/A-1", "dev-libs/B-1"]),
            ResolverPlaygroundTestCase(["*/A"],
                                       options={"--depclean": True},
                                       success=True,
                                       cleanlist=["dev-libs/A-1"]),
            ResolverPlaygroundTestCase(["*/B"],
                                       options={"--depclean": True},
                                       success=True,
                                       cleanlist=[]),
        )

        playground = ResolverPlayground(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.cleanup()
Ejemplo n.º 2
0
    def testUseMask(self):

        profile = {
            "use.mask": ("abi_ppc_32", ),
        }

        ebuilds = {

         "sys-libs/A-1" : {
          "EAPI": "5",
          "RDEPEND": "|| ( sys-libs/zlib[abi_ppc_32(-)] " + \
           "sys-libs/zlib[abi_x86_32(-)] )"
         },

         "sys-libs/zlib-1.2.8-r1" : {
          "EAPI": "5",
          "IUSE": "abi_ppc_32 abi_x86_32"
         },

         "sys-libs/zlib-1.2.8" : {
          "EAPI": "5",
          "IUSE": ""
         },
        }

        test_cases = (

            # bug #515584: We want to prefer choices that do
            # not require changes to use.mask or use.force.
            # In this case, abi_ppc_32 is use.masked in the
            # profile, so we want to avoid that choice.
            ResolverPlaygroundTestCase(
                ["sys-libs/A"],
                options={},
                success=False,
                use_changes={'sys-libs/zlib-1.2.8-r1': {
                    'abi_x86_32': True
                }},
                mergelist=["sys-libs/zlib-1.2.8-r1", "sys-libs/A-1"]), )

        playground = ResolverPlayground(ebuilds=ebuilds,
                                        profile=profile,
                                        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()
Ejemplo n.º 3
0
    def testSimple(self):
        ebuilds = {
            "dev-libs/A-1": {
                "KEYWORDS": "x86"
            },
            "dev-libs/A-2": {
                "KEYWORDS": "~x86"
            },
            "dev-libs/B-1.2": {},
            "app-misc/Z-1": {
                "DEPEND": "|| ( app-misc/Y ( app-misc/X app-misc/W ) )",
                "RDEPEND": ""
            },
            "app-misc/Y-1": {
                "KEYWORDS": "~x86"
            },
            "app-misc/X-1": {},
            "app-misc/W-1": {},
        }
        installed = {
            "dev-libs/A-1": {},
            "dev-libs/B-1.1": {},
        }

        test_cases = (
            ResolverPlaygroundTestCase(["dev-libs/A"],
                                       success=True,
                                       mergelist=["dev-libs/A-1"]),
            ResolverPlaygroundTestCase(["=dev-libs/A-2"],
                                       options={"--autounmask": 'n'},
                                       success=False),
            ResolverPlaygroundTestCase(["dev-libs/A"],
                                       options={"--noreplace": True},
                                       success=True,
                                       mergelist=[]),
            ResolverPlaygroundTestCase(["dev-libs/B"],
                                       options={"--noreplace": True},
                                       success=True,
                                       mergelist=[]),
            ResolverPlaygroundTestCase(["dev-libs/B"],
                                       options={"--update": True},
                                       success=True,
                                       mergelist=["dev-libs/B-1.2"]),
            ResolverPlaygroundTestCase(
                ["app-misc/Z"],
                success=True,
                mergelist=["app-misc/W-1", "app-misc/X-1", "app-misc/Z-1"]),
        )

        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.cleanup()
Ejemplo n.º 4
0
    def testAutounmaskKeepMasks(self):

        ebuilds = {
            "app-text/A-1": {},
        }

        test_cases = (
            #Test mask and keyword changes.
            ResolverPlaygroundTestCase(["app-text/A"],
                                       options={
                                           "--autounmask": True,
                                           "--autounmask-keep-masks": "y"
                                       },
                                       success=False),
            ResolverPlaygroundTestCase(["app-text/A"],
                                       options={
                                           "--autounmask": True,
                                           "--autounmask-keep-masks": "n"
                                       },
                                       success=False,
                                       mergelist=["app-text/A-1"],
                                       needed_p_mask_changes=["app-text/A-1"]),
        )

        profile = {
            "package.mask": ("app-text/A", ),
        }

        playground = ResolverPlayground(ebuilds=ebuilds, profile=profile)

        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()
Ejemplo n.º 5
0
	def testDepcleanWithExcludeAndSlots(self):

		installed = {
			"dev-libs/Z-1": { "SLOT": 1},
			"dev-libs/Z-2": { "SLOT": 2},
			"dev-libs/Y-1": { "RDEPEND": "=dev-libs/Z-1", "SLOT": 1 },
			"dev-libs/Y-2": { "RDEPEND": "=dev-libs/Z-2", "SLOT": 2 },
			}

		world=["dev-libs/Y"]

		test_cases = (
			#Without --exclude.
			ResolverPlaygroundTestCase(
				[],
				options={"--depclean": True},
				success=True,
				cleanlist=["dev-libs/Y-1", "dev-libs/Z-1"]),
			ResolverPlaygroundTestCase(
				[],
				options={"--depclean": True, "--exclude": ["dev-libs/Z"]},
				success=True,
				cleanlist=["dev-libs/Y-1"]),
			ResolverPlaygroundTestCase(
				[],
				options={"--depclean": True, "--exclude": ["dev-libs/Y"]},
				success=True,
				cleanlist=[]),
			)

		playground = ResolverPlayground(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()
Ejemplo n.º 6
0
    def testLicenseMaskedVirtualSlotUpdate(self):

        ebuilds = {
            "dev-java/oracle-jdk-bin-1.7.0": {"SLOT": "1.7", "LICENSE": "TEST"},
            "dev-java/sun-jdk-1.6.0": {"SLOT": "1.6", "LICENSE": "TEST"},
            "dev-java/icedtea-6.1.10.3": {"SLOT": "6"},
            "app-misc/java-app-1": {"RDEPEND": ">=virtual/jdk-1.6.0"},
            "virtual/jdk-1.6.0": {
                "SLOT": "1.6",
                "RDEPEND": "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )",
            },
            "virtual/jdk-1.7.0": {
                "SLOT": "1.7",
                "RDEPEND": "|| ( =dev-java/oracle-jdk-bin-1.7.0* )",
            },
        }

        installed = {
            "app-misc/java-app-1": {"RDEPEND": ">=virtual/jdk-1.6.0"},
            "dev-java/icedtea-6.1.10.3": {"SLOT": "6"},
            "virtual/jdk-1.6.0": {
                "SLOT": "1.6",
                "RDEPEND": "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )",
            },
        }

        world = ("app-misc/java-app",)

        test_cases = (
            # Bug #382557 - Don't pull in the virtual/jdk-1.7.0 slot update
            # since its dependencies can only be satisfied by a package that
            # is masked by license.
            ResolverPlaygroundTestCase(
                ["@world"],
                options={"--update": True, "--deep": True},
                success=True,
                mergelist=[],
            ),
        )

        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()
Ejemplo n.º 7
0
    def testSimpleDepclean(self):

        ebuilds = {
            "dev-libs/A-1": {
                "EAPI": "5",
                "RDEPEND": "dev-libs/B:=",
            },
            "dev-libs/B-1": {
                "EAPI": "5",
                "RDEPEND": "dev-libs/A",
            },
            "dev-libs/C-1": {},
        }

        installed = {
            "dev-libs/A-1": {
                "EAPI": "5",
                "RDEPEND": "dev-libs/B:0/0=",
            },
            "dev-libs/B-1": {
                "EAPI": "5",
                "RDEPEND": "dev-libs/A",
            },
            "dev-libs/C-1": {},
        }

        world = ("dev-libs/C", )

        test_cases = (
            # Remove dev-libs/A-1 first because of dev-libs/B:0/0= (built
            # slot-operator dep).
            ResolverPlaygroundTestCase(
                [],
                options={"--depclean": True},
                success=True,
                ordered=True,
                cleanlist=["dev-libs/A-1", "dev-libs/B-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()
Ejemplo n.º 8
0
    def testUnnecessarySlotUpgrade(self):
        ebuilds = {
            "app-misc/a-1": {
                "EAPI":
                "8",
                "RDEPEND":
                "|| ( dev-lang/python:3.10 dev-lang/python:3.9 ) || ( dev-lang/python:3.10 dev-lang/python:3.9 )",
            },
            "dev-lang/python-3.9": {
                "SLOT": "3.9"
            },
            "dev-lang/python-3.10": {
                "SLOT": "3.10"
            },
        }

        installed = {
            "dev-lang/python-3.9": {
                "SLOT": "3.9"
            },
        }

        test_cases = (
            # Test bug 828136, where an unnecessary python slot upgrade
            # was triggered.
            ResolverPlaygroundTestCase(
                [
                    "app-misc/a",
                ],
                success=True,
                mergelist=(
                    "dev-lang/python-3.10",
                    "app-misc/a-1",
                ),
            ), )

        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()
Ejemplo n.º 9
0
    def testConnectedCollision(self):
        """
        Ensure that we are able to solve connected slot conflicts
        which cannot be solved each on their own.
        """
        ebuilds = {
            "dev-libs/A-1": {
                "RDEPEND": "=dev-libs/X-1"
            },
            "dev-libs/B-1": {
                "RDEPEND": "dev-libs/X"
            },
            "dev-libs/X-1": {
                "RDEPEND": "=dev-libs/Y-1"
            },
            "dev-libs/X-2": {
                "RDEPEND": "=dev-libs/Y-2"
            },
            "dev-libs/Y-1": {
                "PDEPEND": "=dev-libs/X-1"
            },
            "dev-libs/Y-2": {
                "PDEPEND": "=dev-libs/X-2"
            },
        }

        test_cases = (ResolverPlaygroundTestCase(
            ["dev-libs/A", "dev-libs/B"],
            all_permutations=True,
            options={"--backtrack": 0},
            success=True,
            ambiguous_merge_order=True,
            mergelist=[
                "dev-libs/Y-1",
                "dev-libs/X-1",
                ("dev-libs/A-1", "dev-libs/B-1"),
            ],
        ), )

        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.cleanup()
Ejemplo n.º 10
0
    def test_no_forced_use_test(self):
        """
        Test that FEATURES=test no longer forces USE=test.
        """
        user_config = {"make.conf": ("FEATURES=test", 'USE="-test"')}
        test_case = ResolverPlaygroundTestCase(
            ["dev-libs/A"], options={}, success=True, mergelist=["dev-libs/A-1"]
        )

        playground = ResolverPlayground(
            ebuilds=self.ebuilds, user_config=user_config, debug=False
        )
        try:
            playground.run_TestCase(test_case)
            self.assertEqual(test_case.test_success, True, test_case.fail_msg)
        finally:
            playground.cleanup()
Ejemplo n.º 11
0
    def testAutounmaskUseBreakage(self):

        ebuilds = {
            "app-misc/A-0": {
                "EAPI": "5",
                "RDEPEND": "app-misc/D[-foo]",
            },
            "app-misc/B-0": {
                "EAPI": "5",
                "RDEPEND": "app-misc/D[foo]"
            },
            "app-misc/C-0": {
                "EAPI": "5",
                "RDEPEND": ">=app-misc/D-1"
            },
            "app-misc/D-0": {
                "EAPI": "5",
                "IUSE": "foo"
            },
            "app-misc/D-1": {
                "EAPI": "5",
                "IUSE": "bar"
            },
        }

        test_cases = (

            # Bug 510270
            # _solve_non_slot_operator_slot_conflicts throws
            # IndexError: tuple index out of range
            # due to autounmask USE breakage.
            ResolverPlaygroundTestCase(
                ["app-misc/C", "app-misc/B", "app-misc/A"],
                all_permutations=True,
                success=False,
                ambiguous_slot_collision_solutions=True,
                slot_collision_solutions=[None, []]), )

        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.cleanup()
    def testRegularSlotChangeWithoutRevBumpTestCase(self):

        ebuilds = {
            "dev-libs/boost-1.52.0": {"SLOT": "0"},
            "app-office/libreoffice-4.0.0.2": {
                "EAPI": "5",
                "DEPEND": ">=dev-libs/boost-1.46:=",
                "RDEPEND": ">=dev-libs/boost-1.46:=",
            },
        }

        binpkgs = {
            "dev-libs/boost-1.52.0": {"SLOT": "1.52"},
        }

        installed = {
            "dev-libs/boost-1.52.0": {"SLOT": "1.52"},
        }

        world = []

        test_cases = (
            # Test that @__auto_slot_operator_replace_installed__
            # pulls in the available slot, even though it's
            # different from the installed slot (0 instead of 1.52).
            ResolverPlaygroundTestCase(
                ["app-office/libreoffice"],
                options={"--oneshot": True, "--usepkg": True},
                success=True,
                mergelist=["dev-libs/boost-1.52.0", "app-office/libreoffice-4.0.0.2"],
            ),
        )

        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.cleanup()
Ejemplo n.º 13
0
    def testVirtualCmakeBootstrapUseConditional(self):

        ebuilds = {
            "dev-libs/jsoncpp-1.9.2": {
                "EAPI": "7",
                "BDEPEND": "virtual/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=",
            },
            "virtual/cmake-0": {
                "EAPI":
                "7",
                "IUSE":
                "+bootstrap",
                "RDEPEND":
                "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",
                    "virtual/cmake-0",
                    "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()
    def testVirtualCmakeBootstrapUseConditional(self):

        ebuilds = {
            'dev-libs/jsoncpp-1.9.2': {
                'EAPI': '7',
                'BDEPEND': 'virtual/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=',
            },
            'virtual/cmake-0': {
                'EAPI':
                '7',
                'IUSE':
                '+bootstrap',
                'RDEPEND':
                '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', 'virtual/cmake-0',
                    '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()
Ejemplo n.º 15
0
    def testOnlydeps(self):
        ebuilds = {
            "app-misc/A-1": {
                "EAPI": "5",
                "SLOT": "1",
                "DEPEND": "|| ( app-misc/B app-misc/A:1 )",
            },
            "app-misc/A-2": {
                "EAPI": "5",
                "SLOT": "2",
            },
            "app-misc/B-0": {
                "EAPI": "5",
            },
        }

        installed = {
            "app-misc/A-2": {
                "EAPI": "5",
                "SLOT": "2",
            }
        }

        test_cases = (
            # bug 524916 - direct circular dep should not pull
            # in an onlydeps node when possible
            ResolverPlaygroundTestCase(
                ["app-misc/A:1"],
                success=True,
                options={"--onlydeps": True},
                mergelist=["app-misc/B-0"],
            ), )

        playground = ResolverPlayground(ebuilds=ebuilds,
                                        installed=installed,
                                        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()
Ejemplo n.º 16
0
    def test_default_use_test(self):
        """
		Test that FEATURES=test enables USE=test by default.
		"""
        user_config = {"make.conf": ("FEATURES=test", "USE=\"\"")}
        test_case = ResolverPlaygroundTestCase(
            ["dev-libs/A"],
            options={},
            success=True,
            mergelist=["dev-libs/B-1", "dev-libs/A-1"])

        playground = ResolverPlayground(ebuilds=self.ebuilds,
                                        user_config=user_config,
                                        debug=False)
        try:
            playground.run_TestCase(test_case)
            self.assertEqual(test_case.test_success, True, test_case.fail_msg)
        finally:
            playground.cleanup()
Ejemplo n.º 17
0
    def test_newuse(self):
        """
        Test that --newuse now detects USE=test changes.
        """
        user_config = {"make.conf": ("FEATURES=test", 'USE=""')}
        test_case = ResolverPlaygroundTestCase(
            ["dev-libs/A"],
            options={"--newuse": True, "--selective": True},
            success=True,
            mergelist=["dev-libs/B-1", "dev-libs/A-1"],
        )

        playground = ResolverPlayground(
            ebuilds=self.ebuilds, user_config=user_config, debug=False
        )
        try:
            playground.run_TestCase(test_case)
            self.assertEqual(test_case.test_success, True, test_case.fail_msg)
        finally:
            playground.cleanup()
Ejemplo n.º 18
0
    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 was given
            # even though an || preference adjustment would solve the problem
            # by pulling in pypy-exe-bin instead of pypy-exe.
            ResolverPlaygroundTestCase(
                ['dev-python/pypy'],
                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()
Ejemplo n.º 19
0
    def testBacktrackWithoutUpdates(self):
        """
		If --update is not given we might have to mask the old installed version later.
		"""

        ebuilds = {
            "dev-libs/A-1": {
                "DEPEND": "dev-libs/Z"
            },
            "dev-libs/B-1": {
                "DEPEND": ">=dev-libs/Z-2"
            },
            "dev-libs/Z-1": {},
            "dev-libs/Z-2": {},
        }

        installed = {
            "dev-libs/Z-1": {
                "USE": ""
            },
        }

        test_cases = (ResolverPlaygroundTestCase(["dev-libs/B", "dev-libs/A"],
                                                 all_permutations=True,
                                                 mergelist=[
                                                     "dev-libs/Z-2",
                                                     "dev-libs/B-1",
                                                     "dev-libs/A-1",
                                                 ],
                                                 ignore_mergelist_order=True,
                                                 success=True), )

        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.cleanup()
Ejemplo n.º 20
0
    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 was given
            # even though an || preference adjustment would solve the problem
            # by pulling in pypy-exe-bin instead of pypy-exe.
            ResolverPlaygroundTestCase(
                ["dev-python/pypy"],
                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()
Ejemplo n.º 21
0
    def testBacktrackMissedUpdates(self):
        """
		An update is missed due to a dependency on an older version.
		"""

        ebuilds = {
            "dev-libs/A-1": {},
            "dev-libs/A-2": {},
            "dev-libs/B-1": {
                "RDEPEND": "<=dev-libs/A-1"
            },
        }

        installed = {
            "dev-libs/A-1": {
                "USE": ""
            },
            "dev-libs/B-1": {
                "USE": "",
                "RDEPEND": "<=dev-libs/A-1"
            },
        }

        options = {'--update': True, '--deep': True, '--selective': True}

        test_cases = (ResolverPlaygroundTestCase(["dev-libs/A", "dev-libs/B"],
                                                 options=options,
                                                 all_permutations=True,
                                                 mergelist=[],
                                                 success=True), )

        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.cleanup()
Ejemplo n.º 22
0
    def testSolveNonSlotOperatorSlotConflicts(self):

        ebuilds = {
            "app-misc/A-1": {"EAPI": "5", "SLOT": "0/1", "PDEPEND": "app-misc/B"},
            "app-misc/A-2": {"EAPI": "5", "SLOT": "0/2", "PDEPEND": "app-misc/B"},
            "app-misc/B-0": {"EAPI": "5", "RDEPEND": "app-misc/A:="},
        }

        installed = {
            "app-misc/A-1": {"EAPI": "5", "SLOT": "0/1", "PDEPEND": "app-misc/B"},
            "app-misc/B-0": {"EAPI": "5", "RDEPEND": "app-misc/A:0/1="},
        }

        world = ["app-misc/A"]

        test_cases = (
            # bug 522084
            # In this case, _solve_non_slot_operator_slot_conflicts
            # removed both versions of app-misc/A from the graph, since
            # they didn't have any non-conflict parents (except for
            # @selected which matched both instances). The result was
            # a missed update.
            ResolverPlaygroundTestCase(
                ["@world"],
                options={"--update": True, "--deep": True},
                success=True,
                mergelist=["app-misc/A-2", "app-misc/B-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.cleanup()
    def testBacktrackingGoodVersionFirst(self):
        """
        When backtracking due to slot conflicts, we masked the version that has been pulled
        in first. This is not always a good idea. Mask the highest version instead.
        """

        ebuilds = {
            "dev-libs/A-1": {
                "DEPEND": "=dev-libs/C-1 dev-libs/B"
            },
            "dev-libs/B-1": {
                "DEPEND": "=dev-libs/C-1"
            },
            "dev-libs/B-2": {
                "DEPEND": "=dev-libs/C-2"
            },
            "dev-libs/C-1": {},
            "dev-libs/C-2": {},
        }

        test_cases = (ResolverPlaygroundTestCase(
            ["dev-libs/A"],
            mergelist=[
                "dev-libs/C-1",
                "dev-libs/B-1",
                "dev-libs/A-1",
            ],
            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()
Ejemplo n.º 24
0
	def testDepcleanWithDeps(self):
		ebuilds = {
			"dev-libs/A-1": { "RDEPEND": "dev-libs/C" },
			"dev-libs/B-1": { "RDEPEND": "dev-libs/D" },
			"dev-libs/C-1": {},
			"dev-libs/D-1": { "RDEPEND": "dev-libs/E" },
			"dev-libs/E-1": { "RDEPEND": "dev-libs/F" },
			"dev-libs/F-1": {},
			}
		installed = {
			"dev-libs/A-1": { "RDEPEND": "dev-libs/C" },
			"dev-libs/B-1": { "RDEPEND": "dev-libs/D" },
			"dev-libs/C-1": {},
			"dev-libs/D-1": { "RDEPEND": "dev-libs/E" },
			"dev-libs/E-1": { "RDEPEND": "dev-libs/F" },
			"dev-libs/F-1": {},
			}

		world = (
			"dev-libs/A",
			)

		test_cases = (
			ResolverPlaygroundTestCase(
				[],
				options={"--depclean": True},
				success=True,
				cleanlist=["dev-libs/B-1", "dev-libs/D-1",
					"dev-libs/E-1", "dev-libs/F-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()
    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()
Ejemplo n.º 26
0
	def testRequiredUseOrDeps(self):
		
		ebuilds = {
			"dev-libs/A-1": { "IUSE": "+x +y", "REQUIRED_USE": "^^ ( x y )", "EAPI": "4" },
			"dev-libs/B-1": { "IUSE": "+x +y", "REQUIRED_USE": "",           "EAPI": "4" },
			"app-misc/p-1": { "RDEPEND": "|| ( =dev-libs/A-1 =dev-libs/B-1 )" },
			}

		test_cases = (
				# This should fail and show a REQUIRED_USE error for
				# dev-libs/A-1, since this choice it preferred.
				ResolverPlaygroundTestCase(
					["=app-misc/p-1"],
					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()
Ejemplo n.º 27
0
	def testVirtualWine(self):
		ebuilds = {
			'virtual/wine-0-r6': {
				'RDEPEND': '|| ( app-emulation/wine-staging app-emulation/wine-any ) '
					'|| ( app-emulation/wine-vanilla app-emulation/wine-staging app-emulation/wine-any )'
			},
			'app-emulation/wine-staging-4': {},
			'app-emulation/wine-any-4': {},
			'app-emulation/wine-vanilla-4': {},
		}

		test_cases = (
			# Test bug 701996, where separate disjunctions where not
			# converted to DNF, causing both wine-vanilla and
			# wine-staging to be pulled in.
			ResolverPlaygroundTestCase(
				[
					'virtual/wine',
				],
				success=True,
				mergelist=(
					'app-emulation/wine-staging-4',
					'virtual/wine-0-r6',
				),
			),
		)

		playground = ResolverPlayground(debug=False, 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.debug = False
			playground.cleanup()
Ejemplo n.º 28
0
	def testDepcleanWithInstalledMasked(self):
		"""
		Test case for bug 332719.
		emerge --declean ignores that B is masked by license and removes C.
		The next emerge -uDN world doesn't take B and installs C again.
		"""
		ebuilds = {
			"dev-libs/A-1": { "RDEPEND": "|| ( dev-libs/B dev-libs/C )" },
			"dev-libs/B-1": { "LICENSE": "TEST", "KEYWORDS": "x86" },
			"dev-libs/C-1": { "KEYWORDS": "x86" },
			}
		installed = {
			"dev-libs/A-1": { "RDEPEND": "|| ( dev-libs/B dev-libs/C )" },
			"dev-libs/B-1": { "LICENSE": "TEST", "KEYWORDS": "x86" },
			"dev-libs/C-1": { "KEYWORDS": "x86" },
			}

		world = (
			"dev-libs/A",
			)

		test_cases = (
			ResolverPlaygroundTestCase(
				[],
				options={"--depclean": True},
				success=True,
				#cleanlist=["dev-libs/C-1"]),
				cleanlist=["dev-libs/B-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()
Ejemplo n.º 29
0
    def testWithTestDeps(self):
        ebuilds = {
            "app-misc/A-0": {
                "EAPI": "5",
                "IUSE": "test",
                "DEPEND": "test? ( app-misc/B )"
            },
            "app-misc/B-0": {
                "EAPI": "5",
                "IUSE": "test",
                "DEPEND": "test? ( app-misc/C )"
            },
            "app-misc/C-0": {
                "EAPI": "5",
            }
        }

        test_cases = (
            # Test that --with-test-deps only pulls in direct
            # test deps of packages matched by arguments.
            ResolverPlaygroundTestCase(["app-misc/A"],
                                       success=True,
                                       options={
                                           "--onlydeps": True,
                                           "--with-test-deps": True
                                       },
                                       mergelist=["app-misc/B-0"]), )

        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.cleanup()
Ejemplo n.º 30
0
    def testBacktracking(self):
        ebuilds = {
            "dev-libs/A-1": {},
            "dev-libs/A-2": {},
            "dev-libs/B-1": {
                "DEPEND": "dev-libs/A"
            },
        }

        test_cases = (ResolverPlaygroundTestCase(
            ["=dev-libs/A-1", "dev-libs/B"],
            all_permutations=True,
            mergelist=["dev-libs/A-1", "dev-libs/B-1"],
            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()