From 1dae3b08e0c7d6ce92a7be2dfbe2100e86c90ad4 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Fri, 16 Oct 2015 20:39:39 +0100 Subject: [PATCH] Test creation of a subdirectory. Signed-off-by: Daira Hopwood --- src/allmydata/test/test_magic_folder.py | 45 ++++++++++++++++--------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/allmydata/test/test_magic_folder.py b/src/allmydata/test/test_magic_folder.py index 0d03e686..39a71ed1 100644 --- a/src/allmydata/test/test_magic_folder.py +++ b/src/allmydata/test/test_magic_folder.py @@ -5,6 +5,7 @@ from twisted.trial import unittest from twisted.internet import defer, task from allmydata.interfaces import IDirectoryNode +from allmydata.util.assertutil import precondition from allmydata.util import fake_inotify, fileutil from allmydata.util.deferredutil import DeferredListShouldSucceed @@ -257,8 +258,8 @@ class MagicFolderTestMixin(MagicFolderCLITestMixin, ShouldFailMixin, ReallyEqual # Test that temporary files are not uploaded. d.addCallback(lambda ign: self._check_file(u"tempfile", "test", temporary=True)) - # Test that we tolerate creation of a subdirectory. - d.addCallback(lambda ign: os.mkdir(os.path.join(self.local_dir, u"directory"))) + # Test creation of a subdirectory. + d.addCallback(lambda ign: self._check_mkdir(u"directory")) # Write something longer, and also try to test a Unicode name if the fs can represent it. name_u = self.unicode_or_fallback(u"l\u00F8ng", u"long") @@ -270,7 +271,12 @@ class MagicFolderTestMixin(MagicFolderCLITestMixin, ShouldFailMixin, ReallyEqual d.addBoth(self.cleanup) return d - def _check_file(self, name_u, data, temporary=False): + def _check_mkdir(self, name_u): + return self._check_file(name_u + u"/", "", directory=True) + + def _check_file(self, name_u, data, temporary=False, directory=False): + precondition(not (temporary and directory), temporary=temporary, directory=directory) + previously_uploaded = self._get_count('uploader.objects_succeeded') previously_disappeared = self._get_count('uploader.objects_disappeared') @@ -279,27 +285,34 @@ class MagicFolderTestMixin(MagicFolderCLITestMixin, ShouldFailMixin, ReallyEqual path_u = abspath_expanduser_unicode(name_u, base=self.local_dir) path = to_filepath(path_u) - # We don't use FilePath.setContent() here because it creates a temporary file that - # is renamed into place, which causes events that the test is not expecting. - f = open(path_u, "wb") - try: - if temporary and sys.platform != "win32": + if directory: + os.mkdir(path_u) + event_mask = self.inotify.IN_CREATE | self.inotify.IN_ISDIR + else: + # We don't use FilePath.setContent() here because it creates a temporary file that + # is renamed into place, which causes events that the test is not expecting. + f = open(path_u, "wb") + try: + if temporary and sys.platform != "win32": + os.unlink(path_u) + f.write(data) + finally: + f.close() + if temporary and sys.platform == "win32": os.unlink(path_u) - f.write(data) - finally: - f.close() - if temporary and sys.platform == "win32": - os.unlink(path_u) - self.notify(path, self.inotify.IN_DELETE) + self.notify(path, self.inotify.IN_DELETE) + event_mask = self.inotify.IN_CLOSE_WRITE + fileutil.flush_volume(path_u) - self.notify(path, self.inotify.IN_CLOSE_WRITE) + self.notify(path, event_mask) + encoded_name_u = magicpath.path2magic(name_u) d.addCallback(lambda ign: self.failUnlessReallyEqual(self._get_count('uploader.objects_failed'), 0)) if temporary: d.addCallback(lambda ign: self.failUnlessReallyEqual(self._get_count('uploader.objects_disappeared'), previously_disappeared + 1)) else: - d.addCallback(lambda ign: self.upload_dirnode.get(name_u)) + d.addCallback(lambda ign: self.upload_dirnode.get(encoded_name_u)) d.addCallback(download_to_data) d.addCallback(lambda actual_data: self.failUnlessReallyEqual(actual_data, data)) d.addCallback(lambda ign: self.failUnlessReallyEqual(self._get_count('uploader.objects_succeeded'), -- 2.37.2