-import os, signal, time
+import os, signal, sys, time
from random import randrange
from twisted.internet import reactor, defer
from twisted.python import failure
+from allmydata.util import fileutil, log
+from allmydata.util.encodingutil import unicode_platform, get_filesystem_encoding
+
+
def insecurerandstr(n):
return ''.join(map(chr, map(randrange, [0]*n, [256]*n)))
class ReallyEqualMixin:
def failUnlessReallyEqual(self, a, b, msg=None):
self.failUnlessEqual(a, b, msg=msg)
- self.failUnlessEqual(type(a), type(b), msg=msg)
+ self.failUnlessEqual(type(a), type(b), msg="a :: %r, b :: %r, %r" % (a, b, msg))
+
+
+class NonASCIIPathMixin:
+ def mkdir_nonascii(self, dirpath):
+ # Kludge to work around the fact that buildbot can't remove a directory tree that has
+ # any non-ASCII directory names on Windows. (#1472)
+ if sys.platform == "win32":
+ def _cleanup():
+ try:
+ fileutil.rm_dir(dirpath)
+ finally:
+ if os.path.exists(dirpath):
+ msg = ("We were unable to delete a non-ASCII directory %r created by the test. "
+ "This is liable to cause failures on future builds." % (dirpath,))
+ print msg
+ log.err(msg)
+ self.addCleanup(_cleanup)
+ os.mkdir(dirpath)
+
+ def unicode_or_fallback(self, unicode_name, fallback_name):
+ if unicode_platform():
+ return unicode_name
+ try:
+ unicode_name.encode(get_filesystem_encoding())
+ return unicode_name
+ except UnicodeEncodeError:
+ return fallback_name
class SignalMixin:
if required_to_quiesce and active:
self.fail("Reactor was still active when it was required to be quiescent.")
+
+class TimezoneMixin(object):
+
+ def setTimezone(self, timezone):
+ def tzset_if_possible():
+ # Windows doesn't have time.tzset().
+ if hasattr(time, 'tzset'):
+ time.tzset()
+
+ unset = object()
+ originalTimezone = os.environ.get('TZ', unset)
+ def restoreTimezone():
+ if originalTimezone is unset:
+ del os.environ['TZ']
+ else:
+ os.environ['TZ'] = originalTimezone
+ tzset_if_possible()
+
+ os.environ['TZ'] = timezone
+ self.addCleanup(restoreTimezone)
+ tzset_if_possible()
+
+ def have_working_tzset(self):
+ return hasattr(time, 'tzset')
+
+
try:
import win32file
import win32con