Opened at 2015-06-08T08:26:32Z
Closed at 2015-06-09T05:49:22Z
#2444 closed defect (fixed)
Magic Folder: tests fail on Travis-CI with UnicodeEncodeError from INotify.watch
Reported by: | daira | Owned by: | daira |
---|---|---|---|
Priority: | normal | Milestone: | undecided |
Component: | code-frontend-magic-folder | Version: | 1.10.0 |
Keywords: | otf-magic-folder-objective4 tests unicode travis | Cc: | |
Launchpad Bug: |
Description
https://travis-ci.org/tahoe-lafs/tahoe-lafs/jobs/65770833
allmydata.test.test_drop_upload.RealTest.test_drop_upload ... Traceback (most recent call last): File "/home/travis/build/tahoe-lafs/tahoe-lafs/src/allmydata/test/test_drop_upload.py", line 57, in _create_uploader dbfile, inotify=self.inotify, pending_delay=0.2) File "/home/travis/build/tahoe-lafs/tahoe-lafs/src/allmydata/frontends/drop_upload.py", line 75, in __init__ recursive=True) File "/home/travis/build/tahoe-lafs/tahoe-lafs/support/lib/python2.7/site-packages/Twisted-15.2.1-py2.7-linux-x86_64.egg/twisted/internet/inotify.py", line 360, in watch recursive=False) File "/home/travis/build/tahoe-lafs/tahoe-lafs/support/lib/python2.7/site-packages/Twisted-15.2.1-py2.7-linux-x86_64.egg/twisted/internet/inotify.py", line 368, in watch return self._addWatch(path, mask, autoAdd, callbacks) File "/home/travis/build/tahoe-lafs/tahoe-lafs/support/lib/python2.7/site-packages/Twisted-15.2.1-py2.7-linux-x86_64.egg/twisted/internet/inotify.py", line 190, in _addWatch wd = self._inotify.add(self._fd, path.path, mask) File "/home/travis/build/tahoe-lafs/tahoe-lafs/support/lib/python2.7/site-packages/Twisted-15.2.1-py2.7-linux-x86_64.egg/twisted/python/_inotify.py", line 40, in add wd = libc.inotify_add_watch(fd, path, mask) ctypes.ArgumentError: argument 2: <type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\u0101' in position 126: ordinal not in range(128) [ERROR]
Change History (8)
comment:1 Changed at 2015-06-08T08:32:04Z by daira
comment:2 Changed at 2015-06-08T08:34:06Z by daira
See #2268.
comment:3 Changed at 2015-06-08T11:11:18Z by daira
Oh wait, I think this is a different error than I originally thought: it could be due to the FilePath's path attribute holding a Unicode string rather than a str.
This is strictly speaking a Twisted bug: in Twisted 15.2.1 which is the version used in this test, FilePath is supposed to accept Unicode paths (and so inotify.py should be using path._asBytesPath() instead of path.path here). Nevertheless, constructing it with a str path may be the best workaround.
comment:4 Changed at 2015-06-08T11:24:36Z by daira
Filed against Twisted as https://twistedmatrix.com/trac/ticket/7928.
comment:5 Changed at 2015-06-08T11:48:24Z by daira
- Status changed from new to assigned
- Summary changed from Magic Folder: tests fail on Travis-CI because filesystem encoding is ASCII to Magic Folder: tests fail on Travis-CI with UnicodeEncodeError from INotify.watch
comment:6 follow-up: ↓ 7 Changed at 2015-06-08T11:51:09Z by daira
There are actually two bugs here, one in Tahoe-LAFS (we should not be attempting to test Unicode filenames that the filesystem encoding can't represent), and the one in Twisted. The latter only causes a test failure on the branches of Tahoe-LAFS that have Windows inotify-emulation support enabled (because only those branches use Unicode-mode FilePaths).
comment:7 in reply to: ↑ 6 Changed at 2015-06-08T12:38:44Z by daira
Replying to daira:
There are actually two bugs here, one in Tahoe-LAFS (we should not be attempting to test Unicode filenames that the filesystem encoding can't represent), and the one in Twisted. The latter only causes a test failure on the branches of Tahoe-LAFS that have Windows inotify-emulation support enabled (because only those branches use Unicode-mode FilePaths).
Correction: I had already fixed the first bug on those branches. The remaining problem is that we have this code in encodingutil.py which attempts to determine whether a Unicode-mode FilePath should be used:
use_unicode_filepath = sys.platform == "win32" or hasattr(FilePath, '_asTextPath')
Because of the Twisted bug, for now this needs to be just:
use_unicode_filepath = sys.platform == "win32"
(We won't hit the Twisted bug on Windows because on that platform we use our own INotify emulation which does accept Unicode FilePaths, and which even works on versions of Twisted before the fix to https://twistedmatrix.com/trac/ticket/7928.)
comment:8 Changed at 2015-06-09T05:49:22Z by daira
- Resolution set to fixed
- Status changed from assigned to closed
This needs a call to NonASCIIPathMixin.unicode_or_fallback to construct the filename. It would also be good if we could get Travis to accept Unicode filenames, since that provides better test coverage.