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"]), )
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')
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()
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')
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()
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()
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()
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()
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()
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
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
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']))
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'])
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()
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())
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()
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")
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)
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)
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)
def test_subprocess_classpath_relativize(self): with self.jre("FOO") as jre: self.do_test_executor_classpath_relativize( SubprocessExecutor(Distribution(bin_path=jre)))
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()
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)
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)
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)
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()