# HG changeset patch # User Martin Geisler # Date 1281745330 -7200 # Node ID afe19a1bf9d3ab502c2b965dd8800ea51c976efb # Parent b2f91119bf8c3d43b0d1734510a1b8bb3935f71a tests: unify test-archive diff -r b2f91119bf8c -r afe19a1bf9d3 tests/test-archive --- a/tests/test-archive Sat Aug 14 02:18:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -#!/bin/sh - -mkdir test -cd test -hg init -echo foo>foo -hg commit -Am 1 -d '1 0' -echo bar>bar -hg commit -Am 2 -d '2 0' -mkdir baz -echo bletch>baz/bletch -hg commit -Am 3 -d '1000000000 0' -echo "[web]" >> .hg/hgrc -echo "name = test-archive" >> .hg/hgrc -cp .hg/hgrc .hg/hgrc-base - -# check http return codes -test_archtype() { - echo "allow_archive = $1" >> .hg/hgrc - hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log - cat hg.pid >> $DAEMON_PIDS - echo % $1 allowed should give 200 - "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$2" | head -n 1 - echo % $3 and $4 disallowed should both give 403 - "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$3" | head -n 1 - "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$4" | head -n 1 - "$TESTDIR/killdaemons.py" - cat errors.log - cp .hg/hgrc-base .hg/hgrc -} - -echo -test_archtype gz tar.gz tar.bz2 zip -test_archtype bz2 tar.bz2 zip tar.gz -test_archtype zip zip tar.gz tar.bz2 - -echo "allow_archive = gz bz2 zip" >> .hg/hgrc -hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log -cat hg.pid >> $DAEMON_PIDS - -echo % invalid arch type should give 404 -"$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.invalid" | head -n 1 -echo - -TIP=`hg id -v | cut -f1 -d' '` -QTIP=`hg id -q` -cat > getarchive.py </dev/null | sed "s/$QTIP/TIP/" -python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/" -python getarchive.py "$TIP" zip > archive.zip -unzip -t archive.zip | sed "s/$QTIP/TIP/" - -"$TESTDIR/killdaemons.py" - -hg archive -t tar test.tar -tar tf test.tar - -hg archive -t tbz2 -X baz test.tar.bz2 -bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null - -hg archive -t tgz -p %b-%h test-%h.tar.gz -gzip -dc test-$QTIP.tar.gz | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/" - -hg archive autodetected_test.tar -tar tf autodetected_test.tar - -# The '-t' should override autodetection -hg archive -t tar autodetect_override_test.zip -tar tf autodetect_override_test.zip - -for ext in tar tar.gz tgz tar.bz2 tbz2 zip; do - hg archive auto_test.$ext - if [ -d auto_test.$ext ]; then - echo "extension $ext was not autodetected." - fi -done - -cat > md5comp.py </dev/null | sed "s/$QTIP/TIP/" - -hg archive -r 0 -t tar rev-%r.tar -if [ -f rev-0.tar ]; then - echo 'rev-0.tar created' -fi - -echo '% test .hg_archival.txt' -hg archive ../test-tags -cat ../test-tags/.hg_archival.txt -hg tag -r 2 mytag -hg tag -r 2 anothertag -hg archive -r 2 ../test-lasttag -cat ../test-lasttag/.hg_archival.txt - -hg archive -t bogus test.bogus - -echo % server errors -cat errors.log - -echo '% empty repo' -hg init ../empty -cd ../empty -hg archive ../test-empty - -exit 0 diff -r b2f91119bf8c -r afe19a1bf9d3 tests/test-archive.out --- a/tests/test-archive.out Sat Aug 14 02:18:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -adding foo -adding bar -adding baz/bletch - -% gz allowed should give 200 -200 Script output follows -% tar.bz2 and zip disallowed should both give 403 -403 Archive type not allowed: bz2 -403 Archive type not allowed: zip -% bz2 allowed should give 200 -200 Script output follows -% zip and tar.gz disallowed should both give 403 -403 Archive type not allowed: zip -403 Archive type not allowed: gz -% zip allowed should give 200 -200 Script output follows -% tar.gz and tar.bz2 disallowed should both give 403 -403 Archive type not allowed: gz -403 Archive type not allowed: bz2 -% invalid arch type should give 404 -404 Unsupported archive type: None - -test-archive-TIP/.hg_archival.txt -test-archive-TIP/bar -test-archive-TIP/baz/bletch -test-archive-TIP/foo -test-archive-TIP/.hg_archival.txt -test-archive-TIP/bar -test-archive-TIP/baz/bletch -test-archive-TIP/foo -Archive: archive.zip - testing: test-archive-TIP/.hg_archival.txt OK - testing: test-archive-TIP/bar OK - testing: test-archive-TIP/baz/bletch OK - testing: test-archive-TIP/foo OK -No errors detected in compressed data of archive.zip. -test/.hg_archival.txt -test/bar -test/baz/bletch -test/foo -test/.hg_archival.txt -test/bar -test/foo -test-TIP/.hg_archival.txt -test-TIP/bar -test-TIP/baz/bletch -test-TIP/foo -autodetected_test/.hg_archival.txt -autodetected_test/bar -autodetected_test/baz/bletch -autodetected_test/foo -autodetect_override_test.zip/.hg_archival.txt -autodetect_override_test.zip/bar -autodetect_override_test.zip/baz/bletch -autodetect_override_test.zip/foo -True -abort: archive prefix contains illegal components -Archive: test.zip - testing: test/bar OK - testing: test/baz/bletch OK - testing: test/foo OK -No errors detected in compressed data of test.zip. -test-TIP/.hg_archival.txt -test-TIP/bar -test-TIP/baz/bletch -test-TIP/foo -rev-0.tar created -% test .hg_archival.txt -repo: daa7f7c60e0a224faa4ff77ca41b2760562af264 -node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e -branch: default -latesttag: null -latesttagdistance: 3 -repo: daa7f7c60e0a224faa4ff77ca41b2760562af264 -node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e -branch: default -tag: anothertag -tag: mytag -abort: unknown archive type 'bogus' -% server errors -% empty repo -abort: no working directory: please specify a revision diff -r b2f91119bf8c -r afe19a1bf9d3 tests/test-archive.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-archive.t Sat Aug 14 02:22:10 2010 +0200 @@ -0,0 +1,220 @@ + $ mkdir test + $ cd test + $ hg init + $ echo foo>foo + $ hg commit -Am 1 -d '1 0' + adding foo + $ echo bar>bar + $ hg commit -Am 2 -d '2 0' + adding bar + $ mkdir baz + $ echo bletch>baz/bletch + $ hg commit -Am 3 -d '1000000000 0' + adding baz/bletch + $ echo "[web]" >> .hg/hgrc + $ echo "name = test-archive" >> .hg/hgrc + $ cp .hg/hgrc .hg/hgrc-base + > test_archtype() { + > echo "allow_archive = $1" >> .hg/hgrc + > hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log + > cat hg.pid >> $DAEMON_PIDS + > echo % $1 allowed should give 200 + > "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$2" | head -n 1 + > echo % $3 and $4 disallowed should both give 403 + > "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$3" | head -n 1 + > "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$4" | head -n 1 + > "$TESTDIR/killdaemons.py" + > cat errors.log + > cp .hg/hgrc-base .hg/hgrc + > } + +check http return codes + + + $ test_archtype gz tar.gz tar.bz2 zip + % gz allowed should give 200 + 200 Script output follows + % tar.bz2 and zip disallowed should both give 403 + 403 Archive type not allowed: bz2 + 403 Archive type not allowed: zip + $ test_archtype bz2 tar.bz2 zip tar.gz + % bz2 allowed should give 200 + 200 Script output follows + % zip and tar.gz disallowed should both give 403 + 403 Archive type not allowed: zip + 403 Archive type not allowed: gz + $ test_archtype zip zip tar.gz tar.bz2 + % zip allowed should give 200 + 200 Script output follows + % tar.gz and tar.bz2 disallowed should both give 403 + 403 Archive type not allowed: gz + 403 Archive type not allowed: bz2 + + $ echo "allow_archive = gz bz2 zip" >> .hg/hgrc + $ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log + $ cat hg.pid >> $DAEMON_PIDS + +invalid arch type should give 404 + + $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.invalid" | head -n 1 + 404 Unsupported archive type: None + + $ TIP=`hg id -v | cut -f1 -d' '` + $ QTIP=`hg id -q` + $ cat > getarchive.py < import os, sys, urllib2 + > try: + > # Set stdout to binary mode for win32 platforms + > import msvcrt + > msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + > except ImportError: + > pass + > node, archive = sys.argv[1:] + > f = urllib2.urlopen('http://127.0.0.1:%s/?cmd=archive;node=%s;type=%s' + > % (os.environ['HGPORT'], node, archive)) + > sys.stdout.write(f.read()) + > EOF + $ python getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/" + test-archive-TIP/.hg_archival.txt + test-archive-TIP/bar + test-archive-TIP/baz/bletch + test-archive-TIP/foo + $ python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/" + test-archive-TIP/.hg_archival.txt + test-archive-TIP/bar + test-archive-TIP/baz/bletch + test-archive-TIP/foo + $ python getarchive.py "$TIP" zip > archive.zip + $ unzip -t archive.zip | sed "s/$QTIP/TIP/" + Archive: archive.zip + testing: test-archive-TIP/.hg_archival.txt OK + testing: test-archive-TIP/bar OK + testing: test-archive-TIP/baz/bletch OK + testing: test-archive-TIP/foo OK + No errors detected in compressed data of archive.zip. + + $ "$TESTDIR/killdaemons.py" + + $ hg archive -t tar test.tar + $ tar tf test.tar + test/.hg_archival.txt + test/bar + test/baz/bletch + test/foo + + $ hg archive -t tbz2 -X baz test.tar.bz2 + $ bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null + test/.hg_archival.txt + test/bar + test/foo + + $ hg archive -t tgz -p %b-%h test-%h.tar.gz + $ gzip -dc test-$QTIP.tar.gz | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/" + test-TIP/.hg_archival.txt + test-TIP/bar + test-TIP/baz/bletch + test-TIP/foo + + $ hg archive autodetected_test.tar + $ tar tf autodetected_test.tar + autodetected_test/.hg_archival.txt + autodetected_test/bar + autodetected_test/baz/bletch + autodetected_test/foo + +The '-t' should override autodetection + + $ hg archive -t tar autodetect_override_test.zip + $ tar tf autodetect_override_test.zip + autodetect_override_test.zip/.hg_archival.txt + autodetect_override_test.zip/bar + autodetect_override_test.zip/baz/bletch + autodetect_override_test.zip/foo + + $ for ext in tar tar.gz tgz tar.bz2 tbz2 zip; do + > hg archive auto_test.$ext + > if [ -d auto_test.$ext ]; then + > echo "extension $ext was not autodetected." + > fi + > done + + $ cat > md5comp.py < try: + > from hashlib import md5 + > except ImportError: + > from md5 import md5 + > import sys + > f1, f2 = sys.argv[1:3] + > h1 = md5(file(f1, 'rb').read()).hexdigest() + > h2 = md5(file(f2, 'rb').read()).hexdigest() + > print h1 == h2 or "md5 differ: " + repr((h1, h2)) + > EOF + +archive name is stored in the archive, so create similar + +archives and rename them afterwards. + + $ hg archive -t tgz tip.tar.gz + $ mv tip.tar.gz tip1.tar.gz + $ sleep 1 + $ hg archive -t tgz tip.tar.gz + $ mv tip.tar.gz tip2.tar.gz + $ python md5comp.py tip1.tar.gz tip2.tar.gz + True + + $ hg archive -t zip -p /illegal test.zip + abort: archive prefix contains illegal components + $ hg archive -t zip -p very/../bad test.zip + + $ hg archive --config ui.archivemeta=false -t zip -r 2 test.zip + $ unzip -t test.zip + Archive: test.zip + testing: test/bar OK + testing: test/baz/bletch OK + testing: test/foo OK + No errors detected in compressed data of test.zip. + + $ hg archive -t tar - | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/" + test-TIP/.hg_archival.txt + test-TIP/bar + test-TIP/baz/bletch + test-TIP/foo + + $ hg archive -r 0 -t tar rev-%r.tar + $ if [ -f rev-0.tar ]; then + $ fi + +test .hg_archival.txt + + $ hg archive ../test-tags + $ cat ../test-tags/.hg_archival.txt + repo: daa7f7c60e0a224faa4ff77ca41b2760562af264 + node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e + branch: default + latesttag: null + latesttagdistance: 3 + $ hg tag -r 2 mytag + $ hg tag -r 2 anothertag + $ hg archive -r 2 ../test-lasttag + $ cat ../test-lasttag/.hg_archival.txt + repo: daa7f7c60e0a224faa4ff77ca41b2760562af264 + node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e + branch: default + tag: anothertag + tag: mytag + + $ hg archive -t bogus test.bogus + abort: unknown archive type 'bogus' + +server errors + + $ cat errors.log + +empty repo + + $ hg init ../empty + $ cd ../empty + $ hg archive ../test-empty + abort: no working directory: please specify a revision + + $ exit 0