annotate tests/test-hgwebdir-gc.py @ 51711:832a1aeb576f

pytype: only try the hacky way of finding PYTHON if not provided This allows us to work in more environments, like when using pyenv. This syntax is compatible with all POSIX shells.
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 23 Jul 2024 12:10:31 +0200
parents 6000f5b25c9b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47802
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
1 import os
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
2 from mercurial.hgweb import hgwebdir_mod
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
3
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
4 hgwebdir = hgwebdir_mod.hgwebdir
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
6 os.mkdir(b'webdir')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
7 os.chdir(b'webdir')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
8
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
9 webdir = os.path.realpath(b'.')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
10
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
11
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
12 def trivial_response(req, res):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
13 return []
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
14
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
15
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
16 def make_hgwebdir(gc_rate=None):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
17 config = os.path.join(webdir, b'hgwebdir.conf')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
18 with open(config, 'wb') as configfile:
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
19 configfile.write(b'[experimental]\n')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
20 if gc_rate is not None:
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
21 configfile.write(b'web.full-garbage-collection-rate=%d\n' % gc_rate)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
22 hg_wd = hgwebdir(config)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
23 hg_wd._runwsgi = trivial_response
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
24 return hg_wd
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
25
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
26
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
27 def process_requests(webdir_instance, number):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
28 # we don't care for now about passing realistic arguments
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
29 for _ in range(number):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
30 for chunk in webdir_instance.run_wsgi(None, None):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
31 pass
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
32
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
33
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
34 without_gc = make_hgwebdir(gc_rate=0)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
35 process_requests(without_gc, 5)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
36 assert without_gc.requests_count == 5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
37 assert without_gc.gc_full_collections_done == 0
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
38
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
39 with_gc = make_hgwebdir(gc_rate=2)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
40 process_requests(with_gc, 5)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
41 assert with_gc.requests_count == 5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
42 assert with_gc.gc_full_collections_done == 2
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
43
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
44 with_systematic_gc = make_hgwebdir() # default value of the setting
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
45 process_requests(with_systematic_gc, 3)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
46 assert with_systematic_gc.requests_count == 3
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
47 assert with_systematic_gc.gc_full_collections_done == 3