]> arthur.barton.de Git - bup.git/blob - lib/bup/t/tclient.py
Merge remote branch 'origin/master' into meta
[bup.git] / lib / bup / t / tclient.py
1 import sys, os, stat, time, random, subprocess, glob
2 from bup import client, git
3 from wvtest import *
4
5 def randbytes(sz):
6     s = ''
7     for i in xrange(sz):
8         s += chr(random.randrange(0,256))
9     return s
10
11 s1 = randbytes(10000)
12 s2 = randbytes(10000)
13 s3 = randbytes(10000)
14
15 IDX_PAT = '/*.idx'
16     
17 @wvtest
18 def test_server_split_with_indexes():
19     os.environ['BUP_MAIN_EXE'] = '../../../bup'
20     os.environ['BUP_DIR'] = bupdir = 'buptest_tclient.tmp'
21     subprocess.call(['rm', '-rf', bupdir])
22     git.init_repo(bupdir)
23     lw = git.PackWriter()
24     c = client.Client(bupdir, create=True)
25     rw = c.new_packwriter()
26
27     lw.new_blob(s1)
28     lw.close()
29
30     rw.new_blob(s2)
31     rw.breakpoint()
32     rw.new_blob(s1)
33     
34
35 @wvtest
36 def test_multiple_suggestions():
37     os.environ['BUP_MAIN_EXE'] = '../../../bup'
38     os.environ['BUP_DIR'] = bupdir = 'buptest_tclient.tmp'
39     subprocess.call(['rm', '-rf', bupdir])
40     git.init_repo(bupdir)
41
42     lw = git.PackWriter()
43     lw.new_blob(s1)
44     lw.close()
45     lw = git.PackWriter()
46     lw.new_blob(s2)
47     lw.close()
48     WVPASSEQ(len(glob.glob(git.repo('objects/pack'+IDX_PAT))), 2)
49
50     c = client.Client(bupdir, create=True)
51     WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 0)
52     rw = c.new_packwriter()
53     rw.new_blob(s1)
54     rw.new_blob(s2)
55     # This is a little hacky, but ensures that we test the code under test
56     while len(glob.glob(c.cachedir+IDX_PAT)) < 2 and not c.conn.has_input(): pass
57     rw.new_blob(s3)
58     WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 2)
59     rw.close()
60     WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 3)
61
62
63 @wvtest
64 def test_dumb_client_server():
65     os.environ['BUP_MAIN_EXE'] = '../../../bup'
66     os.environ['BUP_DIR'] = bupdir = 'buptest_tclient.tmp'
67     subprocess.call(['rm', '-rf', bupdir])
68     git.init_repo(bupdir)
69     open(git.repo('bup-dumb-server'), 'w').close()
70
71     lw = git.PackWriter()
72     lw.new_blob(s1)
73     lw.close()
74
75     c = client.Client(bupdir, create=True)
76     rw = c.new_packwriter()
77     WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 1)
78     rw.new_blob(s1)
79     WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 1)
80     rw.new_blob(s2)
81     rw.close()
82     WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 2)
83
84
85 @wvtest
86 def test_midx_refreshing():
87     os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
88     os.environ['BUP_DIR'] = bupdir = 'buptest_tmidx.tmp'
89     subprocess.call(['rm', '-rf', bupdir])
90     git.init_repo(bupdir)
91     lw = git.PackWriter()
92     lw.new_blob(s1)
93     lw.breakpoint()
94     lw.new_blob(s2)
95     del lw
96     pi = git.PackIdxList(bupdir + '/objects/pack')
97     WVPASSEQ(len(pi.packs), 2)
98     pi.refresh()
99     WVPASSEQ(len(pi.packs), 2)
100     subprocess.call([bupmain, 'midx', '-f'])
101     pi.refresh()
102     WVPASSEQ(len(pi.packs), 1)
103     pi.refresh(skip_midx=True)
104     WVPASSEQ(len(pi.packs), 2)
105     pi.refresh(skip_midx=False)
106     WVPASSEQ(len(pi.packs), 1)
107
108 @wvtest
109 def test_remote_parsing():
110     tests = (
111         (':/bup', ('file', None, None, '/bup')),
112         ('file:///bup', ('file', None, None, '/bup')),
113         ('192.168.1.1:/bup', ('ssh', '192.168.1.1', None, '/bup')),
114         ('ssh://192.168.1.1:2222/bup', ('ssh', '192.168.1.1', '2222', '/bup')),
115         ('ssh://[ff:fe::1]:2222/bup', ('ssh', 'ff:fe::1', '2222', '/bup')),
116         ('bup://foo.com:1950', ('bup', 'foo.com', '1950', None)),
117         ('bup://foo.com:1950/bup', ('bup', 'foo.com', '1950', '/bup')),
118         ('bup://[ff:fe::1]/bup', ('bup', 'ff:fe::1', None, '/bup')),
119     )
120     for remote, values in tests:
121         WVPASSEQ(client.parse_remote(remote), values)
122     try:
123         client.parse_remote('http://asdf.com/bup')
124         WVFAIL()
125     except AssertionError:
126         WVPASS()