Skip to content

Commit 326cd51

Browse files
rwgkcursoragent
andcommitted
pathfinder: streamline compatibility test coverage
Drop redundant mocked happy-path checks that now overlap with the real-host CI matrix, and add explicit ELF/CUBIN pipeline cases so the remaining mocks stay focused on platform, ordering, and version-corner behavior. This keeps the guard-rails suite easier to maintain without giving up the synthetic coverage that real installs still cannot exercise reliably. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent c59f3cd commit 326cd51

3 files changed

Lines changed: 53 additions & 198 deletions

File tree

cuda_pathfinder/tests/test_compatibility_guard_rails.py

Lines changed: 53 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,16 @@ def _loaded_dl(abs_path: str, *, found_via: str = "CUDA_PATH") -> LoadedDL:
113113
)
114114

115115

116+
def _patch_dynamic_lib_loader(monkeypatch, **loaded_by_libname: LoadedDL) -> None:
117+
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
118+
loaded = loaded_by_libname.get(libname)
119+
if loaded is None:
120+
raise AssertionError(f"Unexpected libname: {libname!r}")
121+
return loaded
122+
123+
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
124+
125+
116126
def _located_static_lib(name: str, abs_path: str) -> LocatedStaticLib:
117127
return LocatedStaticLib(
118128
name=name,
@@ -492,53 +502,6 @@ def test_public_apis_share_process_wide_guard_rails_state(monkeypatch, tmp_path)
492502
pathfinder.find_nvidia_header_directory("nvrtc")
493503

494504

495-
def test_load_dynamic_lib_then_find_headers_same_ctk_version(monkeypatch, tmp_path):
496-
ctk_root = tmp_path / "cuda-12.9"
497-
_write_cuda_h(ctk_root, "12.9.20250531")
498-
lib_path = _touch(ctk_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
499-
hdr_dir = ctk_root / "targets" / "x86_64-linux" / "include"
500-
_touch(hdr_dir / "nvrtc.h")
501-
502-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", lambda _libname: _loaded_dl(lib_path))
503-
monkeypatch.setattr(
504-
compatibility_module,
505-
"_locate_nvidia_header_directory",
506-
lambda _libname: LocatedHeaderDir(abs_path=str(hdr_dir), found_via="CUDA_PATH"),
507-
)
508-
509-
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
510-
511-
loaded = guard_rails.load_nvidia_dynamic_lib("nvrtc")
512-
hdr_path = guard_rails.find_nvidia_header_directory("nvrtc")
513-
514-
assert loaded.abs_path == lib_path
515-
assert hdr_path == str(hdr_dir)
516-
517-
518-
def test_same_api_companions_require_exact_ctk_major_minor_match(monkeypatch, tmp_path):
519-
lib_root = tmp_path / "cuda-12.8"
520-
hdr_root = tmp_path / "cuda-12.9"
521-
_write_cuda_h(lib_root, "12.8.20250303")
522-
_write_cuda_h(hdr_root, "12.9.20250531")
523-
524-
lib_path = _touch(lib_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
525-
hdr_dir = hdr_root / "targets" / "x86_64-linux" / "include"
526-
_touch(hdr_dir / "nvrtc.h")
527-
528-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", lambda _libname: _loaded_dl(lib_path))
529-
monkeypatch.setattr(
530-
compatibility_module,
531-
"_locate_nvidia_header_directory",
532-
lambda _libname: LocatedHeaderDir(abs_path=str(hdr_dir), found_via="CUDA_PATH"),
533-
)
534-
535-
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
536-
guard_rails.load_nvidia_dynamic_lib("nvrtc")
537-
538-
with pytest.raises(CompatibilityCheckError, match=r"companion tag 'api_nvrtc'"):
539-
guard_rails.find_nvidia_header_directory("nvrtc")
540-
541-
542505
def test_same_dynamic_link_component_requires_exact_ctk_major_minor_match(monkeypatch, tmp_path):
543506
cublas_root = tmp_path / "cuda-12.8"
544507
cusolver_root = tmp_path / "cuda-12.9"
@@ -548,14 +511,11 @@ def test_same_dynamic_link_component_requires_exact_ctk_major_minor_match(monkey
548511
cublas_path = _touch(cublas_root / "targets" / "x86_64-linux" / "lib" / "libcublas.so.12")
549512
cusolver_path = _touch(cusolver_root / "targets" / "x86_64-linux" / "lib" / "libcusolver.so.12")
550513

551-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
552-
if libname == "cublas":
553-
return _loaded_dl(cublas_path)
554-
if libname == "cusolver":
555-
return _loaded_dl(cusolver_path)
556-
raise AssertionError(f"Unexpected libname: {libname!r}")
557-
558-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
514+
_patch_dynamic_lib_loader(
515+
monkeypatch,
516+
cublas=_loaded_dl(cublas_path),
517+
cusolver=_loaded_dl(cusolver_path),
518+
)
559519

560520
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
561521
guard_rails.load_nvidia_dynamic_lib("cublas")
@@ -576,14 +536,11 @@ def test_independent_dynamic_libs_may_resolve_to_different_ctk_minors(monkeypatc
576536
nvrtc_path = _touch(nvrtc_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
577537
nvjitlink_path = _touch(nvjitlink_root / "targets" / "x86_64-linux" / "lib" / "libnvJitLink.so.12")
578538

579-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
580-
if libname == "nvrtc":
581-
return _loaded_dl(nvrtc_path)
582-
if libname == "nvJitLink":
583-
return _loaded_dl(nvjitlink_path)
584-
raise AssertionError(f"Unexpected libname: {libname!r}")
585-
586-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
539+
_patch_dynamic_lib_loader(
540+
monkeypatch,
541+
nvrtc=_loaded_dl(nvrtc_path),
542+
nvJitLink=_loaded_dl(nvjitlink_path),
543+
)
587544

588545
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
589546

@@ -594,36 +551,6 @@ def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
594551
assert loaded_nvjitlink.abs_path == nvjitlink_path
595552

596553

597-
def test_public_apis_allow_independent_dynamic_libs_to_differ_by_minor(monkeypatch, tmp_path):
598-
nvrtc_root = tmp_path / "cuda-12.8"
599-
nvjitlink_root = tmp_path / "cuda-12.9"
600-
_write_cuda_h(nvrtc_root, "12.8.20250303")
601-
_write_cuda_h(nvjitlink_root, "12.9.20250531")
602-
603-
nvrtc_path = _touch(nvrtc_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
604-
nvjitlink_path = _touch(nvjitlink_root / "targets" / "x86_64-linux" / "lib" / "libnvJitLink.so.12")
605-
606-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
607-
if libname == "nvrtc":
608-
return _loaded_dl(nvrtc_path)
609-
if libname == "nvJitLink":
610-
return _loaded_dl(nvjitlink_path)
611-
raise AssertionError(f"Unexpected libname: {libname!r}")
612-
613-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
614-
monkeypatch.setattr(
615-
pathfinder,
616-
"process_wide_compatibility_guard_rails",
617-
CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000)),
618-
)
619-
620-
loaded_nvrtc = pathfinder.load_nvidia_dynamic_lib("nvrtc")
621-
loaded_nvjitlink = pathfinder.load_nvidia_dynamic_lib("nvJitLink")
622-
623-
assert loaded_nvrtc.abs_path == nvrtc_path
624-
assert loaded_nvjitlink.abs_path == nvjitlink_path
625-
626-
627554
def test_toolchain_companions_require_exact_ctk_major_minor_match(monkeypatch, tmp_path):
628555
static_root = tmp_path / "cuda-12.8"
629556
binary_root = tmp_path / "cuda-12.9"
@@ -663,14 +590,11 @@ def test_declared_ltoir_pipeline_requires_nvjitlink_not_older_than_nvrtc(monkeyp
663590
nvrtc_path = _touch(nvrtc_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
664591
nvjitlink_path = _touch(nvjitlink_root / "targets" / "x86_64-linux" / "lib" / "libnvJitLink.so.12")
665592

666-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
667-
if libname == "nvrtc":
668-
return _loaded_dl(nvrtc_path)
669-
if libname == "nvJitLink":
670-
return _loaded_dl(nvjitlink_path)
671-
raise AssertionError(f"Unexpected libname: {libname!r}")
672-
673-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
593+
_patch_dynamic_lib_loader(
594+
monkeypatch,
595+
nvrtc=_loaded_dl(nvrtc_path),
596+
nvJitLink=_loaded_dl(nvjitlink_path),
597+
)
674598

675599
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
676600
guard_rails.load_nvidia_dynamic_lib("nvrtc")
@@ -693,14 +617,11 @@ def test_declared_ltoir_pipeline_allows_same_major_newer_nvjitlink(monkeypatch,
693617
nvrtc_path = _touch(nvrtc_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
694618
nvjitlink_path = _touch(nvjitlink_root / "targets" / "x86_64-linux" / "lib" / "libnvJitLink.so.12")
695619

696-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
697-
if libname == "nvrtc":
698-
return _loaded_dl(nvrtc_path)
699-
if libname == "nvJitLink":
700-
return _loaded_dl(nvjitlink_path)
701-
raise AssertionError(f"Unexpected libname: {libname!r}")
702-
703-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
620+
_patch_dynamic_lib_loader(
621+
monkeypatch,
622+
nvrtc=_loaded_dl(nvrtc_path),
623+
nvJitLink=_loaded_dl(nvjitlink_path),
624+
)
704625

705626
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
706627
loaded_nvrtc = guard_rails.load_nvidia_dynamic_lib("nvrtc")
@@ -715,7 +636,8 @@ def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
715636
assert loaded_nvjitlink.abs_path == nvjitlink_path
716637

717638

718-
def test_declared_ptx_pipeline_allows_cross_major_nvrtc_to_nvjitlink(monkeypatch, tmp_path):
639+
@pytest.mark.parametrize("artifact_kind", ("ptx", "elf", "cubin"))
640+
def test_declared_non_lto_pipeline_allows_cross_major_nvrtc_to_nvjitlink(monkeypatch, tmp_path, artifact_kind):
719641
nvrtc_root = tmp_path / "cuda-12.8"
720642
nvjitlink_root = tmp_path / "cuda-13.0"
721643
_write_cuda_h(nvrtc_root, "12.8.20250303")
@@ -724,22 +646,19 @@ def test_declared_ptx_pipeline_allows_cross_major_nvrtc_to_nvjitlink(monkeypatch
724646
nvrtc_path = _touch(nvrtc_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
725647
nvjitlink_path = _touch(nvjitlink_root / "targets" / "x86_64-linux" / "lib" / "libnvJitLink.so.13")
726648

727-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
728-
if libname == "nvrtc":
729-
return _loaded_dl(nvrtc_path)
730-
if libname == "nvJitLink":
731-
return _loaded_dl(nvjitlink_path)
732-
raise AssertionError(f"Unexpected libname: {libname!r}")
733-
734-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
649+
_patch_dynamic_lib_loader(
650+
monkeypatch,
651+
nvrtc=_loaded_dl(nvrtc_path),
652+
nvJitLink=_loaded_dl(nvjitlink_path),
653+
)
735654

736655
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
737656
loaded_nvrtc = guard_rails.load_nvidia_dynamic_lib("nvrtc")
738657
loaded_nvjitlink = guard_rails.load_nvidia_dynamic_lib("nvJitLink")
739658
guard_rails._declare_dynamic_lib_pipeline(
740659
producer_libname="nvrtc",
741660
consumer_libname="nvJitLink",
742-
artifact_kind="ptx",
661+
artifact_kind=artifact_kind,
743662
)
744663

745664
assert loaded_nvrtc.abs_path == nvrtc_path
@@ -755,14 +674,11 @@ def test_declared_nvvm_pipeline_remains_conservative(monkeypatch, tmp_path):
755674
nvvm_path = _touch(nvvm_root / "nvvm" / "lib64" / "libnvvm.so.4")
756675
nvjitlink_path = _touch(nvjitlink_root / "targets" / "x86_64-linux" / "lib" / "libnvJitLink.so.12")
757676

758-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
759-
if libname == "nvvm":
760-
return _loaded_dl(nvvm_path)
761-
if libname == "nvJitLink":
762-
return _loaded_dl(nvjitlink_path)
763-
raise AssertionError(f"Unexpected libname: {libname!r}")
764-
765-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
677+
_patch_dynamic_lib_loader(
678+
monkeypatch,
679+
nvvm=_loaded_dl(nvvm_path),
680+
nvJitLink=_loaded_dl(nvjitlink_path),
681+
)
766682

767683
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
768684
guard_rails.load_nvidia_dynamic_lib("nvvm")
@@ -849,14 +765,11 @@ def test_driver_libs_do_not_lock_ctk_anchor(monkeypatch, tmp_path):
849765
_write_cuda_h(ctk_root, "12.9.20250531")
850766
ctk_lib_path = _touch(ctk_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12")
851767

852-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
853-
if libname == "nvml":
854-
return _loaded_dl(driver_lib_path, found_via="system-search")
855-
if libname == "nvrtc":
856-
return _loaded_dl(ctk_lib_path)
857-
raise AssertionError(f"Unexpected libname: {libname!r}")
858-
859-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
768+
_patch_dynamic_lib_loader(
769+
monkeypatch,
770+
nvml=_loaded_dl(driver_lib_path, found_via="system-search"),
771+
nvrtc=_loaded_dl(ctk_lib_path),
772+
)
860773

861774
guard_rails = CompatibilityGuardRails(driver_cuda_version=_driver_cuda_version(13000))
862775

@@ -878,14 +791,11 @@ def test_driver_libs_do_not_mask_later_ctk_mismatch(monkeypatch, tmp_path):
878791
hdr_dir = hdr_root / "targets" / "x86_64-linux" / "include"
879792
_touch(hdr_dir / "nvrtc.h")
880793

881-
def fake_load_nvidia_dynamic_lib(libname: str) -> LoadedDL:
882-
if libname == "nvml":
883-
return _loaded_dl(driver_lib_path, found_via="system-search")
884-
if libname == "nvrtc":
885-
return _loaded_dl(lib_path)
886-
raise AssertionError(f"Unexpected libname: {libname!r}")
887-
888-
monkeypatch.setattr(compatibility_module, "_load_nvidia_dynamic_lib", fake_load_nvidia_dynamic_lib)
794+
_patch_dynamic_lib_loader(
795+
monkeypatch,
796+
nvml=_loaded_dl(driver_lib_path, found_via="system-search"),
797+
nvrtc=_loaded_dl(lib_path),
798+
)
889799
monkeypatch.setattr(
890800
compatibility_module,
891801
"_locate_nvidia_header_directory",

cuda_pathfinder/tests/test_find_nvidia_binaries.py

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -160,38 +160,3 @@ def test_find_binary_without_site_packages_entry(monkeypatch, mocker):
160160
os.path.join(cuda_home, "bin"),
161161
]
162162
which_mock.assert_called_once_with("nvcc", path=os.pathsep.join(expected_dirs))
163-
164-
165-
@pytest.mark.usefixtures("clear_find_binary_cache")
166-
def test_find_binary_cache_negative_result(monkeypatch, mocker):
167-
mocker.patch.object(binary_finder_module, "IS_WINDOWS", new=False)
168-
mocker.patch.object(binary_finder_module.supported_nvidia_binaries, "SITE_PACKAGES_BINDIRS", {})
169-
mocker.patch.object(binary_finder_module, "find_sub_dirs_all_sitepackages", return_value=[])
170-
monkeypatch.delenv("CONDA_PREFIX", raising=False)
171-
mocker.patch.object(binary_finder_module, "get_cuda_path_or_home", return_value=None)
172-
which_mock = mocker.patch.object(binary_finder_module.shutil, "which", return_value=None)
173-
174-
first = find_nvidia_binary_utility("nvcc")
175-
second = find_nvidia_binary_utility("nvcc")
176-
177-
assert first is None
178-
assert second is None
179-
which_mock.assert_called_once_with("nvcc", path="")
180-
181-
182-
@pytest.mark.usefixtures("clear_find_binary_cache")
183-
def test_caching_per_utility():
184-
"""Verify that different utilities have independent cache entries."""
185-
nvdisasm1 = find_nvidia_binary_utility("nvdisasm")
186-
nvcc1 = find_nvidia_binary_utility("nvcc")
187-
nvdisasm2 = find_nvidia_binary_utility("nvdisasm")
188-
nvcc2 = find_nvidia_binary_utility("nvcc")
189-
190-
# Same utility should return cached result
191-
assert nvdisasm1 is nvdisasm2
192-
assert nvcc1 is nvcc2
193-
194-
# Different utilities should have different results (unless at least one of
195-
# them is None)
196-
if nvdisasm1 is not None and nvcc1 is not None:
197-
assert nvdisasm1 != nvcc1

cuda_pathfinder/tests/test_utils_driver_info.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,6 @@ def test_driver_release_version_from_text_parses_branch():
102102
)
103103

104104

105-
def test_query_driver_release_version_returns_parsed_dataclass(monkeypatch):
106-
monkeypatch.setattr(driver_info, "_query_driver_release_version_text", lambda: "595.58.03")
107-
108-
assert driver_info.query_driver_release_version() == driver_info.DriverReleaseVersion(
109-
text="595.58.03",
110-
components=(595, 58, 3),
111-
branch=595,
112-
)
113-
114-
115105
def test_query_driver_release_version_wraps_internal_failures(monkeypatch):
116106
root_cause = RuntimeError("low-level release query failed")
117107

@@ -186,16 +176,6 @@ def fake_windll(abs_path: str):
186176
assert loaded_paths == [r"C:\Windows\System32\nvcuda.dll"]
187177

188178

189-
def test_query_driver_cuda_version_returns_parsed_dataclass(monkeypatch):
190-
monkeypatch.setattr(driver_info, "_query_driver_cuda_version_int", lambda: 12080)
191-
192-
assert driver_info.query_driver_cuda_version() == driver_info.DriverCudaVersion(
193-
encoded=12080,
194-
major=12,
195-
minor=8,
196-
)
197-
198-
199179
def test_driver_cuda_version_from_encoded_returns_subclass_instance():
200180
version = driver_info.DriverCudaVersion.from_encoded(12080)
201181

0 commit comments

Comments
 (0)