diff options
author | Eddy Pedroni <eddy@0xf7.com> | 2022-06-05 16:49:33 +0200 |
---|---|---|
committer | Eddy Pedroni <eddy@0xf7.com> | 2022-06-05 16:49:33 +0200 |
commit | d37252c9b6044ce540db54e8b480a85dfc1ec25d (patch) | |
tree | 74d9c6381dc5f37ed76be42995852e817755c371 /lab_control/test/mock/virtual_tcp_server.py | |
parent | ed42c1a47bc96f6453bb50008481d3467e9254e6 (diff) |
Moved mocks to separate module
Diffstat (limited to 'lab_control/test/mock/virtual_tcp_server.py')
-rw-r--r-- | lab_control/test/mock/virtual_tcp_server.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lab_control/test/mock/virtual_tcp_server.py b/lab_control/test/mock/virtual_tcp_server.py new file mode 100644 index 0000000..07a4345 --- /dev/null +++ b/lab_control/test/mock/virtual_tcp_server.py @@ -0,0 +1,44 @@ +import socket +import threading +import atexit + +IP = "0.0.0.0" +PORT = 5025 + +# Bind server socket when this module is included +_serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +_serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +_serverSocket.bind((IP, PORT)) +_serverSocket.listen(1) + +# Close it when the program exits +def _cleanUp(): + _serverSocket.close() +atexit.register(_cleanUp) + +class VirtualTCPServer: + def __init__(self): + self._stopFlag = False + self._clientSocket = None + self._mainThread = threading.Thread(target=self._mainLoop) + self._mainThread.start() + + def _mainLoop(self) -> None: + self._clientSocket, _ = _serverSocket.accept() + self._clientSocket.settimeout(0.1) + + try: + while not self._stopFlag: + try: + request = self._clientSocket.recv(4096).decode() + response = self._handleRequest(request.strip()) + if response is not None: + self._clientSocket.send(response.encode()) + except TimeoutError as e: + pass + finally: + self._clientSocket.close() + + def stop(self) -> None: + self._stopFlag = True + self._mainThread.join() |