diff --git a/tests/integration/test_issue_3003.py b/tests/integration/test_issue_3003.py index 7c64ad7cc..53df5b9ab 100644 --- a/tests/integration/test_issue_3003.py +++ b/tests/integration/test_issue_3003.py @@ -14,9 +14,18 @@ from pex.compatibility import commonpath from pex.interpreter import PythonInterpreter from pex.venv.virtualenv import Virtualenv -from testing import run_pex_command +from testing import make_env, run_pex_command +from testing.cli import run_pex3 from testing.pytest_utils.tmp import Tempdir +OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA = "opentelemetry-semantic-conventions==0.59b0" + + +@pytest.fixture +def pex_root(tmpdir): + # type: (Tempdir) -> str + return tmpdir.join("pex-root") + @pytest.fixture def project_dir(tmpdir): @@ -37,9 +46,11 @@ def project_dir(tmpdir): description = "Repro of issue 3003" requires-python = "==3.10.*" dependencies = [ - "opentelemetry-semantic-conventions==0.59b0", + "{opentelemetry_requirement}", ] - """ + """.format( + opentelemetry_requirement=OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA + ) ) ) touch(os.path.join(project_dir, "src", "project", "__init__.py")) @@ -77,15 +88,14 @@ def assert_opentelemetry_semconv( assert pex_root == commonpath((pex_root, output)) -def test_edge_case_semver_version_satisfied( +def test_edge_case_semver_version_satisfied_venv_repository( tmpdir, # type: Tempdir - project_dir, # type: str + pex_root, # type: str project_venv, # type: Virtualenv py310, # type: PythonInterpreter ): # type: (...) -> None - pex_root = tmpdir.join("pex-root") pex = tmpdir.join("project.pex") run_pex_command( args=[ @@ -146,7 +156,7 @@ def test_edge_case_semver_version_satisfied( "latest-compatible", "--venv-repository", project_venv.venv_dir, - "opentelemetry-semantic-conventions==0.59b0", + OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA, "-o", pex, "--no-compress", @@ -154,3 +164,199 @@ def test_edge_case_semver_version_satisfied( python=project_venv.interpreter.binary, ).assert_success() assert_opentelemetry_semconv(python=py310, pex_root=pex_root, pex=pex) + + +@pytest.fixture +def pex_lock( + project_dir, # type: str + pex_root, # type: str + py310, # type: PythonInterpreter +): + # type: (...) -> str + + lock = os.path.join(project_dir, "lock.json") + run_pex3( + "lock", + "create", + "--pex-root", + pex_root, + project_dir, + "--indent", + "2", + "-o", + lock, + python=py310.binary, + ).assert_success() + return lock + + +@pytest.fixture +def pylock_toml( + project_dir, # type: str + pex_root, # type: str + pex_lock, # type: str + py310, # type: PythonInterpreter +): + # type: (...) -> str + + pylock_toml = os.path.join(project_dir, "pylock.toml") + run_pex3( + "lock", + "export", + "--pex-root", + pex_root, + "--format", + "pep-751", + "-o", + pylock_toml, + pex_lock, + python=py310.binary, + ).assert_success() + return pylock_toml + + +def test_edge_case_semver_version_satisfied_locks( + tmpdir, # type: Tempdir + pex_root, # type: str + pex_lock, # type: str + pylock_toml, # type: str + py310, # type: PythonInterpreter +): + # type: (...) -> None + + pex = tmpdir.join("project.pex") + run_pex_command( + args=[ + "--pex-root", + pex_root, + "--runtime-pex-root", + pex_root, + "--pylock", + pylock_toml, + OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA, + "-o", + pex, + "--no-compress", + ], + python=py310.binary, + ).assert_success() + assert_opentelemetry_semconv(python=py310, pex_root=pex_root, pex=pex) + + run_pex_command( + args=[ + "--pex-root", + pex_root, + "--runtime-pex-root", + pex_root, + "--lock", + pex_lock, + OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA, + "-o", + pex, + "--no-compress", + ], + python=py310.binary, + ).assert_success() + assert_opentelemetry_semconv(python=py310, pex_root=pex_root, pex=pex) + + +@pytest.fixture +def repository_pex( + tmpdir, # type: Tempdir + pex_root, # type: str + project_dir, # type: str + py310, # type: PythonInterpreter +): + repository_pex = tmpdir.join("repository.pex") + run_pex_command( + args=[ + "--pex-root", + pex_root, + "--runtime-pex-root", + pex_root, + "--include-tools", + project_dir, + "-o", + repository_pex, + ], + python=py310.binary, + ).assert_success() + return repository_pex + + +@pytest.fixture +def pre_resolved_dists( + tmpdir, # type: Tempdir + pex_root, # type: str + repository_pex, # type: str + py310, # type: PythonInterpreter +): + # type: (...) -> str + + pre_resolved_dists = tmpdir.join("pre-resolved-dists") + subprocess.check_call( + args=[ + py310.binary, + repository_pex, + "repository", + "extract", + "--dest-dir", + pre_resolved_dists, + ], + env=make_env(PEX_TOOLS=1), + ) + return pre_resolved_dists + + +def test_edge_case_semver_version_satisfied_pex_repository( + tmpdir, # type: Tempdir + pex_root, # type: str + repository_pex, # type: str + py310, # type: PythonInterpreter +): + # type: (...) -> None + + pex = tmpdir.join("project.pex") + run_pex_command( + args=[ + "--pex-root", + pex_root, + "--runtime-pex-root", + pex_root, + "--pex-repository", + repository_pex, + OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA, + "-o", + pex, + "--no-compress", + ], + python=py310.binary, + ).assert_success() + assert_opentelemetry_semconv(python=py310, pex_root=pex_root, pex=pex) + + +def test_edge_case_semver_version_satisfied_pre_resolved_dists( + tmpdir, # type: Tempdir + pex_root, # type: str + pre_resolved_dists, # type: str + py310, # type: PythonInterpreter +): + # type: (...) -> None + + pex = tmpdir.join("project.pex") + run_pex_command( + args=[ + "--pex-root", + pex_root, + "--runtime-pex-root", + pex_root, + "--pre-resolved-dists", + pre_resolved_dists, + OPEN_TELEMETRY_SEMANTIC_CONVENTIONS_BETA, + "-o", + pex, + "--no-compress", + ], + python=py310.binary, + ).assert_success() + assert_opentelemetry_semconv(python=py310, pex_root=pex_root, pex=pex)