Ejemplo n.º 1
0
    def system_package_tool_try_multiple_test(self):
        class RunnerMultipleMock(object):
            def __init__(self, expected=None):
                self.calls = 0
                self.expected = expected

            def __call__(self, command, output):  # @UnusedVariable
                self.calls += 1
                return 0 if command in self.expected else 1

        packages = ["a_package", "another_package", "yet_another_package"]
        with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
            runner = RunnerMultipleMock(['dpkg-query -W -f=\'${Status}\' another_package | '
                                         'grep -q "ok installed"'])
            spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
            spt.install(packages)
            self.assertEqual(2, runner.calls)
            runner = RunnerMultipleMock(["sudo -A apt-get update",
                                         "sudo -A apt-get install -y --no-install-recommends"
                                         " yet_another_package"])
            spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
            spt.install(packages)
            self.assertEqual(7, runner.calls)

            runner = RunnerMultipleMock(["sudo -A apt-get update"])
            spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
            with self.assertRaises(ConanException):
                spt.install(packages)
            self.assertEqual(7, runner.calls)
Ejemplo n.º 2
0
    def test_system_package_tool_try_multiple(self):
        packages = ["a_package", "another_package", "yet_another_package"]
        with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
            runner = RunnerMultipleMock([
                'dpkg-query -W -f=\'${Status}\' another_package | '
                'grep -q "ok installed"'
            ])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            spt.install(packages)
            self.assertEqual(2, runner.calls)
            runner = RunnerMultipleMock([
                "sudo -A apt-get update",
                "sudo -A apt-get install -y --no-install-recommends"
                " yet_another_package"
            ])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            spt.install(packages)
            self.assertEqual(7, runner.calls)

            runner = RunnerMultipleMock(["sudo -A apt-get update"])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            with self.assertRaises(ConanException):
                spt.install(packages)
            self.assertEqual(7, runner.calls)
Ejemplo n.º 3
0
 def test_empty_variants_and_packages(self):
     packages = [(),]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock()
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out),
                                 output=self.out)
         spt.install_packages(packages)
         self.assertEqual(0, runner.calls)
Ejemplo n.º 4
0
 def test_install_all_multiple_package_list(self):
     """ Separated string list must be treated as full package list to be installed
     """
     packages = "varianta variantb", "variantc variantd"
     runner = RunnerMultipleMock([])
     spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
     with self.assertRaises(ConanException) as error:
         spt.install_packages(packages)
         self.assertEqual("Each string must contain only one package to be installed."
                          " Use a list instead e.g. ['foo', 'bar'].", str(error.exception))
Ejemplo n.º 5
0
 def test_install_all_packages(self):
     """ SystemPackageTool must install all packages
     """
     # No packages installed
     packages = ["a_package", "another_package", "yet_another_package"]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock(["sudo -A apt-get update",
                                      "sudo -A apt-get install -y --no-install-recommends"
                                      " a_package another_package yet_another_package",
                                      ])
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
         spt.install_packages(packages)
         self.assertEqual(5, runner.calls)
Ejemplo n.º 6
0
 def test_installed_variant_and_install_packages(self):
     """ Only packages must be installed. Variants are already installed
     """
     packages = [("varianta", "variantb", "variantc"), "a_package", "another_package"]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock(['dpkg-query -W -f=\'${Status}\' varianta | '
                                      'grep -q "ok installed"',
                                      "sudo -A apt-get update",
                                      "sudo -A apt-get install -y --no-install-recommends"
                                      " a_package another_package",
                                      ])
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
         spt.install_packages(packages)
         self.assertEqual(5, runner.calls)
Ejemplo n.º 7
0
 def test_install_few_packages(self):
     """ SystemPackageTool must install 2 packages only
     """
     packages = ["a_package", "another_package", "yet_another_package"]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock(['dpkg-query -W -f=\'${Status}\' a_package | '
                                      'grep -q "ok installed"',
                                      "sudo -A apt-get update",
                                      "sudo -A apt-get install -y --no-install-recommends"
                                      " another_package yet_another_package",
                                      ])
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
         spt.install_packages(packages)
         self.assertEqual(5, runner.calls)
Ejemplo n.º 8
0
 def test_variants_and_packages_installed(self):
     """ Install nothing, all is already installed
     """
     packages = [("varianta", "variantb", "variantc"), "a_package", "another_package"]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock(['dpkg-query -W -f=\'${Status}\' varianta | '
                                      'grep -q "ok installed"',
                                      'dpkg-query -W -f=\'${Status}\' a_package | '
                                      'grep -q "ok installed"',
                                      'dpkg-query -W -f=\'${Status}\' another_package | '
                                      'grep -q "ok installed"',
                                      ])
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
         spt.install_packages(packages)
         self.assertEqual(3, runner.calls)
