The Test Utilities API¶
- tango.test_context.get_server_port_via_pid(pid, host, retries=400, delay=0.03)[source]¶
Return the TCP port that a device server process is listening on (GIOP).
This checks TCP sockets open on the process with the given PID, and attempts to find the one that accepts GIOP traffic. A connection will be made to each listening socket, and data may be sent to them.
General Inter-ORB Protocol (GIOP) is the message protocol which object request brokers (ORBs) communicate in CORBA. This port is the one that is used when connecting a DeviceProxy. These are not the port(s) used for ZMQ event traffic.
- Parameters:
pid (int) – operating system process identifier
host (str) – hostname/IP that device server is listening on. E.g., 127.0.0.1, IP address of a non-loopback network interface, etc. Note that starting a device server on “localhost” may fail if OmniORB creates an IPv6-only socket.
retries (int) – number of times to retry attempts, optional
delay (float) – time to wait (seconds) between retries, optional
- Returns:
TCP port number
- Return type:
int
- Raises:
RuntimeError – If the GIOP port couldn’t be identified
Added in version 9.4.0.
Added in version 9.5.0: retries parameter. delay parameter.
- tango.test_utils.wait_for_proxy(dev_name: str, proxy_class: type[~tango._tango.DeviceProxy] = <class 'tango._tango.DeviceProxy'>, retries: int = 600, delay: float = 0.02) DeviceProxy¶
Create a new DeviceProxy, retrying until it is responding.
The DeviceProxy will try to ping the device and read the state at least once.
- Parameters:
dev_name – device name for DeviceProxy connection string
proxy_class – Type of DeviceProxy class to instantiate (could be synchronous, asyncio, or gevent versions of the class). If using asyncio, then provide:
partial(tango.asyncio.DeviceProxy, wait=True).retries – number of times to retry attempts, optional
delay – time to wait (seconds) between retries, optional
- Returns:
DeviceProxy object created to access the specified device
- Raises:
RuntimeError – If the device is not responding before the timeout
Added in version 10.1.0.
- tango.test_utils.wait_for_nodb_proxy_via_pid(pid: int, host: str, dev_name: str, proxy_class: type[DeviceProxy], retries: int = 600, delay: float = 0.02) DeviceProxy¶
Create new DeviceProxy, with retrying until it is ready and responding.
The PID is used to get the process information and probe it to find the correct TCP port number to connect to. Creation of the DeviceProxy is retried until the device is responding, or times out. The DeviceProxy will ping the device and read the state.
- Parameters:
pid – operating system process identifier
host – hostname/IP that device server is listening on.
dev_name – device name for DeviceProxy connection string
proxy_class – Type of DeviceProxy class to instantiate (could be synchronous, asyncio, or gevent versions of the class). If using asyncio, then provide:
partial(tango.asyncio.DeviceProxy, wait=True).retries – number of times to retry attempts, optional
delay – time to wait (seconds) between retries, optional
- Returns:
DeviceProxy object created to access the specified device
- Raises:
RuntimeError – If the GIOP port couldn’t be identified, or proxy timed out
Added in version 10.1.0.
Device Test Context API¶
See Device Test Context Classes API for details of the classes that can be used to launch a device server for testing.