123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- Unit tests for ly_test_tools.o3de.shader_compiler
- """
- import unittest.mock as mock
- import pytest
- import ly_test_tools._internal.managers.workspace
- import ly_test_tools._internal.managers.abstract_resource_locator
- import ly_test_tools.o3de.shader_compiler
- pytestmark = pytest.mark.SUITE_smoke
- mock_initial_path = "mock_initial_path"
- mock_engine_root = "mock_engine_root"
- mock_dev_path = "mock_dev_path"
- mock_build_directory = 'mock_build_directory'
- mock_project = 'mock_project'
- @mock.patch('ly_test_tools._internal.managers.abstract_resource_locator.os.path.abspath',
- mock.MagicMock(return_value=mock_initial_path))
- @mock.patch('ly_test_tools._internal.managers.abstract_resource_locator._find_engine_root',
- mock.MagicMock(return_value=(mock_engine_root, mock_dev_path)))
- @mock.patch('ly_test_tools.o3de.asset_processor.logger.warning', mock.MagicMock())
- class TestShaderCompiler(object):
- @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
- def test_Init_MockWorkspace_MembersSetCorrectly(self, mock_workspace):
- under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
- assert under_test._workspace == mock_workspace
- assert under_test._sc_proc is None
- @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
- @mock.patch('subprocess.Popen')
- @mock.patch('ly_test_tools.WINDOWS', True)
- def test_Start_NoneRunning_ProcessStarted(self, mock_popen, mock_workspace):
- mock_shader_compiler_path = 'mock_shader_compiler_path'
- mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
- mock_popen.return_value = mock.MagicMock()
- under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
- assert under_test._sc_proc is None
- under_test.start()
- assert under_test._sc_proc is not None
- mock_popen.assert_called_once_with(['RunAs', '/trustlevel:0x20000', mock_shader_compiler_path])
- @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
- @mock.patch('subprocess.Popen')
- @mock.patch('ly_test_tools.o3de.shader_compiler.MAC', True)
- def test_Start_NotImplemented_ErrorRaised(self, mock_popen, mock_workspace):
- under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
- assert under_test._sc_proc is None
- with pytest.raises(NotImplementedError):
- under_test.start()
- assert under_test._sc_proc is None
- mock_popen.assert_not_called()
- @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
- @mock.patch('subprocess.Popen')
- @mock.patch('ly_test_tools.o3de.shader_compiler.logger.info')
- @mock.patch('ly_test_tools.o3de.shader_compiler.MAC', True)
- def test_Start_AlreadyRunning_ProcessNotChanged(self, mock_logger, mock_popen, mock_workspace):
- mock_shader_compiler_path = 'mock_shader_compiler_path'
- mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
- mock_popen.return_value = mock.MagicMock()
- under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
- under_test._sc_proc = 'foo'
- under_test.start()
- assert under_test._sc_proc is not None
- mock_popen.assert_not_called()
- mock_logger.assert_called_once_with(
- 'Attempted to start shader compiler at the path: {0}, '
- 'but we already have one open!'.format(mock_shader_compiler_path))
- @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
- @mock.patch('ly_test_tools.o3de.shader_compiler.process_utils.kill_processes_started_from')
- @mock.patch('ly_test_tools.o3de.shader_compiler.waiter.wait_for')
- def test_Stop_AlreadyRunning_ProcessStopped(self, mock_wait, mock_kill, mock_workspace):
- mock_shader_compiler_path = 'mock_shader_compiler_path'
- mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
- under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
- under_test._sc_proc = 'foo'
- under_test.stop()
- assert under_test._sc_proc is None
- mock_kill.assert_called_once_with(mock_shader_compiler_path)
- mock_wait.assert_called_once()
- @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
- @mock.patch('ly_test_tools.o3de.shader_compiler.process_utils.kill_processes_started_from')
- @mock.patch('ly_test_tools.o3de.shader_compiler.waiter.wait_for')
- @mock.patch('ly_test_tools.o3de.shader_compiler.logger.info')
- def test_Stop_NoneRunning_MessageLogged(self, mock_logger, mock_wait, mock_kill, mock_workspace):
- mock_shader_compiler_path = 'mock_shader_compiler_path'
- mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
- under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
- under_test._sc_proc = None
- under_test.stop()
- assert under_test._sc_proc is None
- mock_kill.assert_not_called()
- mock_wait.assert_not_called()
- mock_logger.assert_called_once_with(
- 'Attempted to stop shader compiler at the path: {0}, '
- 'but we do not have any open!'.format(mock_shader_compiler_path))
|