Ejemplo n.º 1
0
    def test_validated_library(self):
        with distribution(executables=EXE("bin/java")) as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(
                    bin_path=os.path.join(dist_root, "bin")).find_libs(
                        ["tools.jar"])

        with distribution(executables=EXE("bin/java"),
                          files="lib/tools.jar") as dist_root:
            dist = Distribution(bin_path=os.path.join(dist_root, "bin"))
            self.assertEqual([os.path.join(dist_root, "lib", "tools.jar")],
                             dist.find_libs(["tools.jar"]))

        with distribution(
                executables=[EXE("jre/bin/java"),
                             EXE("bin/javac")],
                files=["lib/tools.jar", "jre/lib/rt.jar"],
                java_home="jre",
        ) as dist_root:
            dist = Distribution(bin_path=os.path.join(dist_root, "jre/bin"))
            self.assertEqual(
                [
                    os.path.join(dist_root, "lib", "tools.jar"),
                    os.path.join(dist_root, "jre", "lib", "rt.jar"),
                ],
                dist.find_libs(["tools.jar", "rt.jar"]),
            )
Ejemplo n.º 2
0
    def test_validated_binary(self):
        with distribution(files='bin/jar',
                          executables=EXE('bin/java')) as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(
                    bin_path=os.path.join(dist_root, 'bin')).binary('jar')

        with distribution(
                executables=[EXE('bin/java'), EXE('bin/jar')]) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, 'bin')).binary('jar')

        with distribution(executables=[EXE('jre/bin/java'),
                                       EXE('bin/jar')],
                          java_home='jre') as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(bin_path=os.path.join(dist_root, 'jre',
                                                   'bin')).binary('jar')

        with distribution(executables=[
                EXE('jre/bin/java'),
                EXE('bin/jar'),
                EXE('bin/javac')
        ],
                          java_home='jre') as dist_root:
            Distribution(
                bin_path=os.path.join(dist_root, 'jre', 'bin')).binary('jar')

        with distribution(executables=[
                EXE('jre/bin/java'),
                EXE('jre/bin/java_vm'),
                EXE('bin/javac')
        ],
                          java_home='jre') as dist_root:
            Distribution(bin_path=os.path.join(dist_root, 'jre',
                                               'bin')).binary('java_vm')
Ejemplo n.º 3
0
    def test_validate_jdk(self):
        with pytest.raises(Distribution.Error):
            with self.distribution(executables=self.exe('java')) as jdk:
                Distribution(bin_path=jdk, jdk=True).validate()

        with self.distribution(
                executables=[self.exe('java'),
                             self.exe('javac')]) as jdk:
            Distribution(bin_path=jdk, jdk=True).validate()
Ejemplo n.º 4
0
    def test_validated_binary(self):
        with pytest.raises(Distribution.Error):
            with self.distribution(files='jar',
                                   executables=self.exe('java')) as jdk:
                Distribution(bin_path=jdk).binary('jar')

        with self.distribution(executables=[self.exe('java'),
                                            self.exe('jar')]) as jdk:
            Distribution(bin_path=jdk).binary('jar')
Ejemplo n.º 5
0
  def test_validate_jdk(self):
    with distribution(executables=EXE('bin/java')) as dist_root:
      with self.assertRaises(Distribution.Error):
        Distribution(bin_path=os.path.join(dist_root, 'bin'), jdk=True).validate()

    with distribution(executables=[EXE('bin/java'), EXE('bin/javac')]) as dist_root:
      Distribution(bin_path=os.path.join(dist_root, 'bin'), jdk=True).validate()

    with distribution(executables=[EXE('jre/bin/java'), EXE('bin/javac')],
                      java_home='jre') as dist_root:
      Distribution(bin_path=os.path.join(dist_root, 'jre/bin'), jdk=True).validate()
Ejemplo n.º 6
0
    def test_validate_basic(self):
        with distribution() as dist_root:
            with self.assertRaises(ValueError):
                Distribution(bin_path=os.path.join(dist_root, "bin")).validate()

        with distribution(files="bin/java") as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(bin_path=os.path.join(dist_root, "bin")).validate()

        with distribution(executables=EXE("bin/java")) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, "bin")).validate()
Ejemplo n.º 7
0
    def test_validate_basic(self):
        with pytest.raises(Distribution.Error):
            with self.distribution() as jdk:
                Distribution(bin_path=jdk).validate()

        with pytest.raises(Distribution.Error):
            with self.distribution(files='java') as jdk:
                Distribution(bin_path=jdk).validate()

        with self.distribution(executables=self.exe('java')) as jdk:
            Distribution(bin_path=jdk).validate()
