tests/test-push-cgi.t
author Matt Harbison <matt_harbison@yahoo.com>
Tue, 14 Jan 2020 20:05:37 -0500
changeset 44086 ffac09da7a19
parent 39707 5abc47d4ca6b
child 50734 d5cd1fd690f3
permissions -rw-r--r--
lfs: avoid quadratic performance in processing server responses This is also adapted from the Facebook repo[1]. Unlike there, we were already reading the download stream in chunks and immediately writing it to disk, so we basically avoided the problem on download. There shouldn't be a lot of data to read on upload, but it's better to get rid of this pattern. [1] https://github.com/facebookexperimental/eden/commit/82df66ffe97e21f3ee73dfec093c87500fc1f6a7 Differential Revision: https://phab.mercurial-scm.org/D7882
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22046
7a9cbb315d84 tests: replace exit 80 with #require
Matt Mackall <mpm@selenic.com>
parents: 18957
diff changeset
     1
#require no-msys # MSYS will translate web paths as if they were file paths
15567
8b84d040d9f9 tests: introduce 'hghave msys' to skip tests that would fail because of msys
Mads Kiilerich <mads@kiilerich.com>
parents: 13946
diff changeset
     2
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     3
This is a test of the push wire protocol over CGI-based hgweb.
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     4
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     5
initialize repository
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     6
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     7
  $ hg init r
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     8
  $ cd r
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
     9
  $ echo a > a
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    10
  $ hg ci -A -m "0"
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    11
  adding a
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    12
  $ echo '[web]' > .hg/hgrc
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    13
  $ echo 'allow_push = *' >> .hg/hgrc
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    14
  $ echo 'push_ssl = false' >> .hg/hgrc
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    15
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    16
create hgweb invocation script
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    17
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    18
  $ cat >hgweb.cgi <<HGWEB
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    19
  > import cgitb
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    20
  > cgitb.enable()
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    21
  > from mercurial import demandimport; demandimport.enable()
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    22
  > from mercurial.hgweb import hgweb
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    23
  > from mercurial.hgweb import wsgicgi
39621
23b749b84b8a py3: call hgweb.hgweb() with bytes values
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 33262
diff changeset
    24
  > application = hgweb(b'.', b'test repository')
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    25
  > wsgicgi.launch(application)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    26
  > HGWEB
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    27
  $ chmod 755 hgweb.cgi
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    28
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    29
test preparation
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    30
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    31
  $ . "$TESTDIR/cgienv"
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    32
  $ REQUEST_METHOD="POST"; export REQUEST_METHOD
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    33
  $ CONTENT_TYPE="application/octet-stream"; export CONTENT_TYPE
26865
c739b1e4b203 test: enforce bundle1 in 'test-push-cgi.t'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22046
diff changeset
    34
  $ hg bundle --type v1 --all bundle.hg
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    35
  1 changesets found
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    36
  $ CONTENT_LENGTH=279; export CONTENT_LENGTH;
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    37
18957
6b618aa08b6e wireproto: clarify cryptic 'remote: unsynced changes' error message on push
Mads Kiilerich <madski@unity3d.com>
parents: 18346
diff changeset
    38
expect failure because heads doesn't match (formerly known as 'unsynced changes')
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    39
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    40
  $ QUERY_STRING="cmd=unbundle&heads=0000000000000000000000000000000000000000"; export QUERY_STRING
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39621
diff changeset
    41
  $ "$PYTHON" hgweb.cgi <bundle.hg >page1 2>&1
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    42
  $ cat page1
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    43
  Status: 200 Script output follows\r (esc)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    44
  Content-Type: application/mercurial-0.1\r (esc)
18957
6b618aa08b6e wireproto: clarify cryptic 'remote: unsynced changes' error message on push
Mads Kiilerich <madski@unity3d.com>
parents: 18346
diff changeset
    45
  Content-Length: 64\r (esc)
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    46
  \r (esc)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    47
  0
18957
6b618aa08b6e wireproto: clarify cryptic 'remote: unsynced changes' error message on push
Mads Kiilerich <madski@unity3d.com>
parents: 18346
diff changeset
    48
  repository changed while preparing changes - please try again
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    49
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    50
successful force push
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    51
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    52
  $ QUERY_STRING="cmd=unbundle&heads=666f726365"; export QUERY_STRING
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39621
diff changeset
    53
  $ "$PYTHON" hgweb.cgi <bundle.hg >page2 2>&1
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    54
  $ cat page2
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    55
  Status: 200 Script output follows\r (esc)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    56
  Content-Type: application/mercurial-0.1\r (esc)
18346
6c2563b2c1c6 hgweb: use Content-Length for pushres
Mads Kiilerich <mads@kiilerich.com>
parents: 16913
diff changeset
    57
  Content-Length: 102\r (esc)
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    58
  \r (esc)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    59
  1
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    60
  adding changesets
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    61
  adding manifests
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    62
  adding file changes
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    63
  added 0 changesets with 0 changes to 1 files
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    64
13946
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    65
successful push, list of heads
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    66
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    67
  $ QUERY_STRING="cmd=unbundle&heads=f7b1eb17ad24730a1651fccd46c43826d1bbc2ac"; export QUERY_STRING
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39621
diff changeset
    68
  $ "$PYTHON" hgweb.cgi <bundle.hg >page3 2>&1
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    69
  $ cat page3
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    70
  Status: 200 Script output follows\r (esc)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    71
  Content-Type: application/mercurial-0.1\r (esc)
18346
6c2563b2c1c6 hgweb: use Content-Length for pushres
Mads Kiilerich <mads@kiilerich.com>
parents: 16913
diff changeset
    72
  Content-Length: 102\r (esc)
13397
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    73
  \r (esc)
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    74
  1
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    75
  adding changesets
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    76
  adding manifests
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    77
  adding file changes
6f9616a46f7c tests: push wire protocol over CGI-based hgweb
Steven Brown <StevenGBrown@gmail.com>
parents:
diff changeset
    78
  added 0 changesets with 0 changes to 1 files
13946
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    79
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    80
successful push, SHA1 hash of heads (unbundlehash capability)
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    81
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    82
  $ QUERY_STRING="cmd=unbundle&heads=686173686564 5a785a5f9e0d433b88ed862b206b011b0c3a9d13"; export QUERY_STRING
39707
5abc47d4ca6b tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents: 39621
diff changeset
    83
  $ "$PYTHON" hgweb.cgi <bundle.hg >page4 2>&1
13946
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    84
  $ cat page4
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    85
  Status: 200 Script output follows\r (esc)
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    86
  Content-Type: application/mercurial-0.1\r (esc)
18346
6c2563b2c1c6 hgweb: use Content-Length for pushres
Mads Kiilerich <mads@kiilerich.com>
parents: 16913
diff changeset
    87
  Content-Length: 102\r (esc)
13946
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    88
  \r (esc)
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    89
  1
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    90
  adding changesets
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    91
  adding manifests
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    92
  adding file changes
3c2f9f611ef6 tests: new test cases for the unbundlehash capability
Steven Brown <StevenGBrown@gmail.com>
parents: 13397
diff changeset
    93
  added 0 changesets with 0 changes to 1 files
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15567
diff changeset
    94
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15567
diff changeset
    95
  $ cd ..