"""Unittests for blender_cloud.utils. This unittest requires bpy to be importable, so build Blender as a module and install it into your virtualenv. See https://stuvel.eu/files/bconf2016/#/10 for notes how. """ import datetime import pathlib import unittest.mock import pillarsdk.utils from blender_cloud.flamenco import sdk class PathReplacementTest(unittest.TestCase): def setUp(self): self.test_manager = sdk.Manager( { "_created": datetime.datetime( 2017, 5, 31, 15, 12, 32, tzinfo=pillarsdk.utils.utc ), "_etag": "c39942ee4bcc4658adcc21e4bcdfb0ae", "_id": "592edd609837732a2a272c62", "_updated": datetime.datetime( 2017, 6, 8, 14, 51, 3, tzinfo=pillarsdk.utils.utc ), "description": 'Manager formerly known as "testman"', "job_types": {"sleep": {"vars": {}}}, "name": '', "owner": "592edd609837732a2a272c63", "path_replacement": { "job_storage": { "darwin": "/Volume/shared", "linux": "/shared", "windows": "s:/", }, "render": { "darwin": "/Volume/render/", "linux": "/render/", "windows": "r:/", }, "longrender": { "darwin": "/Volume/render/long", "linux": "/render/long", "windows": "r:/long", }, }, "projects": ["58cbdd5698377322d95eb55e"], "service_account": "592edd609837732a2a272c60", "stats": {"nr_of_workers": 3}, "url": "http://192.168.3.101:8083/", "user_groups": ["58cbdd5698377322d95eb55f"], "variables": { "blender": { "darwin": "/opt/myblenderbuild/blender", "linux": "/home/sybren/workspace/build_linux/bin/blender " "--enable-new-depsgraph --factory-startup", "windows": "c:/temp/blender.exe", } }, } ) def test_linux(self): # (expected result, input) test_paths = [ ("/doesnotexistreally", "/doesnotexistreally"), ("{render}/agent327/scenes/A_01_03_B", "/render/agent327/scenes/A_01_03_B"), ("{job_storage}/render/agent327/scenes", "/shared/render/agent327/scenes"), ("{longrender}/agent327/scenes", "/render/long/agent327/scenes"), ] self._do_test(test_paths, "linux", pathlib.PurePosixPath) def test_windows(self): # (expected result, input) test_paths = [ ("c:/doesnotexistreally", "c:/doesnotexistreally"), ("c:/some/path", r"c:\some\path"), ("{render}/agent327/scenes/A_01_03_B", r"R:\agent327\scenes\A_01_03_B"), ("{render}/agent327/scenes/A_01_03_B", r"r:\agent327\scenes\A_01_03_B"), ("{render}/agent327/scenes/A_01_03_B", r"r:/agent327/scenes/A_01_03_B"), ("{job_storage}/render/agent327/scenes", "s:/render/agent327/scenes"), ("{longrender}/agent327/scenes", "r:/long/agent327/scenes"), ] self._do_test(test_paths, "windows", pathlib.PureWindowsPath) def test_darwin(self): # (expected result, input) test_paths = [ ("/Volume/doesnotexistreally", "/Volume/doesnotexistreally"), ( "{render}/agent327/scenes/A_01_03_B", r"/Volume/render/agent327/scenes/A_01_03_B", ), ( "{job_storage}/render/agent327/scenes", "/Volume/shared/render/agent327/scenes", ), ("{longrender}/agent327/scenes", "/Volume/render/long/agent327/scenes"), ] self._do_test(test_paths, "darwin", pathlib.PurePosixPath) def _do_test(self, test_paths, platform, pathclass): self.test_manager.PurePlatformPath = pathclass def mocked_system(): return platform with unittest.mock.patch("platform.system", mocked_system): for expected_result, input_path in test_paths: as_path_instance = pathclass(input_path) self.assertEqual( expected_result, self.test_manager.replace_path(as_path_instance), "for input %r on platform %s" % (as_path_instance, platform), )