Ejemplo n.º 9
0
 def test_install_variants_and_packages(self):
     """ SystemPackageTool must install one of variants and all packages at same list
     """
     packages = [("varianta", "variantb", "variantc"), "a_package", "another_package"]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock(["sudo -A apt-get update",
                                      "sudo -A apt-get install -y --no-install-recommends"
                                      " varianta",
                                      "sudo -A apt-get update",
                                      "sudo -A apt-get install -y --no-install-recommends"
                                      " a_package another_package",
                                      ])
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
         spt.install_packages(packages)
         self.assertEqual(8, runner.calls)
Ejemplo n.º 10
0
 def test_packages_installed(self):
     """ SystemPackageTool must not install. All packages are installed.
     """
     packages = ["a_package", "another_package", "yet_another_package"]
     with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
         runner = RunnerMultipleMock(['dpkg-query -W -f=\'${Status}\' a_package | '
                                      'grep -q "ok installed"',
                                      'dpkg-query -W -f=\'${Status}\' another_package | '
                                      'grep -q "ok installed"',
                                      'dpkg-query -W -f=\'${Status}\' yet_another_package | '
                                      'grep -q "ok installed"',
                                      ])
         spt = SystemPackageTool(runner=runner, tool=AptTool(output=self.out), output=self.out)
         spt.install_packages(packages)
         self.assertEqual(3, runner.calls)
Ejemplo n.º 11
0
    def system_package_tool_mode_test(self):
        """
        System Package Tool mode is defined by CONAN_SYSREQUIRES_MODE env variable.
        Allowed values: (enabled, verify, disabled). Parser accepts it in lower/upper
        case or any combination.
        """
        class RunnerMultipleMock(object):
            def __init__(self, expected=None):
                self.calls = 0
                self.expected = expected

            def __call__(self, command, *args, **kwargs):  # @UnusedVariable
                self.calls += 1
                return 0 if command in self.expected else 1

        packages = ["a_package", "another_package", "yet_another_package"]

        # Check invalid mode raises ConanException
        with tools.environment_append({
                "CONAN_SYSREQUIRES_MODE": "test_not_valid_mode",
                "CONAN_SYSREQUIRES_SUDO": "True"
        }):
            runner = RunnerMultipleMock([])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            with self.assertRaises(ConanException) as exc:
                spt.install(packages)
            self.assertIn(
                "CONAN_SYSREQUIRES_MODE=test_not_valid_mode is not allowed",
                str(exc.exception))
            self.assertEqual(0, runner.calls)

        # Check verify mode, a package report should be shown in output and ConanException raised.
        # No system packages are installed
        with tools.environment_append({
                "CONAN_SYSREQUIRES_MODE": "VeRiFy",
                "CONAN_SYSREQUIRES_SUDO": "True"
        }):
            packages = [
                "verify_package", "verify_another_package",
                "verify_yet_another_package"
            ]
            runner = RunnerMultipleMock(["sudo -A apt-get update"])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            with self.assertRaises(ConanException) as exc:
                spt.install(packages)
            self.assertIn("Aborted due to CONAN_SYSREQUIRES_MODE=",
                          str(exc.exception))
            self.assertIn('\n'.join(packages), self.out)
            self.assertEqual(3, runner.calls)

        # Check disabled mode, a package report should be displayed in output.
        # No system packages are installed
        with tools.environment_append({
                "CONAN_SYSREQUIRES_MODE": "DiSaBlEd",
                "CONAN_SYSREQUIRES_SUDO": "True"
        }):
            packages = [
                "disabled_package", "disabled_another_package",
                "disabled_yet_another_package"
            ]
            runner = RunnerMultipleMock(["sudo -A apt-get update"])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            spt.install(packages)
            self.assertIn('\n'.join(packages), self.out)
            self.assertEqual(0, runner.calls)

        # Check enabled, default mode, system packages must be installed.
        with tools.environment_append({
                "CONAN_SYSREQUIRES_MODE": "EnAbLeD",
                "CONAN_SYSREQUIRES_SUDO": "True"
        }):
            runner = RunnerMultipleMock(["sudo -A apt-get update"])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out)
            with self.assertRaises(ConanException) as exc:
                spt.install(packages)
            self.assertNotIn("CONAN_SYSREQUIRES_MODE", str(exc.exception))
            self.assertEqual(7, runner.calls)

        # Check default_mode. The environment variable is not set and should behave like
        # the default_mode
        with tools.environment_append({
                "CONAN_SYSREQUIRES_MODE": None,
                "CONAN_SYSREQUIRES_SUDO": "True"
        }):
            packages = [
                "verify_package", "verify_another_package",
                "verify_yet_another_package"
            ]
            runner = RunnerMultipleMock(["sudo -A apt-get update"])
            spt = SystemPackageTool(runner=runner,
                                    tool=AptTool(output=self.out),
                                    output=self.out,
                                    default_mode="verify")
            with self.assertRaises(ConanException) as exc:
                spt.install(packages)
            self.assertIn("Aborted due to CONAN_SYSREQUIRES_MODE=",
                          str(exc.exception))
            self.assertIn('\n'.join(packages), self.out)
            self.assertEqual(3, runner.calls)