| from unittest import mock |
| import pytest |
| from mlagents_envs.env_utils import validate_environment_path, launch_executable |
| from mlagents_envs.exception import UnityEnvironmentException |
| from mlagents_envs.logging_util import ( |
| set_log_level, |
| get_logger, |
| INFO, |
| ERROR, |
| FATAL, |
| CRITICAL, |
| DEBUG, |
| ) |
|
|
|
|
| def mock_glob_method(path): |
| """ |
| Given a path input, returns a list of candidates |
| """ |
| if ".x86" in path: |
| return ["linux"] |
| if ".app" in path: |
| return ["darwin"] |
| if ".exe" in path: |
| return ["win32"] |
| if "*" in path: |
| return "Any" |
| return [] |
|
|
|
|
| @mock.patch("sys.platform") |
| @mock.patch("glob.glob") |
| def test_validate_path_empty(glob_mock, platform_mock): |
| glob_mock.return_value = None |
| path = validate_environment_path(" ") |
| assert path is None |
|
|
|
|
| @mock.patch("mlagents_envs.env_utils.get_platform") |
| @mock.patch("glob.glob") |
| def test_validate_path(glob_mock, platform_mock): |
| glob_mock.side_effect = mock_glob_method |
| for platform in ["linux", "darwin", "win32"]: |
| platform_mock.return_value = platform |
| path = validate_environment_path(" ") |
| assert path == platform |
|
|
|
|
| @mock.patch("glob.glob") |
| @mock.patch("subprocess.Popen") |
| def test_launch_executable(mock_popen, glob_mock): |
| with pytest.raises(UnityEnvironmentException): |
| launch_executable(" ", []) |
| glob_mock.return_value = ["FakeLaunchPath"] |
| launch_executable(" ", []) |
| mock_popen.side_effect = PermissionError("Fake permission error") |
| with pytest.raises(UnityEnvironmentException): |
| launch_executable(" ", []) |
|
|
|
|
| def test_set_logging_level(): |
| for level in [INFO, ERROR, FATAL, CRITICAL, DEBUG]: |
| set_log_level(level) |
| assert get_logger("test").level == level |
|
|