From 562cce1dee610b8c26a0d8d42a3f9df5adf96503 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Tue, 13 Nov 2018 23:03:45 +0100 Subject: [PATCH 1/3] stop using fakeroot on travis, avoids #2482 on osx, we already ran the tests w/o fakeroot, directly as root. do the same for linux. --- .travis/run.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.travis/run.sh b/.travis/run.sh index 7c1e847c1..91f6f7663 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -13,11 +13,6 @@ if [[ "$(uname -s)" == "Darwin" ]]; then fi fi -source ~/.venv/bin/activate - -if [[ "$(uname -s)" == "Darwin" ]]; then - # no fakeroot on OS X - sudo tox -e $TOXENV -r -else - fakeroot -u tox -r -fi +# do not use fakeroot, but run as root on travis. +# avoids the dreaded EISDIR sporadic failures. see #2482. +sudo bash -c "source ~/.venv/bin/activate ; tox -e $TOXENV -r" From 53971e8e79c515e942eb4acdb9d19d002779e5e9 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 14 Nov 2018 01:10:16 +0100 Subject: [PATCH 2/3] xattr key names must start with user. on linux ... or the call will just error with "operation not supported" --- src/borg/testsuite/archiver.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py index aa3b390b0..5bc5c1e82 100644 --- a/src/borg/testsuite/archiver.py +++ b/src/borg/testsuite/archiver.py @@ -1255,14 +1255,14 @@ class ArchiverTestCase(ArchiverTestCaseBase): raise OSError(errno.EACCES, 'EACCES') self.create_regular_file('file') - xattr.setxattr(b'input/file', b'attribute', b'value') + xattr.setxattr(b'input/file', b'user.attribute', b'value') self.cmd('init', self.repository_location, '-e' 'none') self.cmd('create', self.repository_location + '::test', 'input') with changedir('output'): input_abspath = os.path.abspath('input/file') with patch.object(xattr, 'setxattr', patched_setxattr_E2BIG): out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING) - assert '>: Value or key of extended attribute attribute is too big for this filesystem\n' in out + assert '>: Value or key of extended attribute user.attribute is too big for this filesystem\n' in out os.remove(input_abspath) with patch.object(xattr, 'setxattr', patched_setxattr_ENOTSUP): out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING) @@ -1270,7 +1270,7 @@ class ArchiverTestCase(ArchiverTestCaseBase): os.remove(input_abspath) with patch.object(xattr, 'setxattr', patched_setxattr_EACCES): out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING) - assert '>: Permission denied when setting extended attribute attribute\n' in out + assert '>: Permission denied when setting extended attribute user.attribute\n' in out assert os.path.isfile(input_abspath) def test_path_normalization(self): From 3d05a4b114ed6f0ab025eb1175b333ca6dec9f0e Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 14 Nov 2018 01:42:25 +0100 Subject: [PATCH 3/3] xattrs: linux does not allow user.* xattrs on symlinks --- src/borg/testsuite/xattr.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/borg/testsuite/xattr.py b/src/borg/testsuite/xattr.py index f9712be09..44d1d12db 100644 --- a/src/borg/testsuite/xattr.py +++ b/src/borg/testsuite/xattr.py @@ -6,6 +6,7 @@ import pytest from ..platform.xattr import buffer, split_lstring from ..xattr import is_enabled, getxattr, setxattr, listxattr +from ..platformflags import is_linux from . import BaseTestCase @@ -36,15 +37,19 @@ class XattrTestCase(BaseTestCase): setxattr(tmp_fn, b'user.foo', b'bar') setxattr(tmp_fd, b'user.bar', b'foo') setxattr(tmp_fn, b'user.empty', b'') - setxattr(tmp_lfn, b'user.linkxattr', b'baz') + if not is_linux: + # linux does not allow setting user.* xattrs on symlinks + setxattr(tmp_lfn, b'user.linkxattr', b'baz') self.assert_equal_se(listxattr(tmp_fn), [b'user.foo', b'user.bar', b'user.empty']) self.assert_equal_se(listxattr(tmp_fd), [b'user.foo', b'user.bar', b'user.empty']) self.assert_equal_se(listxattr(tmp_lfn, follow_symlinks=True), [b'user.foo', b'user.bar', b'user.empty']) - self.assert_equal_se(listxattr(tmp_lfn), [b'user.linkxattr']) + if not is_linux: + self.assert_equal_se(listxattr(tmp_lfn), [b'user.linkxattr']) self.assert_equal(getxattr(tmp_fn, b'user.foo'), b'bar') self.assert_equal(getxattr(tmp_fd, b'user.foo'), b'bar') self.assert_equal(getxattr(tmp_lfn, b'user.foo', follow_symlinks=True), b'bar') - self.assert_equal(getxattr(tmp_lfn, b'user.linkxattr'), b'baz') + if not is_linux: + self.assert_equal(getxattr(tmp_lfn, b'user.linkxattr'), b'baz') self.assert_equal(getxattr(tmp_fn, b'user.empty'), b'') def test_listxattr_buffer_growth(self):