annotate tests/dumbhttp.py @ 51634:3b69324d9535 stable

exchange: fix locking to actually be scoped The previous code was taking locks before entering with statements, so exception before the with statement would not release the lock (except for garbage collection). We need to move to a try except here because the logic is more complicated.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 11 Jun 2024 11:14:13 +0200
parents 642e31cb55f0
children 493034cc3265
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47500
23f5ed6dbcb1 run-tests: stop writing a `python3` symlink pointing to python2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45830
diff changeset
1 #!/usr/bin/env python
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
2
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
3
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
4 """
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
5 Small and dumb HTTP server for use in tests.
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
6 """
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
7
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
8 import optparse
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
9 import os
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
10 import signal
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
11 import socket
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
12 import sys
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
13
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
14 from mercurial import (
38593
e46c3b6a47b5 py3: fix dumbhttp.py to convert --daemon-postexec arguments back to bytes
Yuya Nishihara <yuya@tcha.org>
parents: 37672
diff changeset
15 encoding,
37672
8bacc09814ba py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34944
diff changeset
16 pycompat,
30506
d9d8d78e6bc9 server: move cmdutil.service() to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29566
diff changeset
17 server,
29566
075146e85bb6 py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28771
diff changeset
18 util,
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
19 )
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
20
29566
075146e85bb6 py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28771
diff changeset
21 httpserver = util.httpserver
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
22 OptionParser = optparse.OptionParser
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
23
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
24 if os.environ.get('HGIPV6', '0') == '1':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
25
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
26 class simplehttpserver(httpserver.httpserver):
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
27 address_family = socket.AF_INET6
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
28
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
29
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
30 else:
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
31 simplehttpserver = httpserver.httpserver
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
32
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
33
34944
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
34 class _httprequesthandler(httpserver.simplehttprequesthandler):
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
35 def log_message(self, format, *args):
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
36 httpserver.simplehttprequesthandler.log_message(self, format, *args)
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
37 sys.stderr.flush()
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
38
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
39
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
40 class simplehttpservice:
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
41 def __init__(self, host, port):
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
42 self.address = (host, port)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
43
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
44 def init(self):
34944
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
45 self.httpd = simplehttpserver(self.address, _httprequesthandler)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
46
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
47 def run(self):
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
48 self.httpd.serve_forever()
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
49
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
50
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
51 if __name__ == '__main__':
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
52 parser = OptionParser()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
53 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
54 '-p',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
55 '--port',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
56 dest='port',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
57 type='int',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
58 default=8000,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
59 help='TCP port to listen on',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
60 metavar='PORT',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
61 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
62 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
63 '-H',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
64 '--host',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
65 dest='host',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
66 default='localhost',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
67 help='hostname or IP to listen on',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
68 metavar='HOST',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
69 )
34925
8b95e420e248 test-static-http: show all files accessed over HTTP
Yuya Nishihara <yuya@tcha.org>
parents: 31004
diff changeset
70 parser.add_option('--logfile', help='file name of access/error log')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
71 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
72 '--pid',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
73 dest='pid',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
74 help='file name where the PID of the server is stored',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
75 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
76 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
77 '-f',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
78 '--foreground',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
79 dest='foreground',
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
80 action='store_true',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
81 help='do not start the HTTP server in the background',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
82 )
28451
c90cfe76e024 serve: accept multiple values for --daemon-postexec
Jun Wu <quark@fb.com>
parents: 28194
diff changeset
83 parser.add_option('--daemon-postexec', action='append')
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
84
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
85 (options, args) = parser.parse_args()
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
86
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
87 signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0))
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
88
34925
8b95e420e248 test-static-http: show all files accessed over HTTP
Yuya Nishihara <yuya@tcha.org>
parents: 31004
diff changeset
89 if options.foreground and options.logfile:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
90 parser.error(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
91 "options --logfile and --foreground are mutually " "exclusive"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
92 )
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
93 if options.foreground and options.pid:
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
94 parser.error("options --pid and --foreground are mutually exclusive")
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
95
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
96 opts = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
97 b'pid_file': options.pid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
98 b'daemon': not options.foreground,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
99 b'daemon_postexec': pycompat.rapply(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
100 encoding.strtolocal, options.daemon_postexec
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
101 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
102 }
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
103 service = simplehttpservice(options.host, options.port)
37672
8bacc09814ba py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34944
diff changeset
104 runargs = [sys.executable, __file__] + sys.argv[1:]
8bacc09814ba py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34944
diff changeset
105 runargs = [pycompat.fsencode(a) for a in runargs]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
106 server.runservice(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
107 opts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
108 initfn=service.init,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
109 runfn=service.run,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
110 logfile=options.logfile,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
111 runargs=runargs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
112 )