[PATCH 2 of 2 remotefilelog-ext] test-cacheprocess: add a new test that demonstrates talking to a cacheprocess
Augie Fackler
raf at durin42.com
Tue Feb 2 22:08:01 UTC 2016
# HG changeset patch
# User Augie Fackler <augie at google.com>
# Date 1454449592 18000
# Tue Feb 02 16:46:32 2016 -0500
# Node ID af753c16b877aea3ba75fe048f492d4113e38677
# Parent a6231d9cb30b01707e6a965fe4f357f7be397c0b
test-cacheprocess: add a new test that demonstrates talking to a cacheprocess
Right now this only demonstrates reading from the cache. Writing is
not currently implemented. This tests both the cache-hit and
cache-miss case for both of including the file path and not in the
cache request.
diff --git a/tests/test-cacheprocess.t b/tests/test-cacheprocess.t
new file mode 100644
--- /dev/null
+++ b/tests/test-cacheprocess.t
@@ -0,0 +1,120 @@
+ $ . "$TESTDIR/library.sh"
+
+ $ hg init repo
+ $ cd repo
+ $ cat >> .hg/hgrc <<EOF
+ > [remotefilelog]
+ > server=True
+ > EOF
+ $ echo x > x
+ $ echo y > y
+ $ echo z > z
+ $ hg commit -qAm xy
+ $ cd ..
+
+ $ cat > cacheprocess-logger.py <<EOF
+ > import sys, os, shutil
+ > f = open('$TESTTMP/cachelog.log', 'w')
+ > srccache = os.path.join('$TESTTMP', 'oldhgcache')
+ > log = f.write
+ > destcache = sys.argv[-1]
+ > try:
+ > while True:
+ > cmd = sys.stdin.readline().strip()
+ > log('got command %r\n' % cmd)
+ > if cmd == 'exit':
+ > sys.exit(0)
+ > elif cmd == 'get':
+ > count = int(sys.stdin.readline())
+ > log('client wants %r blobs\n' % count)
+ > wants = []
+ > for _ in xrange(count):
+ > key = sys.stdin.readline()[:-1]
+ > wants.append(key)
+ > if '\0' in key:
+ > _, key = key.split('\0')
+ > srcpath = os.path.join(srccache, key)
+ > if os.path.exists(srcpath):
+ > dest = os.path.join(destcache, key)
+ > destdir = os.path.dirname(dest)
+ > if not os.path.exists(destdir):
+ > os.makedirs(destdir)
+ > shutil.copyfile(srcpath, dest)
+ > else:
+ > # report a cache miss
+ > sys.stdout.write(key + '\n')
+ > sys.stdout.write('0\n')
+ > for key in sorted(wants):
+ > log('requested %r\n' % key)
+ > sys.stdout.flush()
+ > elif cmd == 'set':
+ > assert False, 'todo writing'
+ > else:
+ > assert False, 'unknown command! %r' % cmd
+ > except Exception as e:
+ > log('Exception! %r\n' % e)
+ > raise
+ > EOF
+
+ $ cat >> $HGRCPATH <<EOF
+ > [remotefilelog]
+ > cacheprocess = python $TESTTMP/cacheprocess-logger.py
+ > EOF
+
+Test cache keys and cache misses.
+ $ hgcloneshallow ssh://user@dummy/repo clone -q
+ 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over *s (glob)
+ $ cat cachelog.log
+ got command 'get'
+ client wants 3 blobs
+ requested 'master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0'
+ requested 'master/39/5df8f7c51f007019cb30201c49e884b46b92fa/69a1b67522704ec122181c0890bd16e9d3e7516a'
+ requested 'master/95/cb0bfd2977c761298d9624e4b4d4c72a39974a/076f5e2225b3ff0400b98c92aa6cdf403ee24cca'
+ got command 'set'
+ Exception! AssertionError('todo writing',)
+
+ $ cat >> $HGRCPATH <<EOF
+ > [remotefilelog]
+ > cacheprocess.includepath = yes
+ > EOF
+
+
+Test cache hits.
+ $ mv hgcache oldhgcache
+ $ rm cachelog.log
+ $ hgcloneshallow ssh://user@dummy/repo clone-cachehit -q
+ 3 files fetched over 1 fetches - (0 misses, 100.00% hit ratio) over *s (glob)
+ $ cat cachelog.log
+ got command 'get'
+ client wants 3 blobs
+ requested 'x\x00master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0'
+ requested 'y\x00master/95/cb0bfd2977c761298d9624e4b4d4c72a39974a/076f5e2225b3ff0400b98c92aa6cdf403ee24cca'
+ requested 'z\x00master/39/5df8f7c51f007019cb30201c49e884b46b92fa/69a1b67522704ec122181c0890bd16e9d3e7516a'
+ got command 'exit'
+
+Test cache keys and cache misses with includepath.
+ $ rm -r hgcache oldhgcache
+ $ rm cachelog.log
+ $ hgcloneshallow ssh://user@dummy/repo clone-withpath -q
+ 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over *s (glob)
+ $ cat cachelog.log
+ got command 'get'
+ client wants 3 blobs
+ requested 'x\x00master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0'
+ requested 'y\x00master/95/cb0bfd2977c761298d9624e4b4d4c72a39974a/076f5e2225b3ff0400b98c92aa6cdf403ee24cca'
+ requested 'z\x00master/39/5df8f7c51f007019cb30201c49e884b46b92fa/69a1b67522704ec122181c0890bd16e9d3e7516a'
+ got command 'set'
+ Exception! AssertionError('todo writing',)
+
+Test cache hits with includepath.
+ $ mv hgcache oldhgcache
+ $ rm cachelog.log
+ $ hgcloneshallow ssh://user@dummy/repo clone-withpath-cachehit -q
+ 3 files fetched over 1 fetches - (0 misses, 100.00% hit ratio) over *s (glob)
+ $ cat cachelog.log
+ got command 'get'
+ client wants 3 blobs
+ requested 'x\x00master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0'
+ requested 'y\x00master/95/cb0bfd2977c761298d9624e4b4d4c72a39974a/076f5e2225b3ff0400b98c92aa6cdf403ee24cca'
+ requested 'z\x00master/39/5df8f7c51f007019cb30201c49e884b46b92fa/69a1b67522704ec122181c0890bd16e9d3e7516a'
+ got command 'exit'
More information about the Mercurial-devel
mailing list