]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/t/tclient.py
Merge remote branch 'origin/master' into meta
[bup.git] / lib / bup / t / tclient.py
index 280937112c8a07feaa08e60cf0fd334a2ea24a59..68f4fb3948968a8f90967618d6cf7ff44a90ddae 100644 (file)
@@ -1,4 +1,4 @@
-import sys, os, time, random, subprocess
+import sys, os, stat, time, random, subprocess, glob
 from bup import client, git
 from wvtest import *
 
@@ -10,6 +10,9 @@ def randbytes(sz):
 
 s1 = randbytes(10000)
 s2 = randbytes(10000)
+s3 = randbytes(10000)
+
+IDX_PAT = '/*.idx'
     
 @wvtest
 def test_server_split_with_indexes():
@@ -29,6 +32,56 @@ def test_server_split_with_indexes():
     rw.new_blob(s1)
     
 
+@wvtest
+def test_multiple_suggestions():
+    os.environ['BUP_MAIN_EXE'] = '../../../bup'
+    os.environ['BUP_DIR'] = bupdir = 'buptest_tclient.tmp'
+    subprocess.call(['rm', '-rf', bupdir])
+    git.init_repo(bupdir)
+
+    lw = git.PackWriter()
+    lw.new_blob(s1)
+    lw.close()
+    lw = git.PackWriter()
+    lw.new_blob(s2)
+    lw.close()
+    WVPASSEQ(len(glob.glob(git.repo('objects/pack'+IDX_PAT))), 2)
+
+    c = client.Client(bupdir, create=True)
+    WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 0)
+    rw = c.new_packwriter()
+    rw.new_blob(s1)
+    rw.new_blob(s2)
+    # This is a little hacky, but ensures that we test the code under test
+    while len(glob.glob(c.cachedir+IDX_PAT)) < 2 and not c.conn.has_input(): pass
+    rw.new_blob(s3)
+    WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 2)
+    rw.close()
+    WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 3)
+
+
+@wvtest
+def test_dumb_client_server():
+    os.environ['BUP_MAIN_EXE'] = '../../../bup'
+    os.environ['BUP_DIR'] = bupdir = 'buptest_tclient.tmp'
+    subprocess.call(['rm', '-rf', bupdir])
+    git.init_repo(bupdir)
+    open(git.repo('bup-dumb-server'), 'w').close()
+
+    lw = git.PackWriter()
+    lw.new_blob(s1)
+    lw.close()
+
+    c = client.Client(bupdir, create=True)
+    rw = c.new_packwriter()
+    WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 1)
+    rw.new_blob(s1)
+    WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 1)
+    rw.new_blob(s2)
+    rw.close()
+    WVPASSEQ(len(glob.glob(c.cachedir+IDX_PAT)), 2)
+
+
 @wvtest
 def test_midx_refreshing():
     os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
@@ -51,3 +104,23 @@ def test_midx_refreshing():
     WVPASSEQ(len(pi.packs), 2)
     pi.refresh(skip_midx=False)
     WVPASSEQ(len(pi.packs), 1)
+
+@wvtest
+def test_remote_parsing():
+    tests = (
+        (':/bup', ('file', None, None, '/bup')),
+        ('file:///bup', ('file', None, None, '/bup')),
+        ('192.168.1.1:/bup', ('ssh', '192.168.1.1', None, '/bup')),
+        ('ssh://192.168.1.1:2222/bup', ('ssh', '192.168.1.1', '2222', '/bup')),
+        ('ssh://[ff:fe::1]:2222/bup', ('ssh', 'ff:fe::1', '2222', '/bup')),
+        ('bup://foo.com:1950', ('bup', 'foo.com', '1950', None)),
+        ('bup://foo.com:1950/bup', ('bup', 'foo.com', '1950', '/bup')),
+        ('bup://[ff:fe::1]/bup', ('bup', 'ff:fe::1', None, '/bup')),
+    )
+    for remote, values in tests:
+        WVPASSEQ(client.parse_remote(remote), values)
+    try:
+        client.parse_remote('http://asdf.com/bup')
+        WVFAIL()
+    except AssertionError:
+        WVPASS()