]> arthur.barton.de Git - bup.git/blob - lib/bup/t/tmetadata.py
Don't allow negative ns in metadata timestamps; normalize on read/write.
[bup.git] / lib / bup / t / tmetadata.py
1 from bup import metadata
2 from wvtest import *
3
4
5 @wvtest
6 def test__normalize_ts():
7     normalize = metadata._normalize_ts
8     bns = 10**9
9     for ts in ((0, 0), (-1, 0), (0, bns - 1), (-1, bns - 1)):
10         WVPASSEQ(normalize(ts), ts)
11     WVPASSEQ(normalize((0, -1)), (-1, bns - 1))
12     WVPASSEQ(normalize((-1, -1)), (-2, bns - 1))
13     WVPASSEQ(normalize((0, bns)), (1, 0))
14     WVPASSEQ(normalize((0, bns + 1)), (1, 1))
15     WVPASSEQ(normalize((0, -bns)), (-1, 0))
16     WVPASSEQ(normalize((0, -(bns + 1))), (-2, bns - 1))
17     WVPASSEQ(normalize((0, 3 * bns)), (3, 0))
18     WVPASSEQ(normalize((0, -3 * bns)), (-3, 0))
19
20
21 @wvtest
22 def test_clean_up_archive_path():
23     cleanup = metadata._clean_up_path_for_archive
24     WVPASSEQ(cleanup('foo'), 'foo')
25     WVPASSEQ(cleanup('/foo'), 'foo')
26     WVPASSEQ(cleanup('///foo'), 'foo')
27     WVPASSEQ(cleanup('/foo/bar'), 'foo/bar')
28     WVPASSEQ(cleanup('foo/./bar'), 'foo/bar')
29     WVPASSEQ(cleanup('/foo/./bar'), 'foo/bar')
30     WVPASSEQ(cleanup('/foo/./bar/././baz'), 'foo/bar/baz')
31     WVPASSEQ(cleanup('/foo/./bar///././baz'), 'foo/bar/baz')
32     WVPASSEQ(cleanup('//./foo/./bar///././baz/.///'), 'foo/bar/baz/')
33     WVPASSEQ(cleanup('./foo/./.bar'), 'foo/.bar')
34     WVPASSEQ(cleanup('./foo/.'), 'foo')
35     WVPASSEQ(cleanup('./foo/..'), '.')
36     WVPASSEQ(cleanup('//./..//.../..//.'), '.')
37     WVPASSEQ(cleanup('//./..//..././/.'), '...')
38     WVPASSEQ(cleanup('/////.'), '.')
39     WVPASSEQ(cleanup('/../'), '.')
40     WVPASSEQ(cleanup(''), '.')
41
42
43 @wvtest
44 def test_risky_path():
45     risky = metadata._risky_path
46     WVPASS(risky('/foo'))
47     WVPASS(risky('///foo'))
48     WVPASS(risky('/../foo'))
49     WVPASS(risky('../foo'))
50     WVPASS(risky('foo/..'))
51     WVPASS(risky('foo/../'))
52     WVPASS(risky('foo/../bar'))
53     WVFAIL(risky('foo'))
54     WVFAIL(risky('foo/'))
55     WVFAIL(risky('foo///'))
56     WVFAIL(risky('./foo'))
57     WVFAIL(risky('foo/.'))
58     WVFAIL(risky('./foo/.'))
59     WVFAIL(risky('foo/bar'))
60     WVFAIL(risky('foo/./bar'))
61
62
63 @wvtest
64 def test_clean_up_extract_path():
65     cleanup = metadata._clean_up_extract_path
66     WVPASSEQ(cleanup('/foo'), 'foo')
67     WVPASSEQ(cleanup('///foo'), 'foo')
68     WVFAIL(cleanup('/../foo'))
69     WVFAIL(cleanup('../foo'))
70     WVFAIL(cleanup('foo/..'))
71     WVFAIL(cleanup('foo/../'))
72     WVFAIL(cleanup('foo/../bar'))
73     WVPASSEQ(cleanup('foo'), 'foo')
74     WVPASSEQ(cleanup('foo/'), 'foo/')
75     WVPASSEQ(cleanup('foo///'), 'foo///')
76     WVPASSEQ(cleanup('./foo'), './foo')
77     WVPASSEQ(cleanup('foo/.'), 'foo/.')
78     WVPASSEQ(cleanup('./foo/.'), './foo/.')
79     WVPASSEQ(cleanup('foo/bar'), 'foo/bar')
80     WVPASSEQ(cleanup('foo/./bar'), 'foo/./bar')
81     WVPASSEQ(cleanup('/'), '.')
82     WVPASSEQ(cleanup('./'), './')
83     WVPASSEQ(cleanup('///foo/bar'), 'foo/bar')
84     WVPASSEQ(cleanup('///foo/bar'), 'foo/bar')