test-largefiles-wireproto.t
351 lines
| 11.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-largefiles-wireproto.t
Mads Kiilerich
|
r23139 | This file contains testcases that tend to be related to the wire protocol part | ||
of largefiles. | ||||
Pierre-Yves David
|
r21424 | |||
$ USERCACHE="$TESTTMP/cache"; export USERCACHE | ||||
$ mkdir "${USERCACHE}" | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> largefiles= | ||||
> purge= | ||||
> rebase= | ||||
> transplant= | ||||
> [phases] | ||||
> publish=False | ||||
> [largefiles] | ||||
> minsize=2 | ||||
> patterns=glob:**.dat | ||||
> usercache=${USERCACHE} | ||||
Matt Harbison
|
r26417 | > [web] | ||
> allow_archive = zip | ||||
Pierre-Yves David
|
r21424 | > [hooks] | ||
> precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status" | ||||
> EOF | ||||
#if serve | ||||
vanilla clients not locked out from largefiles servers on vanilla repos | ||||
$ mkdir r1 | ||||
$ cd r1 | ||||
$ hg init | ||||
$ echo c1 > f1 | ||||
$ hg add f1 | ||||
$ hg commit -m "m1" | ||||
Invoking status precommit hook | ||||
A f1 | ||||
$ cd .. | ||||
$ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
$ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2 | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
updating to branch default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
largefiles clients still work with vanilla servers | ||||
Jun Wu
|
r28549 | $ hg serve --config extensions.largefiles=! -R r1 -d -p $HGPORT1 --pid-file hg.pid | ||
Pierre-Yves David
|
r21424 | $ cat hg.pid >> $DAEMON_PIDS | ||
$ hg clone http://localhost:$HGPORT1 r3 | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
updating to branch default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
#endif | ||||
vanilla clients locked out from largefiles http repos | ||||
$ mkdir r4 | ||||
$ cd r4 | ||||
$ hg init | ||||
$ echo c1 > f1 | ||||
$ hg add --large f1 | ||||
$ hg commit -m "m1" | ||||
Invoking status precommit hook | ||||
A f1 | ||||
$ cd .. | ||||
largefiles can be pushed locally (issue3583) | ||||
$ hg init dest | ||||
$ cd r4 | ||||
$ hg outgoing ../dest | ||||
comparing with ../dest | ||||
searching for changes | ||||
changeset: 0:639881c12b4c | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: m1 | ||||
$ hg push ../dest | ||||
pushing to ../dest | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
exit code with nothing outgoing (issue3611) | ||||
$ hg outgoing ../dest | ||||
comparing with ../dest | ||||
searching for changes | ||||
no changes found | ||||
[1] | ||||
$ cd .. | ||||
#if serve | ||||
$ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
$ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5 | ||||
abort: remote error: | ||||
This repository uses the largefiles extension. | ||||
Please enable it in your Mercurial config file. | ||||
[255] | ||||
used all HGPORTs, kill all daemons | ||||
Matt Mackall
|
r25474 | $ killdaemons.py | ||
Pierre-Yves David
|
r21424 | #endif | ||
vanilla clients locked out from largefiles ssh repos | ||||
Matt Harbison
|
r25495 | $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5 | ||
Pierre-Yves David
|
r25243 | remote: | ||
remote: This repository uses the largefiles extension. | ||||
remote: | ||||
remote: Please enable it in your Mercurial config file. | ||||
remote: | ||||
remote: - | ||||
abort: remote error | ||||
(check previous remote output) | ||||
Pierre-Yves David
|
r21424 | [255] | ||
#if serve | ||||
largefiles clients refuse to push largefiles repos to vanilla servers | ||||
$ mkdir r6 | ||||
$ cd r6 | ||||
$ hg init | ||||
$ echo c1 > f1 | ||||
$ hg add f1 | ||||
$ hg commit -m "m1" | ||||
Invoking status precommit hook | ||||
A f1 | ||||
$ cat >> .hg/hgrc <<! | ||||
> [web] | ||||
> push_ssl = false | ||||
> allow_push = * | ||||
> ! | ||||
$ cd .. | ||||
$ hg clone r6 r7 | ||||
updating to branch default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd r7 | ||||
$ echo c2 > f2 | ||||
$ hg add --large f2 | ||||
$ hg commit -m "m2" | ||||
Invoking status precommit hook | ||||
A f2 | ||||
Jun Wu
|
r28549 | $ hg serve --config extensions.largefiles=! -R ../r6 -d -p $HGPORT --pid-file ../hg.pid | ||
Pierre-Yves David
|
r21424 | $ cat ../hg.pid >> $DAEMON_PIDS | ||
$ hg push http://localhost:$HGPORT | ||||
pushing to http://localhost:$HGPORT/ | ||||
searching for changes | ||||
abort: http://localhost:$HGPORT/ does not appear to be a largefile store | ||||
[255] | ||||
$ cd .. | ||||
putlfile errors are shown (issue3123) | ||||
Corrupt the cached largefile in r7 and move it out of the servers usercache | ||||
$ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 . | ||||
$ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 | ||||
$ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8" | ||||
$ hg init empty | ||||
$ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \ | ||||
> --config 'web.allow_push=*' --config web.push_ssl=False | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
$ hg push -R r7 http://localhost:$HGPORT1 | ||||
pushing to http://localhost:$HGPORT1/ | ||||
searching for changes | ||||
remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash | ||||
abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob) | ||||
[255] | ||||
$ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 | ||||
Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic | ||||
$ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 | ||||
$ hg push -R r7 http://localhost:$HGPORT1 | ||||
pushing to http://localhost:$HGPORT1/ | ||||
searching for changes | ||||
remote: adding changesets | ||||
remote: adding manifests | ||||
remote: adding file changes | ||||
remote: added 2 changesets with 2 changes to 2 files | ||||
$ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 | ||||
server side corruption | ||||
$ rm -rf empty | ||||
Push a largefiles repository to a served empty repository | ||||
$ hg init r8 | ||||
$ echo c3 > r8/f1 | ||||
$ hg add --large r8/f1 -R r8 | ||||
$ hg commit -m "m1" -R r8 | ||||
Invoking status precommit hook | ||||
A f1 | ||||
$ hg init empty | ||||
$ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \ | ||||
> --config 'web.allow_push=*' --config web.push_ssl=False | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
$ rm "${USERCACHE}"/* | ||||
$ hg push -R r8 http://localhost:$HGPORT2/#default | ||||
pushing to http://localhost:$HGPORT2/ | ||||
searching for changes | ||||
remote: adding changesets | ||||
remote: adding manifests | ||||
remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | ||||
$ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ] | ||||
$ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ] | ||||
Clone over http, no largefiles pulled on clone. | ||||
$ hg clone http://localhost:$HGPORT2/#default http-clone -U | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
Matt Harbison
|
r26417 | Archive contains largefiles | ||
>>> import urllib2, os | ||||
>>> u = 'http://localhost:%s/archive/default.zip' % os.environ['HGPORT2'] | ||||
>>> with open('archive.zip', 'w') as f: | ||||
... f.write(urllib2.urlopen(u).read()) | ||||
$ unzip -t archive.zip | ||||
Archive: archive.zip | ||||
testing: empty-default/.hg_archival.txt OK | ||||
testing: empty-default/f1 OK | ||||
No errors detected in compressed data of archive.zip. | ||||
Pierre-Yves David
|
r21424 | test 'verify' with remotestore: | ||
$ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 | ||||
$ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 . | ||||
$ hg -R http-clone verify --large --lfa | ||||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
1 files, 1 changesets, 1 total revisions | ||||
searching 1 changesets for largefiles | ||||
changeset 0:cf03e5bb9936: f1 missing | ||||
verified existence of 1 revisions of 1 largefiles | ||||
[1] | ||||
$ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/ | ||||
$ hg -R http-clone -q verify --large --lfa | ||||
largefiles pulled on update - a largefile missing on the server: | ||||
$ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 . | ||||
$ hg -R http-clone up --config largefiles.usercache=http-clone-usercache | ||||
getting changed largefiles | ||||
f1: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 not available from http://localhost:$HGPORT2/ | ||||
0 largefiles updated, 0 removed | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R http-clone st | ||||
! f1 | ||||
$ hg -R http-clone up -Cqr null | ||||
largefiles pulled on update - a largefile corrupted on the server: | ||||
$ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 | ||||
$ hg -R http-clone up --config largefiles.usercache=http-clone-usercache | ||||
getting changed largefiles | ||||
f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27) | ||||
0 largefiles updated, 0 removed | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R http-clone st | ||||
! f1 | ||||
$ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ] | ||||
$ [ ! -f http-clone/f1 ] | ||||
$ [ ! -f http-clone-usercache ] | ||||
$ hg -R http-clone verify --large --lfc | ||||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
1 files, 1 changesets, 1 total revisions | ||||
searching 1 changesets for largefiles | ||||
verified contents of 1 revisions of 1 largefiles | ||||
$ hg -R http-clone up -Cqr null | ||||
largefiles pulled on update - no server side problems: | ||||
$ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/ | ||||
Pierre-Yves David
|
r25125 | $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache --config progress.debug=true | ||
Pierre-Yves David
|
r21424 | resolving manifests | ||
branchmerge: False, force: False, partial: False | ||||
ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936 | ||||
.hglf/f1: remote created -> g | ||||
getting .hglf/f1 | ||||
updating: .hglf/f1 1/1 files (100.00%) | ||||
getting changed largefiles | ||||
using http://localhost:$HGPORT2/ | ||||
sending capabilities command | ||||
sending batch command | ||||
r28463 | getting largefiles: 0/1 files (0.00%) | |||
Pierre-Yves David
|
r21424 | getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90 | ||
sending getlfile command | ||||
found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store | ||||
1 largefiles updated, 0 removed | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ ls http-clone-usercache/* | ||||
http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90 | ||||
$ rm -rf empty http-clone* | ||||
used all HGPORTs, kill all daemons | ||||
Matt Mackall
|
r25474 | $ killdaemons.py | ||
Pierre-Yves David
|
r21424 | |||
liscju
|
r29068 | largefiles should batch verify remote calls | ||
$ hg init batchverifymain | ||||
$ cd batchverifymain | ||||
$ echo "aaa" >> a | ||||
$ hg add --large a | ||||
$ hg commit -m "a" | ||||
Invoking status precommit hook | ||||
A a | ||||
$ echo "bbb" >> b | ||||
$ hg add --large b | ||||
$ hg commit -m "b" | ||||
Invoking status precommit hook | ||||
A b | ||||
$ cd .. | ||||
$ hg serve -R batchverifymain -d -p $HGPORT --pid-file hg.pid \ | ||||
> -A access.log | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
$ hg clone http://localhost:$HGPORT batchverifyclone | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files | ||||
updating to branch default | ||||
getting changed largefiles | ||||
2 largefiles updated, 0 removed | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R batchverifyclone verify --large | ||||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
2 files, 2 changesets, 2 total revisions | ||||
searching 1 changesets for largefiles | ||||
verified existence of 2 revisions of 2 largefiles | ||||
$ tail -1 access.log | ||||
127.0.0.1 - - [*] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=statlfile+sha%3D972a1a11f19934401291cc99117ec614933374ce%3Bstatlfile+sha%3Dc801c9cfe94400963fcb683246217d5db77f9a9a (glob) | ||||
$ rm access.log | ||||
$ killdaemons.py | ||||
Pierre-Yves David
|
r21424 | #endif | ||