nixos/tests/printing: fix race of lpstat and ensure-printers
There is a nasty race condition in the cups tests. To understand what is going on, one must first note that printers are installed in the vms with ensure-printers.service, which is started as part of multi-user.target. ensure-printers.service in turn triggers a start of cups.service as it needs to connect to the local cups daemon. This is what happens when the test runs: 1 the test waits for cups.socket or cups.service to start up (subtest "Make sure that cups is up on both sides...") 2 after cups.service started (it starts even in the "socket" case, triggered by ensure-printers.service), ensure-printers.service is started 3 the test tries to connect to the cups daemons via curl (subtest "HTTP server is available too") 4 the test verifies the required printers are installed ("lpstat -a" called by subtest "LP status checks") Usually, 3 needs some time, so ensure-printers.service already installed all printers that are required by 4. But if 3 is too fast, or if ensure-printers.service is too slow, 4 fails to find the printers it is looking for. One can provoke the problem by adding > systemd.services.ensure-printers.serviceConfig.ExecStartPre = "/run/current-system/sw/bin/sleep 10"; to the `nodes.client` configuration. The commit at hand fixes the problem by changing 1: Instead of waiting for cups, it now waits for ensure-printers.service (which in turn waits for cups.service and cups.socket). This is also in accordance with the subtest description in the code that promises to "Make sure that cups is up [...] and printers are set up".
This commit is contained in:
parent
377cbbdc30
commit
1693e1acc0
@ -54,8 +54,8 @@ import ./make-test-python.nix (
|
||||
start_all()
|
||||
|
||||
with subtest("Make sure that cups is up on both sides and printers are set up"):
|
||||
server.wait_for_unit("cups.${if socket then "socket" else "service"}")
|
||||
client.wait_for_unit("cups.${if socket then "socket" else "service"}")
|
||||
server.wait_for_unit("ensure-printers.service")
|
||||
client.wait_for_unit("ensure-printers.service")
|
||||
|
||||
assert "scheduler is running" in client.succeed("lpstat -r")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user