blob: b268b50a4ef378a553ed838c1f3d9592a8b95f31 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
=============================
Starting and stopping Mailman
=============================
The Mailman daemon processes can be started and stopped from the command
line.
Set up
======
All we care about is the master process; normally it starts a bunch of
runners, but we don't care about any of them, so write a test configuration
file for the master that disables all the runners.
>>> from mailman.commands.tests.test_control import make_config
Starting
========
>>> from mailman.commands.cli_control import Start
>>> start = Start()
>>> class FakeArgs:
... force = False
... run_as_user = True
... quiet = False
... config = make_config()
>>> args = FakeArgs()
Starting the daemons prints a useful message and starts the master watcher
process in the background.
>>> start.process(args)
Starting Mailman's master runner
>>> from mailman.commands.tests.test_control import find_master
The process exists, and its pid is available in a run time file.
>>> pid = find_master()
>>> pid is not None
True
Stopping
========
You can also stop the master watcher process from the command line, which
stops all the child processes too.
::
>>> from mailman.commands.cli_control import Stop
>>> stop = Stop()
>>> stop.process(args)
Shutting down Mailman's master runner
>>> from datetime import datetime, timedelta
>>> import os
>>> import time
>>> import errno
>>> def bury_master():
... until = timedelta(seconds=2) + datetime.now()
... while datetime.now() < until:
... time.sleep(0.1)
... try:
... os.kill(pid, 0)
... os.waitpid(pid, os.WNOHANG)
... except OSError as error:
... if error.errno == errno.ESRCH:
... # The process has exited.
... print('Master process went bye bye')
... return
... else:
... raise
... else:
... raise AssertionError('Master process lingered')
>>> bury_master()
Master process went bye bye
XXX We need tests for restart (SIGUSR1) and reopen (SIGHUP).
|