Test suite fails on macOS 'cannot pickle module object'
I am observing test failures on macOS as follows:
$ bash -e guardian-test
...
graph: Testing graph state/path execution
PASS non-existant state
PASS non-existant request state
FAIL state A
--- graph.3.expected 2022-04-22 14:34:46.000000000 +0000
+++ graph.3.output 2022-04-22 14:34:46.000000000 +0000
@@ -1,8 +0,0 @@
-T1:TEST-A..0..
-T1:TEST-B..0..
-T1:TEST-C..0..
-T1:TEST-D..0..
-T1:TEST-A..1..
-T1:TEST-A..2..
-T1:TEST-A..3..
-T1:TEST-A..4..
2022-04-22T14:34:46.481Z TEST0 Guardian v1.4.4
2022-04-22T14:34:46.482Z TEST0 single-shot mode
2022-04-22T14:34:46.482Z TEST0 TIME_INIT => 1650638086
2022-04-22T14:34:46.482Z TEST0 OP => EXEC
2022-04-22T14:34:46.482Z TEST0 LOGLEVEL => DEBUG
2022-04-22T14:34:46.482Z TEST0 STATE => A
2022-04-22T14:34:46.482Z TEST0 TARGET => A
2022-04-22T14:34:46.482Z TEST0 REQUEST => A
2022-04-22T14:34:46.482Z TEST0 NOMINAL => NONE
2022-04-22T14:34:46.482Z TEST0 SPM_MONITOR_NOTIFY => True
2022-04-22T14:34:46.482Z TEST0 STATUS => INIT
2022-04-22T14:34:46.482Z TEST0 system name: TEST0
2022-04-22T14:34:46.482Z TEST0 system CA prefix: TEST
2022-04-22T14:34:46.482Z TEST0 module path: /Users/duncan/git/guardian/test/modules/TEST0.py
2022-04-22T14:34:46.483Z TEST0 system states: ['C', 'B', 'A', 'J', 'INIT']
2022-04-22T14:34:46.483Z TEST0 request states: ['C', 'A', 'INIT']
2022-04-22T14:34:46.483Z TEST0 initial state: A
2022-04-22T14:34:46.483Z TEST0 initial request: A
2022-04-22T14:34:46.483Z TEST0 CA setpoint monitor: False
2022-04-22T14:34:46.483Z TEST0 CA setpoint monitor notify: True
2022-04-22T14:34:46.483Z TEST0 daemon initialized
2022-04-22T14:34:46.483Z TEST0 ============= daemon start =============
2022-04-22T14:34:46.483Z TEST0 initializing worker...
2022-04-22T14:34:46.513Z TEST0 W: initialized
2022-04-22T14:34:46.516Z TEST0 stopping daemon...
2022-04-22T14:34:46.516Z TEST0 daemon stopped.
Traceback (most recent call last):
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/Users/duncan/git/guardian/lib/guardian/__main__.py", line 289, in <module>
main()
File "/Users/duncan/git/guardian/lib/guardian/__main__.py", line 280, in main
guard.run()
File "/Users/duncan/git/guardian/lib/guardian/daemon.py", line 384, in run
self.worker_init()
File "/Users/duncan/git/guardian/lib/guardian/daemon.py", line 189, in worker_init
self.worker.start()
File "/Users/duncan/git/guardian/lib/guardian/worker.py", line 173, in start
super(Worker, self).start()
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/context.py", line 284, in _Popen
return Popen(process_obj)
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/popen_spawn_posix.py", line 32, in __init__
super().__init__(process_obj)
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/popen_fork.py", line 19, in __init__
self._launch(process_obj)
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/popen_spawn_posix.py", line 47, in _launch
reduction.dump(process_obj, fp)
File "/Users/duncan/opt/mambaforge/envs/guardian/lib/python3.9/multiprocessing/reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle 'module' object
This is not observed on Linux.