From cb93bafc4f94dbf0a4e40370079ee176b7a935fa Mon Sep 17 00:00:00 2001 From: AMZN-AlexOteiza <82234181+AMZN-AlexOteiza@users.noreply.github.com> Date: Fri, 12 Nov 2021 16:09:09 +0000 Subject: [PATCH] Fixed physics tests on linux (#5579) * Fixed physics tests on linux * Fixed unit tests because of new implementation * Fixed bug in lock, fixed unit tests Co-authored-by: aljanru --- .../Physics/utils/FileManagement.py | 1 + .../ly_test_tools/environment/file_system.py | 6 +++-- .../tests/unit/test_file_system.py | 23 +++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/Physics/utils/FileManagement.py b/AutomatedTesting/Gem/PythonTests/Physics/utils/FileManagement.py index 22a41de4ea..017bb672a4 100644 --- a/AutomatedTesting/Gem/PythonTests/Physics/utils/FileManagement.py +++ b/AutomatedTesting/Gem/PythonTests/Physics/utils/FileManagement.py @@ -218,6 +218,7 @@ class FileManagement: src_file_path = os.path.join(src_path, src_file) if os.path.exists(target_file_path): fs.unlock_file(target_file_path) + os.makedirs(target_path, exist_ok=True) shutil.copyfile(src_file_path, target_file_path) @staticmethod diff --git a/Tools/LyTestTools/ly_test_tools/environment/file_system.py b/Tools/LyTestTools/ly_test_tools/environment/file_system.py index d8ecd7d908..c67ecc5b23 100755 --- a/Tools/LyTestTools/ly_test_tools/environment/file_system.py +++ b/Tools/LyTestTools/ly_test_tools/environment/file_system.py @@ -219,7 +219,8 @@ def unlock_file(file_name): :return: True if unlock succeeded, else False """ if not os.access(file_name, os.W_OK): - os.chmod(file_name, stat.S_IWRITE) + file_stat = os.stat(file_name) + os.chmod(file_name, file_stat.st_mode | stat.S_IWRITE) logger.warning(f'Clearing write lock for file {file_name}.') return True else: @@ -235,7 +236,8 @@ def lock_file(file_name): :return: True if lock succeeded, else False """ if os.access(file_name, os.W_OK): - os.chmod(file_name, stat.S_IREAD) + file_stat = os.stat(file_name) + os.chmod(file_name, file_stat.st_mode & (~stat.S_IWRITE)) logger.warning(f'Write locking file {file_name}') return True else: diff --git a/Tools/LyTestTools/tests/unit/test_file_system.py b/Tools/LyTestTools/tests/unit/test_file_system.py index 53ca5a700e..2ddd3f8934 100755 --- a/Tools/LyTestTools/tests/unit/test_file_system.py +++ b/Tools/LyTestTools/tests/unit/test_file_system.py @@ -8,6 +8,7 @@ SPDX-License-Identifier: Apache-2.0 OR MIT import errno import logging import os +import stat import psutil import subprocess import sys @@ -454,24 +455,33 @@ class TestChangePermissions(unittest.TestCase): self.assertEqual(file_system.change_permissions('.', 0o777), False) +class MockStatResult(): + def __init__(self, st_mode): + self.st_mode = st_mode + class TestUnlockFile(unittest.TestCase): def setUp(self): self.file_name = 'file' + @mock.patch('os.stat') @mock.patch('os.chmod') @mock.patch('os.access') - def test_UnlockFile_WriteLocked_UnlockFile(self, mock_access, mock_chmod): + def test_UnlockFile_WriteLocked_UnlockFile(self, mock_access, mock_chmod, mock_stat): mock_access.return_value = False + os.stat.return_value = MockStatResult(stat.S_IREAD) success = file_system.unlock_file(self.file_name) + mock_chmod.assert_called_once_with(self.file_name, stat.S_IREAD | stat.S_IWRITE) self.assertTrue(success) + @mock.patch('os.stat') @mock.patch('os.chmod') @mock.patch('os.access') - def test_UnlockFile_AlreadyUnlocked_LogAlreadyUnlocked(self, mock_access, mock_chmod): + def test_UnlockFile_AlreadyUnlocked_LogAlreadyUnlocked(self, mock_access, mock_chmod, mock_stat): mock_access.return_value = True + os.stat.return_value = MockStatResult(stat.S_IREAD | stat.S_IWRITE) success = file_system.unlock_file(self.file_name) @@ -483,19 +493,24 @@ class TestLockFile(unittest.TestCase): def setUp(self): self.file_name = 'file' + @mock.patch('os.stat') @mock.patch('os.chmod') @mock.patch('os.access') - def test_UnlockFile_UnlockedFile_FileLockedSuccessReturnsTrue(self, mock_access, mock_chmod): + def test_LockFile_UnlockedFile_FileLockedSuccessReturnsTrue(self, mock_access, mock_chmod, mock_stat): mock_access.return_value = True + os.stat.return_value = MockStatResult(stat.S_IREAD | stat.S_IWRITE) success = file_system.lock_file(self.file_name) + mock_chmod.assert_called_once_with(self.file_name, stat.S_IREAD) self.assertTrue(success) + @mock.patch('os.stat') @mock.patch('os.chmod') @mock.patch('os.access') - def test_UnlockFile_AlreadyLocked_FileLockedFailedReturnsFalse(self, mock_access, mock_chmod): + def test_LockFile_AlreadyLocked_FileLockedFailedReturnsFalse(self, mock_access, mock_chmod, mock_stat): mock_access.return_value = False + os.stat.return_value = MockStatResult(stat.S_IREAD) success = file_system.lock_file(self.file_name)