示例#1
0
    def test_unused_path(self):
        """
        Test the get_unused_path helper
        """
        test_folder = os.path.join(self.tank_temp, "unused_tests")

        # Basic test with a simple name
        path = os.path.join(test_folder, "foo")
        self.assertEqual(fs.get_unused_path(path), path)
        # Create the target path and check it is detected
        fs.ensure_folder_exists(path)
        self.assertEqual(fs.get_unused_path(path), "%s_1" % path)

        # Test we insert the number in the right place if we have some "." in the
        # base path.
        path = os.path.join(test_folder, "foo.0020.exr")
        self.assertEqual(fs.get_unused_path(path), path)
        fs.touch_file(path)
        self.assertEqual(fs.get_unused_path(path),
                         os.path.join(test_folder, "foo_1.0020.exr"))

        # Test multiple iterations
        fs.touch_file(os.path.join(test_folder, "foo_1.0020.exr"))
        fs.touch_file(os.path.join(test_folder, "foo_2.0020.exr"))
        fs.touch_file(os.path.join(test_folder, "foo_3.0020.exr"))
        fs.touch_file(os.path.join(test_folder, "foo_4.0020.exr"))
        self.assertEqual(fs.get_unused_path(path),
                         os.path.join(test_folder, "foo_5.0020.exr"))

        # Clean up
        fs.safe_delete_folder(test_folder)
示例#2
0
    def test_13_cleanup_path_cache(self):
        """
        Cleans up the path cache and filesystem locations so we don't get data from
        previous test runs.
        """

        # Delete all filesystem location from previous test runs to not confuse
        # path cache related tests.
        self.local_storage["path"]
        for fsl in self.sg.find("FilesystemLocation",
                                [["project", "is", self.project]]):
            self.sg.delete(fsl["type"], fsl["id"])

        # Remove any files from disk to not confuse the path cache related tests.
        if os.path.exists(self.local_storage["path"]):
            filesystem.safe_delete_folder(self.local_storage["path"])

        os.makedirs(self.local_storage["path"])

        output = self.run_tank_cmd(
            self.pipeline_location,
            "synchronize_folders",
            extra_cmd_line_arguments=["--full"],
        )
        self.assertRegex(output, r"Doing a full sync.")
        self.assertRegex(output,
                         r"Local folder information has been synchronized.")
示例#3
0
    def test_unused_path(self):
        """
        Test the get_unused_path helper
        """
        test_folder = os.path.join(self.tank_temp, "unused_tests")

        # Basic test with a simple name
        path = os.path.join(test_folder, "foo")
        self.assertEqual(fs.get_unused_path(path), path)
        # Create the target path and check it is detected
        fs.ensure_folder_exists(path)
        self.assertEqual(fs.get_unused_path(path), "%s_1" % path)

        # Test we insert the number in the right place if we have some "." in the
        # base path.
        path = os.path.join(test_folder, "foo.0020.exr")
        self.assertEqual(fs.get_unused_path(path), path)
        fs.touch_file(path)
        self.assertEqual(fs.get_unused_path(path), os.path.join(test_folder, "foo_1.0020.exr"))

        # Test multiple iterations
        fs.touch_file(os.path.join(test_folder, "foo_1.0020.exr"))
        fs.touch_file(os.path.join(test_folder, "foo_2.0020.exr"))
        fs.touch_file(os.path.join(test_folder, "foo_3.0020.exr"))
        fs.touch_file(os.path.join(test_folder, "foo_4.0020.exr"))
        self.assertEqual(fs.get_unused_path(path), os.path.join(test_folder, "foo_5.0020.exr"))

        # Clean up
        fs.safe_delete_folder(test_folder)
示例#4
0
 def test_safe_delete_folder_with_file_in_use(self):
     """
     Check that delete folder will delete as much as it can, even when
     it encounters errors like failures to delete some of the items in
     the folder
     """
     src_folder = os.path.join(
         self.util_filesystem_test_folder_location, "delete_folder"
     )
     dst_folder = os.path.join(self.tank_temp, "folder_in_use")
     shutil.copytree(src_folder, dst_folder)
     self.assertTrue(os.path.exists(dst_folder))
     # open a file in the directory to remove ...
     with open(os.path.join(dst_folder, "ReadWrite.txt")) as f:
         # ... and check that a failure occurs
         fs.safe_delete_folder(dst_folder)
         if is_windows():
             # A failure occurred, folder should still be there
             self.assertTrue(
                 os.path.exists(dst_folder)
             )  # on Windows removal of in-use files behaves differently than...
         else:
             self.assertFalse(
                 os.path.exists(dst_folder)
             )  # ... on Unix, see comments for https://docs.python.org/2/library/os.html#os.remove
