1# This file contains type hints that can be prepended to Nix test scripts so they can be type
2# checked.
3
4from test_driver.driver import Driver
5from test_driver.vlan import VLan
6from test_driver.machine import Machine
7from test_driver.logger import Logger
8from typing import Callable, Iterator, ContextManager, Optional, List, Dict, Any, Union
9from typing_extensions import Protocol
10from pathlib import Path
11
12
13class RetryProtocol(Protocol):
14 def __call__(self, fn: Callable, timeout: int = 900) -> None:
15 raise Exception("This is just type information for the Nix test driver")
16
17
18class PollingConditionProtocol(Protocol):
19 def __call__(
20 self,
21 fun_: Optional[Callable] = None,
22 *,
23 seconds_interval: float = 2.0,
24 description: Optional[str] = None,
25 ) -> Union[Callable[[Callable], ContextManager], ContextManager]:
26 raise Exception("This is just type information for the Nix test driver")
27
28
29start_all: Callable[[], None]
30subtest: Callable[[str], ContextManager[None]]
31retry: RetryProtocol
32test_script: Callable[[], None]
33machines: List[Machine]
34vlans: List[VLan]
35driver: Driver
36log: Logger
37create_machine: Callable[[Dict[str, Any]], Machine]
38run_tests: Callable[[], None]
39join_all: Callable[[], None]
40serial_stdout_off: Callable[[], None]
41serial_stdout_on: Callable[[], None]
42polling_condition: PollingConditionProtocol