Ejemplo n.º 8
0
    def test_validate_jdk(self):
        with distribution(executables=EXE("bin/java")) as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(bin_path=os.path.join(dist_root, "bin"), jdk=True).validate()

        with distribution(executables=[EXE("bin/java"), EXE("bin/javac")]) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, "bin"), jdk=True).validate()

        with distribution(
            executables=[EXE("jre/bin/java"), EXE("bin/javac")], java_home="jre"
        ) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, "jre/bin"), jdk=True).validate()
Ejemplo n.º 9
0
  def test_validate_version(self):
    with distribution(executables=EXE('bin/java', '1.7.0_25')) as dist_root:
      with self.assertRaises(Distribution.Error):
        Distribution(bin_path=os.path.join(dist_root, 'bin'), minimum_version='1.7.0_45').validate()
    with distribution(executables=EXE('bin/java', '1.8.0_1')) as dist_root:
      with self.assertRaises(Distribution.Error):
        Distribution(bin_path=os.path.join(dist_root, 'bin'), maximum_version='1.8').validate()

    with distribution(executables=EXE('bin/java', '1.7.0_25')) as dist_root:
      Distribution(bin_path=os.path.join(dist_root, 'bin'), minimum_version='1.7.0_25').validate()
      Distribution(bin_path=os.path.join(dist_root, 'bin'),
                   minimum_version=Revision.lenient('1.6')).validate()
      Distribution(bin_path=os.path.join(dist_root, 'bin'),
                   minimum_version='1.7.0_25',
                   maximum_version='1.7.999').validate()
Ejemplo n.º 10
0
    def dist(self):
        """Return the `Distribution` selected for Zinc based on execution strategy.

    :rtype: pants.java.distribution.distribution.Distribution
    """
        underlying_dist = self.underlying_dist
        if self._execution_strategy != NailgunTaskBase.HERMETIC:
            # symlink .pants.d/.jdk -> /some/java/home/
            jdk_home_symlink = os.path.relpath(
                os.path.join(self._zinc_factory.get_options().pants_workdir,
                             '.jdk'), get_buildroot())

            # Since this code can be run in multi-threading mode due to multiple
            # zinc workers, we need to make sure the file operations below are atomic.
            with self._lock:
                # Create the symlink if it does not exist, or points to a file that doesn't exist,
                # (e.g., a JDK that is no longer present), or points to the wrong JDK.
                if (not os.path.exists(jdk_home_symlink) or
                        os.readlink(jdk_home_symlink) != underlying_dist.home):
                    safe_delete(
                        jdk_home_symlink
                    )  # Safe-delete, in case it's a broken symlink.
                    os.symlink(underlying_dist.home, jdk_home_symlink)

            return Distribution(home_path=jdk_home_symlink)
        else:
            return underlying_dist
Ejemplo n.º 11
0
    def dist(self):
        """Return the `Distribution` selected for Zinc based on execution strategy.

    :rtype: pants.java.distribution.distribution.Distribution
    """
        underlying_dist = self.underlying_dist
        if self._execution_strategy != NailgunTaskBase.HERMETIC:
            # symlink .pants.d/.jdk -> /some/java/home/
            jdk_home_symlink = os.path.relpath(
                os.path.join(self._zinc_factory.get_options().pants_workdir,
                             '.jdk'), get_buildroot())

            # Since this code can be run in multi-threading mode due to multiple
            # zinc workers, we need to make sure the file operations below is atomic.
            with self._lock:
                # Create the symlink if it does not exist
                if not os.path.exists(jdk_home_symlink):
                    os.symlink(underlying_dist.home, jdk_home_symlink)
                # Recreate if the symlink exists but does not match `underlying_dist.home`.
                elif os.readlink(jdk_home_symlink) != underlying_dist.home:
                    os.remove(jdk_home_symlink)
                    os.symlink(underlying_dist.home, jdk_home_symlink)

            return Distribution(home_path=jdk_home_symlink)
        else:
            return underlying_dist
Ejemplo n.º 12
0
  def test_validated_library(self):
    with distribution(executables=EXE('bin/java')) as dist_root:
      with self.assertRaises(Distribution.Error):
        Distribution(bin_path=os.path.join(dist_root, 'bin')).find_libs(['tools.jar'])

    with distribution(executables=EXE('bin/java'), files='lib/tools.jar') as dist_root:
      dist = Distribution(bin_path=os.path.join(dist_root, 'bin'))
      self.assertEqual([os.path.join(dist_root, 'lib', 'tools.jar')],
                       dist.find_libs(['tools.jar']))

    with distribution(executables=[EXE('jre/bin/java'), EXE('bin/javac')],
                      files=['lib/tools.jar', 'jre/lib/rt.jar'],
                      java_home='jre') as dist_root:
      dist = Distribution(bin_path=os.path.join(dist_root, 'jre/bin'))
      self.assertEqual([os.path.join(dist_root, 'lib', 'tools.jar'),
                        os.path.join(dist_root, 'jre', 'lib', 'rt.jar')],
                       dist.find_libs(['tools.jar', 'rt.jar']))