示例#5
0
 def test_safe_delete_non_existing_folder(self):
     """
     Check that a non-existing folder deletion fails
     """
     dst_folder = os.path.join(self.tank_temp, "non_existing_folder")
     self.assertFalse(os.path.exists(dst_folder))
     fs.safe_delete_folder(dst_folder)
     self.assertFalse(os.path.exists(dst_folder))
示例#6
0
 def test_safe_delete_non_existing_folder(self):
     """
     Check that a non-existing folder deletion fails
     """
     dst_folder = os.path.join(self.tank_temp, "non_existing_folder")
     self.assertFalse(os.path.exists(dst_folder))
     fs.safe_delete_folder(dst_folder)
     self.assertFalse(os.path.exists(dst_folder))
示例#7
0
 def test_safe_delete_folder(self):
     """
     Check that the test folder and all its contents are deleted recursively
     """
     src_folder = os.path.join(self.util_filesystem_test_folder_location, "delete_folder")
     dst_folder = os.path.join(self.tank_temp, "folder")
     shutil.copytree(src_folder, dst_folder)
     self.assertTrue(os.path.exists(dst_folder))
     fs.safe_delete_folder(dst_folder)
     self.assertFalse(os.path.exists(dst_folder))
示例#8
0
 def test_safe_delete_folder(self):
     """
     Check that the test folder and all its contents are deleted recursively
     """
     src_folder = os.path.join(self.util_filesystem_test_folder_location,
                               "delete_folder")
     dst_folder = os.path.join(self.tank_temp, "folder")
     shutil.copytree(src_folder, dst_folder)
     self.assertTrue(os.path.exists(dst_folder))
     fs.safe_delete_folder(dst_folder)
     self.assertFalse(os.path.exists(dst_folder))
示例#9
0
 def test_safe_delete_folder_with_file_in_use(self):
     """
     Check that delete folder will delete as much as it can, even when
     it encounters errors like failures to delete some of the items in
     the folder
     """
     src_folder = os.path.join(self.util_filesystem_test_folder_location, "delete_folder")
     dst_folder = os.path.join(self.tank_temp, "folder_in_use")
     shutil.copytree(src_folder, dst_folder)
     self.assertTrue(os.path.exists(dst_folder))
     # open a file in the directory to remove ...
     with open(os.path.join(dst_folder, "ReadWrite.txt")) as f:
         # ... and check that a failure occurs
         fs.safe_delete_folder(dst_folder)
         if sys.platform == "win32":                
             # A failure occurred, folder should still be there
             self.assertTrue(os.path.exists(dst_folder)) # on Windows removal of in-use files behaves differently than...
         else:
             self.assertFalse(os.path.exists(dst_folder)) # ... on Unix, see comments for https://docs.python.org/2/library/os.html#os.remove
示例#10
0
    def test_safe_delete_folder_with_read_only_items(self):
        """
        Check that safe_delete_folder will delete all items in the folder, even read only ones
        """
        src_folder = os.path.join(self.util_filesystem_test_folder_location, "delete_folder")
        dst_folder = os.path.join(self.tank_temp, "folder_with_read_only_items")
        shutil.copytree(src_folder, dst_folder)
        self.assertTrue(os.path.exists(dst_folder))

        # make folder items read-only
        read_only_filename = os.path.join(dst_folder, "ReadOnly.txt")
        file_permissions = os.stat(read_only_filename)[stat.ST_MODE]
        os.chmod(read_only_filename, file_permissions & ~stat.S_IWRITE)
        if sys.platform == "win32":
            folder_permissions = os.stat(dst_folder)[stat.ST_MODE]
            os.chmod(dst_folder, folder_permissions & ~stat.S_IWRITE)

        fs.safe_delete_folder(dst_folder)

        # check that the folder is deleted successfully
        self.assertFalse(os.path.exists(dst_folder))
