test-lfs-serve.t
283 lines
| 9.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-lfs-serve.t
Matt Harbison
|
r35519 | #testcases lfsremote-on lfsremote-off | ||
#require serve | ||||
This test splits `hg serve` with and without using the extension into separate | ||||
tests cases. The tests are broken down as follows, where "LFS"/"No-LFS" | ||||
indicates whether or not there are commits that use an LFS file, and "D"/"E" | ||||
indicates whether or not the extension is loaded. The "X" cases are not tested | ||||
individually, because the lfs requirement causes the process to bail early if | ||||
the extension is disabled. | ||||
. Server | ||||
. | ||||
. No-LFS LFS | ||||
. +----------------------------+ | ||||
. | || D | E | D | E | | ||||
. |---++=======================| | ||||
. C | D || N/A | #1 | X | #4 | | ||||
. l No +---++-----------------------| | ||||
. i LFS | E || #2 | #2 | X | #5 | | ||||
. e +---++-----------------------| | ||||
. n | D || X | X | X | X | | ||||
. t LFS |---++-----------------------| | ||||
. | E || #3 | #3 | X | #6 | | ||||
. |---++-----------------------+ | ||||
$ hg init server | ||||
$ SERVER_REQUIRES="$TESTTMP/server/.hg/requires" | ||||
Skip the experimental.changegroup3=True config. Failure to agree on this comes | ||||
first, and causes a "ValueError: no common changegroup version" or "abort: | ||||
HTTP Error 500: Internal Server Error", if the extension is only loaded on one | ||||
side. If that *is* enabled, the subsequent failure is "abort: missing processor | ||||
for flag '0x2000'!" if the extension is only loaded on one side (possibly also | ||||
masked by the Internal Server Error message). | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [lfs] | ||||
> url=file:$TESTTMP/dummy-remote/ | ||||
> threshold=10 | ||||
> [web] | ||||
> allow_push=* | ||||
> push_ssl=False | ||||
> EOF | ||||
#if lfsremote-on | ||||
$ hg --config extensions.lfs= -R server \ | ||||
> serve -p $HGPORT -d --pid-file=hg.pid --errorlog=$TESTTMP/errors.log | ||||
#else | ||||
$ hg --config extensions.lfs=! -R server \ | ||||
> serve -p $HGPORT -d --pid-file=hg.pid --errorlog=$TESTTMP/errors.log | ||||
#endif | ||||
$ cat hg.pid >> $DAEMON_PIDS | ||||
$ hg clone -q http://localhost:$HGPORT client | ||||
$ grep 'lfs' client/.hg/requires $SERVER_REQUIRES | ||||
[1] | ||||
-------------------------------------------------------------------------------- | ||||
Case #1: client with non-lfs content and the extension disabled; server with | ||||
non-lfs content, and the extension enabled. | ||||
$ cd client | ||||
$ echo 'non-lfs' > nonlfs.txt | ||||
$ hg ci -Aqm 'non-lfs' | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
[1] | ||||
#if lfsremote-on | ||||
$ hg push -q | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
[1] | ||||
$ hg clone -q http://localhost:$HGPORT $TESTTMP/client1_clone | ||||
$ grep 'lfs' $TESTTMP/client1_clone/.hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35521 | [1] | ||
Matt Harbison
|
r35519 | |||
$ hg init $TESTTMP/client1_pull | ||||
$ hg -R $TESTTMP/client1_pull pull -q http://localhost:$HGPORT | ||||
$ grep 'lfs' $TESTTMP/client1_pull/.hg/requires $SERVER_REQUIRES | ||||
[1] | ||||
$ hg identify http://localhost:$HGPORT | ||||
d437e1d24fbd | ||||
#endif | ||||
-------------------------------------------------------------------------------- | ||||
Case #2: client with non-lfs content and the extension enabled; server with | ||||
non-lfs content, and the extension state controlled by #testcases. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> lfs = | ||||
> EOF | ||||
$ echo 'non-lfs' > nonlfs2.txt | ||||
$ hg ci -Aqm 'non-lfs file with lfs client' | ||||
Matt Harbison
|
r35521 | Since no lfs content has been added yet, the push is allowed, even when the | ||
extension is not enabled remotely. | ||||
$ hg push -q | ||||
Matt Harbison
|
r35519 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||
[1] | ||||
$ hg clone -q http://localhost:$HGPORT $TESTTMP/client2_clone | ||||
$ grep 'lfs' $TESTTMP/client2_clone/.hg/requires $SERVER_REQUIRES | ||||
[1] | ||||
$ hg init $TESTTMP/client2_pull | ||||
$ hg -R $TESTTMP/client2_pull pull -q http://localhost:$HGPORT | ||||
$ grep 'lfs' $TESTTMP/client2_pull/.hg/requires $SERVER_REQUIRES | ||||
[1] | ||||
$ hg identify http://localhost:$HGPORT | ||||
Matt Harbison
|
r35521 | 1477875038c6 | ||
Matt Harbison
|
r35519 | |||
-------------------------------------------------------------------------------- | ||||
Case #3: client with lfs content and the extension enabled; server with | ||||
Matt Harbison
|
r35520 | non-lfs content, and the extension state controlled by #testcases. The server | ||
should have an 'lfs' requirement after it picks up its first commit with a blob. | ||||
Matt Harbison
|
r35519 | |||
$ echo 'this is a big lfs file' > lfs.bin | ||||
$ hg ci -Aqm 'lfs' | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
.hg/requires:lfs | ||||
Matt Harbison
|
r35522 | #if lfsremote-off | ||
$ hg push -q | ||||
abort: required features are not supported in the destination: lfs | ||||
(enable the lfs extension on the server) | ||||
[255] | ||||
#else | ||||
$ hg push -q | ||||
#endif | ||||
Matt Harbison
|
r35519 | $ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||
.hg/requires:lfs | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs (lfsremote-on !) | ||
Matt Harbison
|
r35519 | |||
$ hg clone -q http://localhost:$HGPORT $TESTTMP/client3_clone | ||||
Matt Harbison
|
r35520 | $ grep 'lfs' $TESTTMP/client3_clone/.hg/requires $SERVER_REQUIRES || true | ||
$TESTTMP/client3_clone/.hg/requires:lfs (lfsremote-on !) | ||||
$TESTTMP/server/.hg/requires:lfs (lfsremote-on !) | ||||
Matt Harbison
|
r35519 | |||
$ hg init $TESTTMP/client3_pull | ||||
$ hg -R $TESTTMP/client3_pull pull -q http://localhost:$HGPORT | ||||
Matt Harbison
|
r35520 | $ grep 'lfs' $TESTTMP/client3_pull/.hg/requires $SERVER_REQUIRES || true | ||
$TESTTMP/client3_pull/.hg/requires:lfs (lfsremote-on !) | ||||
$TESTTMP/server/.hg/requires:lfs (lfsremote-on !) | ||||
Matt Harbison
|
r35519 | |||
Matt Harbison
|
r35521 | The difference here is the push failed above when the extension isn't | ||
enabled on the server. | ||||
Matt Harbison
|
r35519 | $ hg identify http://localhost:$HGPORT | ||
8374dc4052cb (lfsremote-on !) | ||||
Matt Harbison
|
r35521 | 1477875038c6 (lfsremote-off !) | ||
Matt Harbison
|
r35519 | |||
Don't bother testing the lfsremote-off cases- the server won't be able | ||||
to launch if there's lfs content and the extension is disabled. | ||||
#if lfsremote-on | ||||
-------------------------------------------------------------------------------- | ||||
Case #4: client with non-lfs content and the extension disabled; server with | ||||
lfs content, and the extension enabled. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> lfs = ! | ||||
> EOF | ||||
$ hg init $TESTTMP/client4 | ||||
$ cd $TESTTMP/client4 | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [paths] | ||||
> default = http://localhost:$HGPORT | ||||
> EOF | ||||
$ echo 'non-lfs' > nonlfs2.txt | ||||
$ hg ci -Aqm 'non-lfs' | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs | ||
Matt Harbison
|
r35519 | |||
$ hg push -q --force | ||||
warning: repository is unrelated | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs | ||
Matt Harbison
|
r35519 | |||
TODO: fail more gracefully. | ||||
$ hg clone -q http://localhost:$HGPORT $TESTTMP/client4_clone | ||||
abort: HTTP Error 500: Internal Server Error | ||||
[255] | ||||
$ grep 'lfs' $TESTTMP/client4_clone/.hg/requires $SERVER_REQUIRES | ||||
grep: $TESTTMP/client4_clone/.hg/requires: $ENOENT$ | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs | ||
Matt Harbison
|
r35519 | [2] | ||
TODO: fail more gracefully. | ||||
$ hg init $TESTTMP/client4_pull | ||||
$ hg -R $TESTTMP/client4_pull pull -q http://localhost:$HGPORT | ||||
abort: HTTP Error 500: Internal Server Error | ||||
[255] | ||||
$ grep 'lfs' $TESTTMP/client4_pull/.hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs | ||
Matt Harbison
|
r35519 | |||
$ hg identify http://localhost:$HGPORT | ||||
03b080fa9d93 | ||||
-------------------------------------------------------------------------------- | ||||
Case #5: client with non-lfs content and the extension enabled; server with | ||||
lfs content, and the extension enabled. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> lfs = | ||||
> EOF | ||||
$ echo 'non-lfs' > nonlfs3.txt | ||||
$ hg ci -Aqm 'non-lfs file with lfs client' | ||||
$ hg push -q | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs | ||
Matt Harbison
|
r35519 | |||
$ hg clone -q http://localhost:$HGPORT $TESTTMP/client5_clone | ||||
$ grep 'lfs' $TESTTMP/client5_clone/.hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/client5_clone/.hg/requires:lfs | ||
$TESTTMP/server/.hg/requires:lfs | ||||
Matt Harbison
|
r35519 | |||
$ hg init $TESTTMP/client5_pull | ||||
$ hg -R $TESTTMP/client5_pull pull -q http://localhost:$HGPORT | ||||
$ grep 'lfs' $TESTTMP/client5_pull/.hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/client5_pull/.hg/requires:lfs | ||
$TESTTMP/server/.hg/requires:lfs | ||||
Matt Harbison
|
r35519 | |||
$ hg identify http://localhost:$HGPORT | ||||
c729025cc5e3 | ||||
-------------------------------------------------------------------------------- | ||||
Case #6: client with lfs content and the extension enabled; server with | ||||
lfs content, and the extension enabled. | ||||
$ echo 'this is another lfs file' > lfs2.txt | ||||
$ hg ci -Aqm 'lfs file with lfs client' | ||||
$ hg push -q | ||||
$ grep 'lfs' .hg/requires $SERVER_REQUIRES | ||||
.hg/requires:lfs | ||||
Matt Harbison
|
r35520 | $TESTTMP/server/.hg/requires:lfs | ||
Matt Harbison
|
r35519 | |||
$ hg clone -q http://localhost:$HGPORT $TESTTMP/client6_clone | ||||
$ grep 'lfs' $TESTTMP/client6_clone/.hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/client6_clone/.hg/requires:lfs | ||
$TESTTMP/server/.hg/requires:lfs | ||||
Matt Harbison
|
r35519 | |||
$ hg init $TESTTMP/client6_pull | ||||
$ hg -R $TESTTMP/client6_pull pull -q http://localhost:$HGPORT | ||||
$ grep 'lfs' $TESTTMP/client6_pull/.hg/requires $SERVER_REQUIRES | ||||
Matt Harbison
|
r35520 | $TESTTMP/client6_pull/.hg/requires:lfs | ||
$TESTTMP/server/.hg/requires:lfs | ||||
Matt Harbison
|
r35519 | |||
$ hg identify http://localhost:$HGPORT | ||||
d3b84d50eacb | ||||
-------------------------------------------------------------------------------- | ||||
Misc: process dies early if a requirement exists and the extension is disabled | ||||
$ hg --config extensions.lfs=! summary | ||||
abort: repository requires features unknown to this Mercurial: lfs! | ||||
(see https://mercurial-scm.org/wiki/MissingRequirement for more information) | ||||
[255] | ||||
#endif | ||||
$ $PYTHON $TESTDIR/killdaemons.py $DAEMON_PIDS | ||||
#if lfsremote-on | ||||
$ cat $TESTTMP/errors.log | grep '^[A-Z]' | ||||
Traceback (most recent call last): | ||||
ValueError: no common changegroup version | ||||
Traceback (most recent call last): | ||||
ValueError: no common changegroup version | ||||
#else | ||||
$ cat $TESTTMP/errors.log | ||||
#endif | ||||