Ejemplo n.º 13
0
 def test_preferred_jvm_distributions(self):
     with temporary_dir() as strict_jdk_home:
         with temporary_dir() as non_strict_jdk_home:
             strict_cache_key = (Revision(1, 6), Revision(1, 6,
                                                          9999), False)
             non_strict_cache_key = (Revision(1, 6), None, False)
             DistributionLocator._CACHE[strict_cache_key] = Distribution(
                 home_path=strict_jdk_home)
             DistributionLocator._CACHE[
                 non_strict_cache_key] = Distribution(
                     home_path=non_strict_jdk_home)
             self.assertEqual(
                 {
                     'strict': strict_jdk_home,
                     'non_strict': non_strict_jdk_home
                 },
                 self.execute_export_json()['preferred_jvm_distributions']
                 ['java6'])
Ejemplo n.º 14
0
    def test_validate_version(self):
        with pytest.raises(Distribution.Error):
            with self.distribution(
                    executables=self.exe('java', '1.7.0_25')) as jdk:
                Distribution(bin_path=jdk,
                             minimum_version='1.7.0_45').validate()
        with pytest.raises(Distribution.Error):
            with self.distribution(
                    executables=self.exe('java', '1.8.0_1')) as jdk:
                Distribution(bin_path=jdk,
                             maximum_version='1.7.9999').validate()

        with self.distribution(
                executables=self.exe('java', '1.7.0_25')) as jdk:
            Distribution(bin_path=jdk, minimum_version='1.7.0_25').validate()
            Distribution(bin_path=jdk,
                         minimum_version=Revision.semver('1.6.0')).validate()
            Distribution(bin_path=jdk,
                         minimum_version='1.7.0_25',
                         maximum_version='1.7.999').validate()
Ejemplo n.º 15
0
 def do_test_jre_env_var(self, env_var, env_value, scrubbed=True):
   with self.jre(env_var=env_var) as jre:
     executor = SubprocessExecutor(Distribution(bin_path=jre))
     with environment_as(**{env_var: env_value}):
       self.assertEqual(env_value, os.getenv(env_var))
       process = executor.spawn(classpath=['dummy/classpath'],
                                main='dummy.main',
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE)
       _, stderr = process.communicate()
       self.assertEqual(0, process.returncode)
       self.assertEqual('' if scrubbed else env_value, stderr.decode().strip())
Ejemplo n.º 16
0
    def test_validate_version(self):
        with distribution(
                executables=EXE("bin/java", "1.7.0_25")) as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(bin_path=os.path.join(dist_root, "bin"),
                             minimum_version="1.7.0_45").validate()
        with distribution(executables=EXE("bin/java", "1.8.0_1")) as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(bin_path=os.path.join(dist_root, "bin"),
                             maximum_version="1.8").validate()

        with distribution(
                executables=EXE("bin/java", "1.7.0_25")) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, "bin"),
                         minimum_version="1.7.0_25").validate()
            Distribution(bin_path=os.path.join(dist_root, "bin"),
                         minimum_version=Revision.lenient("1.6")).validate()
            Distribution(
                bin_path=os.path.join(dist_root, "bin"),
                minimum_version="1.7.0_25",
                maximum_version="1.7.999",
            ).validate()
Ejemplo n.º 17
0
    def test_validated_binary(self):
        with distribution(files="bin/jar",
                          executables=EXE("bin/java")) as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(
                    bin_path=os.path.join(dist_root, "bin")).binary("jar")

        with distribution(
                executables=[EXE("bin/java"), EXE("bin/jar")]) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, "bin")).binary("jar")

        with distribution(executables=[EXE("jre/bin/java"),
                                       EXE("bin/jar")],
                          java_home="jre") as dist_root:
            with self.assertRaises(Distribution.Error):
                Distribution(bin_path=os.path.join(dist_root, "jre",
                                                   "bin")).binary("jar")

        with distribution(executables=[
                EXE("jre/bin/java"),
                EXE("bin/jar"),
                EXE("bin/javac")
        ],
                          java_home="jre") as dist_root:
            Distribution(
                bin_path=os.path.join(dist_root, "jre", "bin")).binary("jar")

        with distribution(
                executables=[
                    EXE("jre/bin/java"),
                    EXE("jre/bin/java_vm"),
                    EXE("bin/javac")
                ],
                java_home="jre",
        ) as dist_root:
            Distribution(bin_path=os.path.join(dist_root, "jre",
                                               "bin")).binary("java_vm")
