sapling/eden/test_support
Xavier Deguillard 053d17f877 test_support: fix rmtree error function
Summary:
Somehow, rmtree can fail to open the file being removed, in which case the
function is `os.open` that requires a flag on top of the path. When that
happens a `TypeError` will be raised:

```
    ✗ Fail: eden/integration:integration - test_eden_start_fails_if_edenfs_fails_during_startup (eden.integration.start_test.StartFakeEdenFSTestSystemdEdenCLI) (4.363)
Test output:
> TypeError: open() missing required argument 'flags' (pos 2)
  File "/usr/local/fbcode/platform009/lib/python3.8/unittest/case.py", line 60, in testPartExecutor
    yield
  File "/usr/local/fbcode/platform009/lib/python3.8/unittest/case.py", line 717, in doCleanups
    self._callCleanup(function, *args, **kwargs)
  File "/usr/local/fbcode/platform009/lib/python3.8/unittest/async_case.py", line 72, in _callCleanup
    self._callMaybeAsync(function, *args, **kwargs)
  File "/usr/local/fbcode/platform009/lib/python3.8/unittest/async_case.py", line 84, in _callMaybeAsync
    ret = func(*args, **kwargs)
  File "/usr/local/fbcode/platform009/lib/python3.8/contextlib.py", line 533, in close
    self.__exit__(None, None, None)
  File "/usr/local/fbcode/platform009/lib/python3.8/contextlib.py", line 525, in __exit__
    raise exc_details[1]
  File "/usr/local/fbcode/platform009/lib/python3.8/contextlib.py", line 510, in __exit__
    if cb(*exc_details):
  File "/data/users/xavierd/fbsource/fbcode/buck-out/dev/gen/aab7ed39/eden/integration/integration#binary,link-tree/eden/test_support/temporary_directory.py", line 104, in __exit__
    self.cleanup(exc_type is not None)
  File "/data/users/xavierd/fbsource/fbcode/buck-out/dev/gen/aab7ed39/eden/integration/integration#binary,link-tree/eden/test_support/temporary_directory.py", line 117, in cleanup
    cleanup_tmp_dir(temp_dir)
  File "/data/users/xavierd/fbsource/fbcode/buck-out/dev/gen/aab7ed39/eden/integration/integration#binary,link-tree/eden/test_support/temporary_directory.py", line 71, in cleanup_tmp_dir
    shutil.rmtree(tmp_dir, onerror=_remove_readonly)
  File "/usr/local/fbcode/platform009/lib/python3.8/shutil.py", line 715, in rmtree
    _rmtree_safe_fd(fd, path, onerror)
  File "/usr/local/fbcode/platform009/lib/python3.8/shutil.py", line 652, in _rmtree_safe_fd
    _rmtree_safe_fd(dirfd, fullname, onerror)
  File "/usr/local/fbcode/platform009/lib/python3.8/shutil.py", line 652, in _rmtree_safe_fd
    _rmtree_safe_fd(dirfd, fullname, onerror)
  File "/usr/local/fbcode/platform009/lib/python3.8/shutil.py", line 652, in _rmtree_safe_fd
    _rmtree_safe_fd(dirfd, fullname, onerror)
  File "/usr/local/fbcode/platform009/lib/python3.8/shutil.py", line 648, in _rmtree_safe_fd
    onerror(os.open, fullname, sys.exc_info())
  File "/data/users/xavierd/fbsource/fbcode/buck-out/dev/gen/aab7ed39/eden/integration/integration#binary,link-tree/eden/test_support/temporary_directory.py", line 66, in _remove_readonly
    func(path)
```

To bypass this, let's simply test if the function is os.unlink or os.rmdir
first.

Reviewed By: chadaustin

Differential Revision: D27654126

fbshipit-source-id: 318c547f363c020e98e21d5f07a9c7a9b2e5102d
2021-04-08 19:00:42 -07:00
..
async_case_backport.py enable asynchronous integration tests 2020-06-15 15:53:50 -07:00
CMakeLists.txt support building the integration tests with CMake 2019-10-04 08:56:38 -07:00
environment_variable.py kill off some of the integration test mixin classes 2020-04-22 15:02:42 -07:00
temporary_directory.py test_support: fix rmtree error function 2021-04-08 19:00:42 -07:00
testcase.py enable asynchronous integration tests 2020-06-15 15:53:50 -07:00