annotate tests/test-cache-abuse.t @ 37048:fc5e261915b9

wireproto: require POST for all HTTPv2 requests Wire protocol version 1 transfers argument data via request headers by default. This has historically caused problems because servers institute limits on the length of individual HTTP headers as well as the total size of all request headers. Mercurial servers can advertise the maximum length of an individual header. But there's no guarantee any intermediate HTTP agents will accept headers up to that length. In the existing wire protocol, server operators typically also key off the HTTP request method to implement authentication. For example, GET requests translate to read-only requests and can be allowed. But read-write commands must use POST and require authentication. This has typically worked because the only wire protocol commands that use POST modify the repo (e.g. the "unbundle" command). There is an experimental feature to enable clients to transmit argument data via POST request bodies. This is technically a better and more robust solution. But we can't enable it by default because of servers assuming POST means write access. In version 2 of the wire protocol, the permissions of a request are encoded in the URL. And with it being a new protocol in a new URL space, we're not constrained by backwards compatibility requirements. This commit adopts the technically superior mechanism of using HTTP request bodies to send argument data by requiring POST for all commands. Strictly speaking, it may be possible to send request bodies on GET requests. But my experience is that not all HTTP stacks support this. POST pretty much always works. Using POST for read-only operations does sacrifice some RESTful design purity. But this API cares about practicality, not about being in Roy T. Fielding's REST ivory tower. There's a chance we may relax this restriction in the future. But for now, I want to see how far we can get with a POST only API. Differential Revision: https://phab.mercurial-scm.org/D2837
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 13 Mar 2018 11:57:43 -0700
parents 1a09dad8b85a
children 34a46d48d24e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 Enable obsolete markers
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
3 $ cat >> $HGRCPATH << EOF
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
4 > [experimental]
34866
1644623ab096 config: use 'experimental.evolution.create-markers'
Boris Feld <boris.feld@octobus.net>
parents: 33773
diff changeset
5 > evolution.createmarkers=True
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
6 > [phases]
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7 > publish=False
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
8 > EOF
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
9
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
10 Build a repo with some cacheable bits:
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
11
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
12 $ hg init a
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
13 $ cd a
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
14
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
15 $ echo a > a
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
16 $ hg ci -qAm0
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
17 $ hg tag t1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
18 $ hg book -i bk1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
19
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
20 $ hg branch -q b2
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
21 $ hg ci -Am1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
22 $ hg tag t2
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
23
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
24 $ echo dumb > dumb
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
25 $ hg ci -qAmdumb
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
26 $ hg debugobsolete b1174d11b69e63cb0c5726621a43c859f0858d7f
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 32478
diff changeset
27 obsoleted 1 changesets
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
28
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
29 $ hg phase -pr t1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
30 $ hg phase -fsr t2
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
31
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
32 Make a helper function to check cache damage invariants:
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
33
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
34 - command output shouldn't change
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
35 - cache should be present after first use
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
36 - corruption/repair should be silent (no exceptions or warnings)
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
37 - cache should survive deletion, overwrite, and append
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
38 - unreadable / unwriteable caches should be ignored
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
39 - cache should be rebuilt after corruption
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
40
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
41 $ damage() {
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
42 > CMD=$1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
43 > CACHE=.hg/cache/$2
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
44 > CLEAN=$3
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
45 > hg $CMD > before
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
46 > test -f $CACHE || echo "not present"
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
47 > echo bad > $CACHE
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
48 > test -z "$CLEAN" || $CLEAN
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
49 > hg $CMD > after
33612
798f7beadbc9 tests: use pdiff instead of diff for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33542
diff changeset
50 > "$RUNTESTDIR/pdiff" before after || echo "*** overwrite corruption"
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
51 > echo corruption >> $CACHE
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
52 > test -z "$CLEAN" || $CLEAN
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
53 > hg $CMD > after
33612
798f7beadbc9 tests: use pdiff instead of diff for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33542
diff changeset
54 > "$RUNTESTDIR/pdiff" before after || echo "*** append corruption"
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
55 > rm $CACHE
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
56 > mkdir $CACHE
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
57 > test -z "$CLEAN" || $CLEAN
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
58 > hg $CMD > after
33612
798f7beadbc9 tests: use pdiff instead of diff for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33542
diff changeset
59 > "$RUNTESTDIR/pdiff" before after || echo "*** read-only corruption"
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
60 > test -d $CACHE || echo "*** directory clobbered"
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
61 > rmdir $CACHE
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
62 > test -z "$CLEAN" || $CLEAN
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
63 > hg $CMD > after
33612
798f7beadbc9 tests: use pdiff instead of diff for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33542
diff changeset
64 > "$RUNTESTDIR/pdiff" before after || echo "*** missing corruption"
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
65 > test -f $CACHE || echo "not rebuilt"
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
66 > }
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
67
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
68 Beat up tags caches:
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
69
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
70 $ damage "tags --hidden" tags2
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
71 $ damage tags tags2-visible
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
72 $ damage "tag -f t3" hgtagsfnodes1
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 34866
diff changeset
73 1 new orphan changesets
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 34866
diff changeset
74 1 new orphan changesets
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 34866
diff changeset
75 1 new orphan changesets
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 34866
diff changeset
76 1 new orphan changesets
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 34866
diff changeset
77 1 new orphan changesets
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
78
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
79 Beat up branch caches:
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
80
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
81 $ damage branches branch2-base "rm .hg/cache/branch2-[vs]*"
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
82 $ damage branches branch2-served "rm .hg/cache/branch2-[bv]*"
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
83 $ damage branches branch2-visible
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
84 $ damage "log -r branch(.)" rbc-names-v1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
85 $ damage "log -r branch(default)" rbc-names-v1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
86 $ damage "log -r branch(b2)" rbc-revs-v1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
87
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
88 We currently can't detect an rbc cache with unknown names:
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
89
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
90 $ damage "log -qr branch(b2)" rbc-names-v1
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
91 --- before * (glob)
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
92 +++ after * (glob)
29255
b0b85d8695cb test-cache-abuse: correct for different hunk headers between Solaris and GNU
Danek Duvall <danek.duvall@oracle.com>
parents: 29041
diff changeset
93 @@ -1,8 +?,0 @@ (glob)
29041
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
94 -2:5fb7d38b9dc4
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
95 -3:60b597ffdafa
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
96 -4:b1174d11b69e
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
97 -5:6354685872c0
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
98 -6:5ebc725f1bef
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
99 -7:7b76eec2f273
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
100 -8:ef3428d9d644
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
101 -9:ba7a936bc03c
b962ae0a0a05 tests: test a variety of cache invariants
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
102 *** append corruption