Ejemplo n.º 18
0
  def test_validate_live(self):
    with self.assertRaises(Distribution.Error):
      Distribution(bin_path=os.path.dirname(self.JAVA), minimum_version='999.9.9').validate()
    with self.assertRaises(Distribution.Error):
      Distribution(bin_path=os.path.dirname(self.JAVA), maximum_version='0.0.1').validate()

    Distribution(bin_path=os.path.dirname(self.JAVA)).validate()
    Distribution(bin_path=os.path.dirname(self.JAVA), minimum_version='1.3.1').validate()
    Distribution(bin_path=os.path.dirname(self.JAVA), maximum_version='999.999.999').validate()
    Distribution(bin_path=os.path.dirname(self.JAVA), minimum_version='1.3.1',
                 maximum_version='999.999.999').validate()
    locator = global_subsystem_instance(DistributionLocator)
    locator.cached(jdk=False)
Ejemplo n.º 19
0
  def dist(self) -> Distribution:
    """Return the `Distribution` selected for Zinc based on execution strategy."""
    underlying_dist = self.underlying_dist
    if self._execution_strategy == NailgunTaskBase.HERMETIC:
      return underlying_dist
    # symlink .pants.d/.jdk -> /some/java/home/
    jdk_home_symlink = Path(
      self._zinc_factory.get_options().pants_workdir, '.jdk'
    ).relative_to(get_buildroot())

    # Since this code can be run in multi-threading mode due to multiple
    # zinc workers, we need to make sure the file operations below are atomic.
    with self._lock:
      # Create the symlink if it does not exist, or points to a file that doesn't exist,
      # (e.g., a JDK that is no longer present), or points to the wrong JDK.
      if not jdk_home_symlink.exists() or jdk_home_symlink.resolve() != Path(underlying_dist.home):
        safe_delete(str(jdk_home_symlink))  # Safe-delete, in case it's a broken symlink.
        safe_mkdir_for(jdk_home_symlink)
        jdk_home_symlink.symlink_to(underlying_dist.home)

    return Distribution(home_path=jdk_home_symlink)
Ejemplo n.º 20
0
    def test_validate_live(self):
        with pytest.raises(Distribution.Error):
            Distribution(bin_path=os.path.dirname(self.JAVA),
                         minimum_version='999.9.9').validate()
        with pytest.raises(Distribution.Error):
            Distribution(bin_path=os.path.dirname(self.JAVA),
                         maximum_version='0.0.1').validate()

        Distribution(bin_path=os.path.dirname(self.JAVA)).validate()
        Distribution(bin_path=os.path.dirname(self.JAVA),
                     minimum_version='1.3.1').validate()
        Distribution(bin_path=os.path.dirname(self.JAVA),
                     maximum_version='999.999.999').validate()
        Distribution(bin_path=os.path.dirname(self.JAVA),
                     minimum_version='1.3.1',
                     maximum_version='999.999.999').validate()
        Distribution.locate(jdk=False)
Ejemplo n.º 21
0
 def test_subprocess_classpath_relativize(self):
     with self.jre("FOO") as jre:
         self.do_test_executor_classpath_relativize(
             SubprocessExecutor(Distribution(bin_path=jre)))
Ejemplo n.º 22
0
 def test_validate_jre(self):
     with distribution(executables=EXE("bin/java")) as dist_root:
         Distribution(bin_path=os.path.join(dist_root, "bin"),
                      jdk=False).validate()
Ejemplo n.º 23
0
 def test_validate_live_jdk(self):
     Distribution(bin_path=os.path.dirname(self.JAVAC), jdk=True).validate()
     Distribution(bin_path=os.path.dirname(self.JAVAC),
                  jdk=True).binary("javap")
     locator = global_subsystem_instance(DistributionLocator)
     locator.cached(jdk=True)
Ejemplo n.º 24
0
 def test_validate_live_jdk(self):
     Distribution(bin_path=os.path.dirname(self.JAVAC), jdk=True).validate()
     Distribution(bin_path=os.path.dirname(self.JAVAC),
                  jdk=True).binary('javap')
     Distribution.locate(jdk=True)
Ejemplo n.º 25
0
 def test_validate_live_jdk(self):
     Distribution(bin_path=os.path.dirname(self.JAVAC), jdk=True).validate()
     Distribution(bin_path=os.path.dirname(self.JAVAC),
                  jdk=True).binary('javap')
     with subsystem_instance(DistributionLocator) as locator:
         locator.cached(jdk=True)
Ejemplo n.º 26
0
 def test_validate_jre(self):
     with distribution(executables=exe('bin/java')) as dist_root:
         Distribution(bin_path=os.path.join(dist_root, 'bin'),
                      jdk=False).validate()