+from __future__ import absolute_import
+from time import tzset
import helpers, math, os, os.path, stat, subprocess
from wvtest import *
+from bup.compat import environ
from bup.helpers import (atomically_replaced_file, batchpipe, detect_fakeroot,
grafted_path_components, mkdirp, parse_num,
path_components, readpipe, stripped_path_components,
bup_tmp = os.path.realpath('../../../t/tmp')
mkdirp(bup_tmp)
-@wvtest
-def test_next():
- with no_lingering_errors():
- # Test whatever you end up with for next() after import '*'.
- WVPASSEQ(next(iter([]), None), None)
- x = iter([1])
- WVPASSEQ(next(x, None), 1)
- WVPASSEQ(next(x, None), None)
- x = iter([1])
- WVPASSEQ(next(x, 'x'), 1)
- WVPASSEQ(next(x, 'x'), 'x')
- WVEXCEPT(StopIteration, next, iter([]))
- x = iter([1])
- WVPASSEQ(next(x), 1)
- WVEXCEPT(StopIteration, next, x)
-
-
-@wvtest
-def test_fallback_next():
- with no_lingering_errors():
- global next
- orig = next
- next = helpers._fallback_next
- try:
- test_next()
- finally:
- next = orig
-
@wvtest
def test_parse_num():
def test_readpipe():
with no_lingering_errors():
x = readpipe(['echo', '42'])
- WVPASSEQ(x, '42\n')
+ WVPASSEQ(x, b'42\n')
try:
readpipe(['bash', '-c', 'exit 42'])
except Exception as ex:
with no_lingering_errors():
for chunk in batchpipe(['echo'], []):
WVPASS(False)
- out = ''
+ out = b''
for chunk in batchpipe(['echo'], ['42']):
out += chunk
- WVPASSEQ(out, '42\n')
+ WVPASSEQ(out, b'42\n')
try:
batchpipe(['bash', '-c'], ['exit 42'])
except Exception as ex:
arg_max = \
helpers._argmax_base(['echo']) + helpers._argmax_args_size(args[:3])
batches = batchpipe(['echo'], args, arg_max=arg_max)
- WVPASSEQ(next(batches), '0 1 2\n')
- WVPASSEQ(next(batches), '3 4 5\n')
+ WVPASSEQ(next(batches), b'0 1 2\n')
+ WVPASSEQ(next(batches), b'3 4 5\n')
WVPASSEQ(next(batches, None), None)
batches = batchpipe(['echo'], [str(x) for x in range(5)], arg_max=arg_max)
- WVPASSEQ(next(batches), '0 1 2\n')
- WVPASSEQ(next(batches), '3 4\n')
+ WVPASSEQ(next(batches), b'0 1 2\n')
+ WVPASSEQ(next(batches), b'3 4\n')
WVPASSEQ(next(batches, None), None)
@wvtest
def test_atomically_replaced_file():
- with no_lingering_errors(), test_tempdir('bup-thelper-') as tmpdir:
- target_file = os.path.join(tmpdir, 'test-atomic-write')
-
- with atomically_replaced_file(target_file, mode='w') as f:
- f.write('asdf')
- WVPASSEQ(f.mode, 'w')
- f = open(target_file, 'r')
- WVPASSEQ(f.read(), 'asdf')
+ with no_lingering_errors():
+ with test_tempdir(b'bup-thelper-') as tmpdir:
+ target_file = os.path.join(tmpdir, b'test-atomic-write')
- try:
with atomically_replaced_file(target_file, mode='w') as f:
- f.write('wxyz')
- raise Exception()
- except:
- pass
- with open(target_file) as f:
+ f.write('asdf')
+ WVPASSEQ(f.mode, 'w')
+ f = open(target_file, 'r')
WVPASSEQ(f.read(), 'asdf')
- with atomically_replaced_file(target_file, mode='wb') as f:
- f.write(os.urandom(20))
- WVPASSEQ(f.mode, 'wb')
+ try:
+ with atomically_replaced_file(target_file, mode='w') as f:
+ f.write('wxyz')
+ raise Exception()
+ except:
+ pass
+ with open(target_file) as f:
+ WVPASSEQ(f.read(), 'asdf')
+
+ with atomically_replaced_file(target_file, mode='wb') as f:
+ f.write(os.urandom(20))
+ WVPASSEQ(f.mode, 'wb')
+
+
+def set_tz(tz):
+ if not tz:
+ del environ[b'TZ']
+ else:
+ environ[b'TZ'] = tz
+ tzset()
@wvtest
def test_utc_offset_str():
with no_lingering_errors():
- tz = os.environ.get('TZ')
+ tz = environ.get(b'TZ')
+ tzset()
try:
- os.environ['TZ'] = 'FOO+0:00'
- WVPASSEQ(utc_offset_str(0), '+0000')
- os.environ['TZ'] = 'FOO+1:00'
- WVPASSEQ(utc_offset_str(0), '-0100')
- os.environ['TZ'] = 'FOO-1:00'
- WVPASSEQ(utc_offset_str(0), '+0100')
- os.environ['TZ'] = 'FOO+3:3'
- WVPASSEQ(utc_offset_str(0), '-0303')
- os.environ['TZ'] = 'FOO-3:3'
- WVPASSEQ(utc_offset_str(0), '+0303')
+ set_tz(b'FOO+0:00')
+ WVPASSEQ(utc_offset_str(0), b'+0000')
+ set_tz(b'FOO+1:00')
+ WVPASSEQ(utc_offset_str(0), b'-0100')
+ set_tz(b'FOO-1:00')
+ WVPASSEQ(utc_offset_str(0), b'+0100')
+ set_tz(b'FOO+3:3')
+ WVPASSEQ(utc_offset_str(0), b'-0303')
+ set_tz(b'FOO-3:3')
+ WVPASSEQ(utc_offset_str(0), b'+0303')
# Offset is not an integer number of minutes
- os.environ['TZ'] = 'FOO+3:3:3'
- WVPASSEQ(utc_offset_str(1), '-0303')
- os.environ['TZ'] = 'FOO-3:3:3'
- WVPASSEQ(utc_offset_str(1), '+0303')
- WVPASSEQ(utc_offset_str(314159), '+0303')
+ set_tz(b'FOO+3:3:3')
+ WVPASSEQ(utc_offset_str(1), b'-0303')
+ set_tz(b'FOO-3:3:3')
+ WVPASSEQ(utc_offset_str(1), b'+0303')
+ WVPASSEQ(utc_offset_str(314159), b'+0303')
finally:
if tz:
- os.environ['TZ'] = tz
+ set_tz(tz)
else:
try:
- del os.environ['TZ']
+ set_tz(None)
except KeyError:
pass
+
+@wvtest
+def test_valid_save_name():
+ with no_lingering_errors():
+ valid = helpers.valid_save_name
+ WVPASS(valid('x'))
+ WVPASS(valid('x@'))
+ WVFAIL(valid('@'))
+ WVFAIL(valid('/'))
+ WVFAIL(valid('/foo'))
+ WVFAIL(valid('foo/'))
+ WVFAIL(valid('/foo/'))
+ WVFAIL(valid('foo//bar'))
+ WVFAIL(valid('.'))
+ WVFAIL(valid('bar.'))
+ WVFAIL(valid('foo@{'))
+ for x in ' ~^:?*[\\':
+ WVFAIL(valid('foo' + x))
+ for i in range(20):
+ WVFAIL(valid('foo' + chr(i)))
+ WVFAIL(valid('foo' + chr(0x7f)))
+ WVFAIL(valid('foo..bar'))
+ WVFAIL(valid('bar.lock/baz'))
+ WVFAIL(valid('foo/bar.lock/baz'))
+ WVFAIL(valid('.bar/baz'))
+ WVFAIL(valid('foo/.bar/baz'))