import os
import subprocess
import datetime
from pathlib import Path
import stat
from torch.testing._internal.common_utils import TestCase, run_tests
import torch_npu
from torch_npu._inductor.config import log
from torch_npu._inductor.npu_static_kernel import StaticKernelCompiler
from torch_npu._inductor.npu_static_kernel import safe_resolve_output_dir
class TestNpuStaticKernel(TestCase):
def test_safe_resolve_output_dir_dot_dot(self):
with self.assertRaises(ValueError):
safe_resolve_output_dir("test/../dir")
def test_safe_resolve_output_dir_null_byte(self):
with self.assertRaises(ValueError):
safe_resolve_output_dir("test/../x00dir")
def test_safe_resolve_output_dir_permission_error(self):
import tempfile
with tempfile.TemporaryDirectory() as tmpdir:
readonly_dir = Path(tmpdir) / "readonly"
readonly_dir.mkdir()
readonly_dir.chmod(stat.S_IRUSR | stat.S_IXUSR)
build_path = str(readonly_dir / 'subdir')
with self.assertRaises(RuntimeError):
safe_resolve_output_dir(build_path)
def test_safe_resolve_output_dir_symlink(self):
import tempfile
with tempfile.TemporaryDirectory() as tmpdir:
real_dir = Path(tmpdir) / "real"
real_dir.mkdir()
symlink_dir = Path(tmpdir) / "symlink"
symlink_dir.symlink_to(real_dir)
build_path = str(symlink_dir / "subdir")
with self.assertRaises(ValueError):
safe_resolve_output_dir(build_path)
def test_uninstall_static_kernel_no_path(self):
from torch_npu._inductor.npu_static_kernel import _uninstall_path, uninstall_static_kernel
_uninstall_path = None
uninstall_static_kernel()
def test_safe_resolve_output_dir_absolute_path(self):
import tempfile
import shutil
with tempfile.TemporaryDirectory() as tmpdir:
abs_dir = Path(tmpdir) / "test_build"
abs_dir.mkdir()
result = safe_resolve_output_dir(str(abs_dir))
self.assertTrue(result.exists())
self.assertIn("kernel_aot_optimization_build_outputs", str(result))
if __name__ == "__main__":
run_tests()