示例#11
0
    def test_safe_delete_folder_with_read_only_items(self):
        """
        Check that safe_delete_folder will delete all items in the folder, even read only ones
        """
        src_folder = os.path.join(self.util_filesystem_test_folder_location,
                                  "delete_folder")
        dst_folder = os.path.join(self.tank_temp,
                                  "folder_with_read_only_items")
        shutil.copytree(src_folder, dst_folder)
        self.assertTrue(os.path.exists(dst_folder))

        # make folder items read-only
        read_only_filename = os.path.join(dst_folder, "ReadOnly.txt")
        file_permissions = os.stat(read_only_filename)[stat.ST_MODE]
        os.chmod(read_only_filename, file_permissions & ~stat.S_IWRITE)
        if is_windows():
            folder_permissions = os.stat(dst_folder)[stat.ST_MODE]
            os.chmod(dst_folder, folder_permissions & ~stat.S_IWRITE)

        fs.safe_delete_folder(dst_folder)

        # check that the folder is deleted successfully
        self.assertFalse(os.path.exists(dst_folder))
示例#12
0
    def test_copy_file_and_folder(self):
        """
        Test the copy_file helper
        """
        # A root folder
        copy_test_root_folder = os.path.join(self.tank_temp, "copy_tests")
        fs.ensure_folder_exists(copy_test_root_folder, permissions=0o777)
        # Copy src file
        copy_test_basename = "copy_file.txt"
        copy_test_file = os.path.join(copy_test_root_folder, copy_test_basename)
        fs.touch_file(copy_test_file, permissions=0o777)
        # Copy dst folder
        copy_test_dst_folder = os.path.join(
            copy_test_root_folder, "copy_test_dst_folder"
        )
        fs.ensure_folder_exists(copy_test_dst_folder, permissions=0o777)
        # Copy dst file
        copy_test_dst_file = os.path.join(copy_test_dst_folder, "copied_file.txt")

        # Tests
        # Test folder name dst argument
        fs.copy_file(
            os.path.join(copy_test_root_folder, copy_test_basename),
            copy_test_dst_folder,
            permissions=0o777,
        )
        self.assertTrue(
            os.path.exists(os.path.join(copy_test_dst_folder, copy_test_basename))
        )
        # Test file name dst argument
        fs.copy_file(
            os.path.join(copy_test_root_folder, copy_test_basename), copy_test_dst_file
        )
        self.assertTrue(os.path.exists(copy_test_dst_file))

        # Clean up
        fs.safe_delete_folder(copy_test_root_folder)
示例#13
0
        # to set it up themselves.
        if options.test_root:
            python_test_root = os.path.join(options.test_root, "python")
            if os.path.exists(python_test_root):
                sys.path.insert(0, python_test_root)

        ret_val = _run_tests(options.test_root, test_names)

        if options.coverage:
            _finalize_coverage(cov)

        # Exit value determined by failures and errors
        if ret_val.errors or ret_val.failures:
            exit_val = 1

    except Exception as e:
        print("Unexpected exception: %s" % e)
        # signal failure
        exit_val = 1

    finally:
        from tank.util.filesystem import safe_delete_folder

        # Note: Relying on own value rather than tempfile.tempdir
        #       being global it MIGHT be changed by anyone test
        if new_base_tempdir and os.path.isdir(new_base_tempdir):
            print("\nCleaning up '%s'" % (new_base_tempdir))
            safe_delete_folder(new_base_tempdir)

    sys.exit(exit_val)
示例#14
0
        # to set it up themselves.
        if options.test_root:
            python_test_root = os.path.join(options.test_root, "python")
            if os.path.exists(python_test_root):
                sys.path.insert(0, python_test_root)

        ret_val = _run_tests(options.test_root, test_names)

        if options.coverage:
            _finalize_coverage(cov)

        # Exit value determined by failures and errors
        if ret_val.errors or ret_val.failures:
            exit_val = 1

    except Exception as e:
        print("Unexpected exception: %s" % e)
        # signal failure
        exit_val = 1

    finally:
        from tank.util.filesystem import safe_delete_folder

        # Note: Relying on own value rather than tempfile.tempdir
        #       being global it MIGHT be changed by anyone test
        if new_base_tempdir and os.path.isdir(new_base_tempdir):
            print("\nCleaning up '%s'" % (new_base_tempdir))
            safe_delete_folder(new_base_tempdir)

    sys.exit(exit_val)