test_shader_compiler.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. Unit tests for ly_test_tools.o3de.shader_compiler
  6. """
  7. import unittest.mock as mock
  8. import pytest
  9. import ly_test_tools._internal.managers.workspace
  10. import ly_test_tools._internal.managers.abstract_resource_locator
  11. import ly_test_tools.o3de.shader_compiler
  12. pytestmark = pytest.mark.SUITE_smoke
  13. mock_initial_path = "mock_initial_path"
  14. mock_engine_root = "mock_engine_root"
  15. mock_dev_path = "mock_dev_path"
  16. mock_build_directory = 'mock_build_directory'
  17. mock_project = 'mock_project'
  18. @mock.patch('ly_test_tools._internal.managers.abstract_resource_locator.os.path.abspath',
  19. mock.MagicMock(return_value=mock_initial_path))
  20. @mock.patch('ly_test_tools._internal.managers.abstract_resource_locator._find_engine_root',
  21. mock.MagicMock(return_value=(mock_engine_root, mock_dev_path)))
  22. @mock.patch('ly_test_tools.o3de.asset_processor.logger.warning', mock.MagicMock())
  23. class TestShaderCompiler(object):
  24. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
  25. def test_Init_MockWorkspace_MembersSetCorrectly(self, mock_workspace):
  26. under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
  27. assert under_test._workspace == mock_workspace
  28. assert under_test._sc_proc is None
  29. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
  30. @mock.patch('subprocess.Popen')
  31. @mock.patch('ly_test_tools.WINDOWS', True)
  32. def test_Start_NoneRunning_ProcessStarted(self, mock_popen, mock_workspace):
  33. mock_shader_compiler_path = 'mock_shader_compiler_path'
  34. mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
  35. mock_popen.return_value = mock.MagicMock()
  36. under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
  37. assert under_test._sc_proc is None
  38. under_test.start()
  39. assert under_test._sc_proc is not None
  40. mock_popen.assert_called_once_with(['RunAs', '/trustlevel:0x20000', mock_shader_compiler_path])
  41. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
  42. @mock.patch('subprocess.Popen')
  43. @mock.patch('ly_test_tools.o3de.shader_compiler.MAC', True)
  44. def test_Start_NotImplemented_ErrorRaised(self, mock_popen, mock_workspace):
  45. under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
  46. assert under_test._sc_proc is None
  47. with pytest.raises(NotImplementedError):
  48. under_test.start()
  49. assert under_test._sc_proc is None
  50. mock_popen.assert_not_called()
  51. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
  52. @mock.patch('subprocess.Popen')
  53. @mock.patch('ly_test_tools.o3de.shader_compiler.logger.info')
  54. @mock.patch('ly_test_tools.o3de.shader_compiler.MAC', True)
  55. def test_Start_AlreadyRunning_ProcessNotChanged(self, mock_logger, mock_popen, mock_workspace):
  56. mock_shader_compiler_path = 'mock_shader_compiler_path'
  57. mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
  58. mock_popen.return_value = mock.MagicMock()
  59. under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
  60. under_test._sc_proc = 'foo'
  61. under_test.start()
  62. assert under_test._sc_proc is not None
  63. mock_popen.assert_not_called()
  64. mock_logger.assert_called_once_with(
  65. 'Attempted to start shader compiler at the path: {0}, '
  66. 'but we already have one open!'.format(mock_shader_compiler_path))
  67. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
  68. @mock.patch('ly_test_tools.o3de.shader_compiler.process_utils.kill_processes_started_from')
  69. @mock.patch('ly_test_tools.o3de.shader_compiler.waiter.wait_for')
  70. def test_Stop_AlreadyRunning_ProcessStopped(self, mock_wait, mock_kill, mock_workspace):
  71. mock_shader_compiler_path = 'mock_shader_compiler_path'
  72. mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
  73. under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
  74. under_test._sc_proc = 'foo'
  75. under_test.stop()
  76. assert under_test._sc_proc is None
  77. mock_kill.assert_called_once_with(mock_shader_compiler_path)
  78. mock_wait.assert_called_once()
  79. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager')
  80. @mock.patch('ly_test_tools.o3de.shader_compiler.process_utils.kill_processes_started_from')
  81. @mock.patch('ly_test_tools.o3de.shader_compiler.waiter.wait_for')
  82. @mock.patch('ly_test_tools.o3de.shader_compiler.logger.info')
  83. def test_Stop_NoneRunning_MessageLogged(self, mock_logger, mock_wait, mock_kill, mock_workspace):
  84. mock_shader_compiler_path = 'mock_shader_compiler_path'
  85. mock_workspace.paths.get_shader_compiler_path.return_value = mock_shader_compiler_path
  86. under_test = ly_test_tools.o3de.shader_compiler.ShaderCompiler(mock_workspace)
  87. under_test._sc_proc = None
  88. under_test.stop()
  89. assert under_test._sc_proc is None
  90. mock_kill.assert_not_called()
  91. mock_wait.assert_not_called()
  92. mock_logger.assert_called_once_with(
  93. 'Attempted to stop shader compiler at the path: {0}, '
  94. 'but we do not have any open!'.format(mock_shader_compiler_path))