test_builtin_helpers.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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.builtin.helpers functions.
  6. """
  7. import unittest.mock as mock
  8. import os
  9. import pytest
  10. import ly_test_tools.builtin.helpers
  11. import ly_test_tools._internal.managers.abstract_resource_locator
  12. import ly_test_tools._internal.managers.workspace
  13. import ly_test_tools._internal.managers.platforms.mac
  14. import ly_test_tools._internal.managers.platforms.windows
  15. from ly_test_tools._internal.exceptions import LyTestToolsFrameworkException
  16. from ly_test_tools import MAC, WINDOWS
  17. pytestmark = pytest.mark.SUITE_smoke
  18. class MockedAbstractResourceLocator(ly_test_tools._internal.managers.abstract_resource_locator.AbstractResourceLocator):
  19. def __init__(self, build_directory, project):
  20. super(MockedAbstractResourceLocator, self).__init__(
  21. build_directory=build_directory,
  22. project=project,
  23. )
  24. class MockedWorkspaceManager(ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager):
  25. def __init__(
  26. self, resource_locator, project, tmp_path, output_path
  27. ):
  28. super(MockedWorkspaceManager, self).__init__(
  29. resource_locator=resource_locator,
  30. project=project,
  31. tmp_path=tmp_path,
  32. output_path=output_path
  33. )
  34. @mock.patch('ly_test_tools._internal.managers.abstract_resource_locator._find_project_json',
  35. mock.MagicMock(return_value=os.path.join("mocked", "path")))
  36. @mock.patch(
  37. 'ly_test_tools._internal.managers.abstract_resource_locator.AbstractResourceLocator',
  38. mock.MagicMock(return_value=MockedAbstractResourceLocator)
  39. )
  40. @mock.patch('os.remove', mock.MagicMock(return_value=True))
  41. class TestBuiltinHelpers(object):
  42. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager',
  43. mock.MagicMock(return_value=MockedWorkspaceManager))
  44. @mock.patch('ly_test_tools.builtin.helpers.WINDOWS', True)
  45. @mock.patch('os.path.exists', mock.MagicMock(return_value=True))
  46. def test_CreateBuiltinWorkspace_WindowsOS_ReturnsWindowsWorkspaceManager(self):
  47. expected_workspace = ly_test_tools._internal.managers.platforms.windows.WindowsWorkspaceManager
  48. under_test = ly_test_tools.builtin.helpers.create_builtin_workspace(
  49. build_directory='build_directory',
  50. project='mock_project',
  51. tmp_path='mock_tmp_path',
  52. output_path='mock_output_path',
  53. )
  54. assert type(under_test) == expected_workspace
  55. @mock.patch('ly_test_tools._internal.managers.abstract_resource_locator._find_project_json',
  56. mock.MagicMock(return_value='mock_project'))
  57. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager',
  58. mock.MagicMock(return_value=MockedWorkspaceManager))
  59. @mock.patch('ly_test_tools.builtin.helpers.MAC', True)
  60. @mock.patch('ly_test_tools.builtin.helpers.WINDOWS', False)
  61. def test_CreateBuiltinWorkspace_MacOS_ReturnsMacWorkspaceManager(self):
  62. expected_workspace = ly_test_tools._internal.managers.platforms.mac.MacWorkspaceManager
  63. under_test = ly_test_tools.builtin.helpers.create_builtin_workspace(
  64. build_directory='build_directory',
  65. project='mock_project',
  66. tmp_path='mock_tmp_path',
  67. output_path='mock_output_path',
  68. )
  69. assert type(under_test) == expected_workspace
  70. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager',
  71. mock.MagicMock(return_value=MockedWorkspaceManager))
  72. @mock.patch('ly_test_tools._internal.pytest_plugin.build_directory', None)
  73. def test_CreateBuiltinWorkspace_InvalidPlatform_RaisesValueError(self):
  74. with pytest.raises(ValueError):
  75. ly_test_tools.builtin.helpers.create_builtin_workspace(
  76. build_directory=None,
  77. project='mock_project',
  78. tmp_path='mock_tmp_path',
  79. output_path='mock_output_path',
  80. )
  81. @mock.patch('os.path.abspath', mock.MagicMock(return_value='mock_base_dir'))
  82. @mock.patch('os.path.exists', mock.MagicMock(return_value=True))
  83. def test_FindEngineRoot_HasRootFile_ReturnsTuple(self):
  84. under_test = ly_test_tools._internal.managers.abstract_resource_locator._find_engine_root(
  85. initial_path='mock_dev_dir')
  86. assert under_test == ('mock_dev_dir')
  87. @mock.patch('os.path.abspath', mock.MagicMock(return_value='mock_base_dir'))
  88. @mock.patch('os.path.exists', mock.MagicMock(return_value=False))
  89. def test_FindEngineRoot_NoRootFile_RaisesOSError(self):
  90. with pytest.raises(LyTestToolsFrameworkException):
  91. ly_test_tools._internal.managers.abstract_resource_locator._find_engine_root(
  92. initial_path='mock_dev_dir')
  93. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager.teardown')
  94. @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager.setup')
  95. @mock.patch('ly_test_tools._internal.managers.artifact_manager.NullArtifactManager', mock.MagicMock())
  96. @mock.patch('os.path.exists', mock.MagicMock(return_value=True))
  97. def test_SetupTeardownBuiltinWorkspace_ValidWorkspaceSetup_ReturnsWorkspaceObject(self, mock_setup, mock_teardown):
  98. mock_test_name = 'mock_test_name'
  99. mock_test_amount = 10
  100. mock_workspace = ly_test_tools.builtin.helpers.create_builtin_workspace(
  101. build_directory='build_directory',
  102. project='mock_project',
  103. tmp_path='mock_tmp_path',
  104. output_path='mock_output_path',
  105. )
  106. setup_test = ly_test_tools.builtin.helpers.setup_builtin_workspace(
  107. mock_workspace, mock_test_name, mock_test_amount)
  108. assert setup_test == mock_workspace
  109. assert mock_setup.call_count == 1
  110. mock_workspace.artifact_manager.set_dest_path.assert_called_with(
  111. test_name=mock_test_name, amount=mock_test_amount)
  112. # Teardown not tested separately due to patched MockedAbstractResourceLocator creating a StopIteration error on Linux
  113. teardown_test = ly_test_tools.builtin.helpers.teardown_builtin_workspace(mock_workspace)
  114. assert teardown_test == mock_workspace
  115. assert mock_teardown.call_count == 1