Skip to content

Commit

Permalink
clean up boilerplate, remove dupe test
Browse files Browse the repository at this point in the history
  • Loading branch information
ankona committed Jul 25, 2023
1 parent 11abe74 commit 6b7641b
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 71 deletions.
26 changes: 23 additions & 3 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
from smartsim.error import SSConfigError
from subprocess import run
import sys
import typing as t


# Globals, yes, but its a testing file
Expand Down Expand Up @@ -506,7 +507,7 @@ def fileutils():

class FileUtils:
@staticmethod
def _test_dir_path(caller_function, caller_fspath):
def _test_dir_path(caller_function, caller_fspath) -> str:
caller_file_to_dir = os.path.splitext(str(caller_fspath))[0]
rel_path = os.path.relpath(caller_file_to_dir, os.path.dirname(test_dir))
dir_path = os.path.join(test_dir, rel_path, caller_function)
Expand Down Expand Up @@ -543,7 +544,7 @@ def get_test_dir(caller_function=None, caller_fspath=None, level=1):
return dir_path

@staticmethod
def make_test_dir(caller_function=None, caller_fspath=None, level=1):
def make_test_dir(caller_function=None, caller_fspath=None, level=1, sub_dir=None) -> str:
"""Create test output directory and return path to it.
This function should be called without arguments from within
Expand All @@ -565,7 +566,9 @@ def make_test_dir(caller_function=None, caller_fspath=None, level=1):
caller_function = caller_frame.function

dir_path = FileUtils._test_dir_path(caller_function, caller_fspath)
# dir_path = os.path.join(test_dir, dir_name)
if sub_dir:
dir_path = os.path.join(dir_path, sub_dir)

try:
os.makedirs(dir_path)
except Exception:
Expand All @@ -582,6 +585,23 @@ def get_test_dir_path(dirname):
dir_path = os.path.join(test_path, "tests", "test_configs", dirname)
return dir_path

@staticmethod
def make_test_file(file_name: str, file_dir: t.Optional[str] = None) -> str:
"""Create a dummy file in the test output directory.
:param file_path: path relative to test output directory, e.g. "data/file.txt"
:type file_path: str
:return: String path to test ouptut file
:rtype: str
"""
test_dir = FileUtils.make_test_dir(level=2, sub_dir=file_dir)
file_path = os.path.join(test_dir, file_name)

with open(file_path, "w+") as f:
f.write("dummy\n")

return file_path


@pytest.fixture
def mlutils():
Expand Down
104 changes: 36 additions & 68 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


import os
from pathlib import Path

import os
from re import A, L
import pytest
import shutil
import typing as t

from smartsim._core.config.config import Config
from smartsim.error import SSConfigError
Expand All @@ -52,119 +54,85 @@ def test_all_config_defaults():
config.test_device


def test_redisai():
config = Config()
assert Path(config.redisai).is_file()
assert isinstance(config.redisai, str)

os.environ["RAI_PATH"] = "not/an/so/file"
config = Config()
with pytest.raises(SSConfigError):
config.redisai
os.environ.pop("RAI_PATH")
def get_redisai_env(rai_path: t.Optional[str], lib_path: t.Optional[str]) -> t.Dict[str, str]:
env = os.environ.copy()
if rai_path:
env["RAI_PATH"] = rai_path
else:
env.pop("RAI_PATH", None)

if lib_path:
env["SMARTSIM_DEP_INSTALL_PATH"] = lib_path
else:
env.pop("SMARTSIM_DEP_INSTALL_PATH", None)

return env


def test_redisai_invalid_rai_path(fileutils, monkeypatch):
"""Ensure that looking for redisai module with invalid RAI_PATH fails"""
"""An invalid RAI_PATH and valid SMARTSIM_DEP_INSTALL_PATH should fail"""
test_dir = fileutils.make_test_dir()
lib_dir = Path(f"{test_dir}/lib")
rai_file_path = lib_dir / "redisai.so"
rai_file_path = os.path.join(test_dir, "lib", "mock-redisai.so")
lib_file_path = fileutils.make_test_file("redisai.so", "deps")

env = os.environ.copy()
env["RAI_PATH"] = str(rai_file_path)
env = get_redisai_env(rai_file_path, lib_file_path)
monkeypatch.setattr(os, "environ", env)

config = Config()

# Fail when no file exists
# Fail when no file exists @ RAI_PATH
with pytest.raises(SSConfigError) as ex:
_ = config.redisai

assert 'RedisAI dependency not found' in ex.value.args[0]


def test_redisai_valid_rai_path(fileutils, monkeypatch):
"""Ensure that looking for redisai module with RAI_PATH set works"""
test_dir = fileutils.make_test_dir()
lib_dir = Path(f"{test_dir}/lib")
rai_file_path = lib_dir / "redisai.so"
"""A valid RAI_PATH should override valid SMARTSIM_DEP_INSTALL_PATH and succeed"""
rai_file_path = fileutils.make_test_file("mock-redisai.so", "lib")
lib_file_path = fileutils.make_test_file("redisai.so", "deps")

env = os.environ.copy()
env["RAI_PATH"] = str(rai_file_path)
env = get_redisai_env(rai_file_path, lib_file_path)
monkeypatch.setattr(os, "environ", env)

if lib_dir.exists():
shutil.rmtree(test_dir)
lib_dir.mkdir(parents=True, exist_ok=True)

# Add a file matching RAI_PATH and ensure it is found
with open(rai_file_path, "w+") as f:
f.write("mock module...")

config = Config()
assert config.redisai
assert Path(config.redisai).is_file()
assert isinstance(config.redisai, str)

shutil.rmtree(test_dir)
assert config.redisai == str(rai_file_path)


def test_redisai_invalid_lib_path(fileutils, monkeypatch):
"""Ensure that looking for redisai module with both RAI_PATH and lib_path NOT set fails"""
"""Invalid RAI_PATH and invalid SMARTSIM_DEP_INSTALL_PATH should fail"""
test_dir = fileutils.make_test_dir()
lib_dir = Path(f"{test_dir}/lib")

default_install_dir = Path(f"{test_dir}/defaults")
default_lib_dir = default_install_dir / "lib"

env = os.environ.copy()
env["SMARTSIM_DEP_INSTALL_PATH"] = str(default_install_dir)
rai_file_path = f"{test_dir}/railib/redisai.so"
lib_file_path = f"{test_dir}/lib/redisai.so"

env = get_redisai_env(rai_file_path, lib_file_path)
monkeypatch.setattr(os, "environ", env)

if lib_dir.exists():
shutil.rmtree(test_dir)

if default_lib_dir.exists():
shutil.rmtree(default_lib_dir)

config = Config()
# Fail when no file exists
# Fail when no files exist @ either location
with pytest.raises(SSConfigError) as ex:
_ = config.redisai

assert 'RedisAI dependency not found' in ex.value.args[0]


def test_redisai_valid_lib_path(fileutils, monkeypatch):
"""Ensure that looking for redisai module with RAI_PATH NOT set works"""
"""Valid RAI_PATH and invalid SMARTSIM_DEP_INSTALL_PATH should succeed"""
test_dir = fileutils.make_test_dir()
lib_dir = Path(f"{test_dir}/lib")

default_install_dir = Path(f"{test_dir}/defaults")
default_lib_dir = default_install_dir / "lib"
rai_def_lib_path = default_lib_dir / "redisai.so"

env = os.environ.copy()
env["SMARTSIM_DEP_INSTALL_PATH"] = str(default_install_dir)
rai_file_path = fileutils.make_test_file("mock-redisai.so", "lib")
lib_file_path = f"{test_dir}/lib/redisai.so"

env = get_redisai_env(rai_file_path, lib_file_path)
monkeypatch.setattr(os, "environ", env)

if lib_dir.exists():
shutil.rmtree(test_dir)

if default_lib_dir.exists():
shutil.rmtree(default_lib_dir)
default_lib_dir.mkdir(parents=True, exist_ok=True)

# Add a file matching RAI_PATH and ensure it is found
with open(rai_def_lib_path, "w+") as f:
f.write("mock default module...")

config = Config()
assert config.redisai
assert Path(config.redisai).is_file()
assert isinstance(config.redisai, str)
assert config.redisai == str(rai_file_path)

shutil.rmtree(test_dir)

Expand Down

0 comments on commit 6b7641b

Please sign in to comment.