1 import sys, os, stat, time, random, subprocess, glob, tempfile
2 from bup import client, git
3 from bup.helpers import mkdirp
6 bup_tmp = os.path.realpath('../../../t/tmp')
12 s += chr(random.randrange(0,256))
22 def test_server_split_with_indexes():
23 initial_failures = wvfailure_count()
24 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tclient-')
25 os.environ['BUP_MAIN_EXE'] = '../../../bup'
26 os.environ['BUP_DIR'] = bupdir = tmpdir
29 c = client.Client(bupdir, create=True)
30 rw = c.new_packwriter()
38 if wvfailure_count() == initial_failures:
39 subprocess.call(['rm', '-rf', tmpdir])
43 def test_multiple_suggestions():
44 initial_failures = wvfailure_count()
45 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tclient-')
46 os.environ['BUP_MAIN_EXE'] = '../../../bup'
47 os.environ['BUP_DIR'] = bupdir = tmpdir
56 WVPASSEQ(len(glob.glob(git.repo('objects/pack'+IDX_PAT))), 2)
58 c = client.Client(bupdir, create=True)
59 WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 0)
60 rw = c.new_packwriter()
61 s1sha = rw.new_blob(s1)
62 WVPASS(rw.exists(s1sha))
63 s2sha = rw.new_blob(s2)
64 # This is a little hacky, but ensures that we test the code under test
65 while (len(glob.glob(c.cachedir+IDX_PAT)) < 2 and
66 not c.conn.has_input()):
69 WVPASS(rw.objcache.exists(s1sha))
70 WVPASS(rw.objcache.exists(s2sha))
72 WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 2)
74 WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 3)
75 if wvfailure_count() == initial_failures:
76 subprocess.call(['rm', '-rf', tmpdir])
80 def test_dumb_client_server():
81 initial_failures = wvfailure_count()
82 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tclient-')
83 os.environ['BUP_MAIN_EXE'] = '../../../bup'
84 os.environ['BUP_DIR'] = bupdir = tmpdir
86 open(git.repo('bup-dumb-server'), 'w').close()
92 c = client.Client(bupdir, create=True)
93 rw = c.new_packwriter()
94 WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 1)
96 WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 1)
99 WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 2)
100 if wvfailure_count() == initial_failures:
101 subprocess.call(['rm', '-rf', tmpdir])
105 def test_midx_refreshing():
106 initial_failures = wvfailure_count()
107 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tclient-')
108 os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
109 os.environ['BUP_DIR'] = bupdir = tmpdir
110 git.init_repo(bupdir)
111 c = client.Client(bupdir, create=True)
112 rw = c.new_packwriter()
114 p1base = rw.breakpoint()
115 p1name = os.path.join(c.cachedir, p1base)
116 s1sha = rw.new_blob(s1) # should not be written; it's already in p1
117 s2sha = rw.new_blob(s2)
119 p2name = os.path.join(c.cachedir, p2base)
122 pi = git.PackIdxList(bupdir + '/objects/pack')
123 WVPASSEQ(len(pi.packs), 2)
125 WVPASSEQ(len(pi.packs), 2)
126 WVPASSEQ(sorted([os.path.basename(i.name) for i in pi.packs]),
127 sorted([p1base, p2base]))
129 p1 = git.open_idx(p1name)
130 WVPASS(p1.exists(s1sha))
131 p2 = git.open_idx(p2name)
132 WVFAIL(p2.exists(s1sha))
133 WVPASS(p2.exists(s2sha))
135 subprocess.call([bupmain, 'midx', '-f'])
137 WVPASSEQ(len(pi.packs), 1)
138 pi.refresh(skip_midx=True)
139 WVPASSEQ(len(pi.packs), 2)
140 pi.refresh(skip_midx=False)
141 WVPASSEQ(len(pi.packs), 1)
142 if wvfailure_count() == initial_failures:
143 subprocess.call(['rm', '-rf', tmpdir])
147 def test_remote_parsing():
149 (':/bup', ('file', None, None, '/bup')),
150 ('file:///bup', ('file', None, None, '/bup')),
151 ('192.168.1.1:/bup', ('ssh', '192.168.1.1', None, '/bup')),
152 ('ssh://192.168.1.1:2222/bup', ('ssh', '192.168.1.1', '2222', '/bup')),
153 ('ssh://[ff:fe::1]:2222/bup', ('ssh', 'ff:fe::1', '2222', '/bup')),
154 ('bup://foo.com:1950', ('bup', 'foo.com', '1950', None)),
155 ('bup://foo.com:1950/bup', ('bup', 'foo.com', '1950', '/bup')),
156 ('bup://[ff:fe::1]/bup', ('bup', 'ff:fe::1', None, '/bup')),
158 for remote, values in tests:
159 WVPASSEQ(client.parse_remote(remote), values)
161 client.parse_remote('http://asdf.com/bup')
163 except client.ClientError: