Ejemplo n.º 1
0
 def makeClient(self):
     self.clientSocket = TCPSocket(
         host="localhost",
         port=Port,
         stateCallback=self.clientState,
         readCallback=self.clientRead,
         name="client",
     )
Ejemplo n.º 2
0
 def makeClient(self):
     self.clientSocket = TCPSocket(
         host = "localhost",
         port = Port,
         stateCallback = self.clientState,
         readCallback = self.clientRead,
         name = "client",
     )
Ejemplo n.º 3
0
 def startClient():
     global clientSocket
     clientSocket = TCPSocket(
         host = "localhost",
         port = port,
         stateCallback = clientState,
         readCallback = clientRead,
         name = "client",
     )
Ejemplo n.º 4
0
 def _tryConnection(self):
     """Attempt a connection
     """
     self._sock = TCPSocket(host=self.host, port=self.port, stateCallback=self._sockStateCallback)
Ejemplo n.º 5
0
class WaitForTCPServer(object):
    """Wait for a TCP server to accept a connection
    """
    def __init__(self, host, port, callFunc, timeLim=5, pollInterval=0.2):
        """Start waiting for a TCP server to accept a connection
        
        @param[in] host  host address of server
        @param[in] port  port number of server
        @param[in] callFunc  function to call when server ready or wait times out;
            receives one parameter: this object
        @param[in] timeLim  approximate maximum wait time (sec);
            the actual wait time may be up to pollInterval longer
        @param[in] pollInterval  interval at which to poll (sec)
        
        Useful attributes:
        - isDone: the wait is over
        - didFail: the wait failed
        """
        self.host = host
        self.port = port
        self.isDone = False
        self.didFail = False
        self._callFunc = callFunc
        self._pollInterval = float(pollInterval)
        self._timeLim = float(timeLim)
        self._pollTimer = Timer()
        self._startTime = time.time()
        self._tryConnection()
        self._timeoutTimer = Timer(timeLim, self._finish)
    
    def _tryConnection(self):
        """Attempt a connection
        """
        self._sock = TCPSocket(host=self.host, port=self.port, stateCallback=self._sockStateCallback)
    
    def _sockStateCallback(self, sock):
        """Socket state callback
        """
        if sock.isReady:
            # success
            self._finish()
        elif sock.isDone:
            # connection failed; try again
            self._pollTimer.start(self._pollInterval, self._tryConnection)
        
    def _finish(self):
        """Set _isReady and call the callback function
        """
        self._pollTimer.cancel()
        self._timeoutTimer.cancel()
        self.didFail = not self._sock.isReady
        self.isDone = True
        if not self._sock.isDone:
            self._sock.setStateCallback()
            self._sock.close()
            self._sock = None
        if self._callFunc:
            callFunc = self._callFunc
            self._callFunc = None
            safeCall2("%s._finish" % (self,), callFunc, self)

    def __repr__(self):
        return "%s(host=%s, port=%s)" % (type(self).__name__, self.host, self.port)
Ejemplo n.º 6
0
class TestRunner(object):
    def __init__(self, sendRcvList, binaryServer=False):
        self.binaryServer = bool(binaryServer)
        self.sendRcvListIter = iter(sendRcvList)
        self.deferred = Deferred()
        self.endState = None
        self.clientSocket = None
        self.serverSocket = None
        self.echoServer = TCPServer(
            port = Port,
            stateCallback = self.echoState,
            sockReadCallback = self.echoSocketRead,
            sockStateCallback = self.echoSocketState,
            name = "echo",
        )
    
    @property
    def isDone(self):
        return self.endState is not None
    
    def close(self):
        if self.clientSocket:
            self.clientSocket.close()
        if self.serverSocket:
            self.serverSocket.close()
        self.echoServer.close()
    
    def endIfDone(self):
        if self.endState is not None:
            if self.clientSocket and self.clientSocket.isDone \
                and self.serverSocket and self.serverSocket.isDone \
                and self.echoServer.isDone:
                isOK, reason = self.endState
                # remove reference to deferred, for paranoia
                deferred, self.deferred = self.deferred, None
                if isOK:
                    deferred.callback(reason)
                else:
                    deferred.errback(reason)
    
    def clientState(self, sock):
        if sock.isReady:
            self.writeNext()
        elif sock.isDone and not self.isDone:
            self.end(False, "Client socket failed")
        self.endIfDone()

    def clientRead(self, sock):
        if self.readLine:
            data = sock.readLine()
        else:
            data = sock.read()
        if data != self.readData:
            self.deferred.errback(
                "Expected %r but read %r; readLine=%r" % (self.readData, data, self.readLine),
            )
        else:
            self.writeNext()
    
    def echoState(self, server):
        if server.isReady:
            self.makeClient()
        elif server.isDone and not self.isDone:
            self.end(False, "Echo server failed")
        self.endIfDone()
    
    def echoSocketState(self, sock):
        self.serverSocket = sock
        self.endIfDone()
    
    def echoSocketRead(self, sock):
        if self.binaryServer:
            data = sock.read()
            if data is not None:
                sock.write(data)
        else:
            data = sock.readLine(default=None)
            if data is not None:
                sock.writeLine(data)
    
    def end(self, isOK, reason=None):
        self.endState = (isOK, reason)
        self.close()
    
    def makeClient(self):
        self.clientSocket = TCPSocket(
            host = "localhost",
            port = Port,
            stateCallback = self.clientState,
            readCallback = self.clientRead,
            name = "client",
        )

    def writeNext(self):
        try:
            writeData, writeLine, self.readData, self.readLine = next(self.sendRcvListIter)
        except StopIteration:
            self.end(isOK=True)
            return

        if writeData is not None:
            if writeLine:
                self.clientSocket.writeLine(writeData)
            else:
                self.clientSocket.write(writeData)

        if self.readData is None:
            self.writeNext()
Ejemplo n.º 7
0
class WaitForTCPServer(object):
    """Wait for a TCP server to accept a connection
    """
    def __init__(self, host, port, callFunc, timeLim=5, pollInterval=0.2):
        """Start waiting for a TCP server to accept a connection
        
        @param[in] host: host address of server
        @param[in] port: port number of server
        @param[in] callFunc: function to call when server ready or wait times out;
            receives one parameter: this object
        @param[in] timeLim: approximate maximum wait time (sec);
            the actual wait time may be up to pollInterval longer
        @param[in] pollInterval: interval at which to poll (sec)
        
        Useful attributes:
        - isDone: the wait is over
        - didFail: the wait failed
        """
        self.host = host
        self.port = port
        self.isDone = False
        self.didFail = False
        self._callFunc = callFunc
        self._pollInterval = float(pollInterval)
        self._timeLim = float(timeLim)
        self._pollTimer = Timer()
        self._startTime = time.time()
        self._tryConnection()
        self._timeoutTimer = Timer(timeLim, self._finish)
    
    def _tryConnection(self):
        """Attempt a connection
        """
        self._sock = TCPSocket(host=self.host, port=self.port, stateCallback=self._sockStateCallback)
    
    def _sockStateCallback(self, sock):
        """Socket state callback
        """
        if sock.isReady:
            # success
            self._finish()
        elif sock.isDone:
            # connection failed; try again
            self._pollTimer.start(self._pollInterval, self._tryConnection)
        
    def _finish(self):
        """Set _isReady and call the callback function
        """
        self._pollTimer.cancel()
        self._timeoutTimer.cancel()
        self.didFail = not self._sock.isReady
        self.isDone = True
        if not self._sock.isDone:
            self._sock.setStateCallback()
            self._sock.close()
            self._sock = None
        if self._callFunc:
            callFunc = self._callFunc
            self._callFunc = None
            safeCall2("%s._finish" % (self,), callFunc, self)

    def __repr__(self):
        return "%s(host=%s, port=%s)" % (type(self).__name__, self.host, self.port)
Ejemplo n.º 8
0
 def _tryConnection(self):
     """Attempt a connection
     """
     self._sock = TCPSocket(host=self.host, port=self.port, stateCallback=self._sockStateCallback)
Ejemplo n.º 9
0
class TestRunner(object):
    def __init__(self, sendRcvList, binaryServer=False):
        self.binaryServer = bool(binaryServer)
        self.sendRcvListIter = iter(sendRcvList)
        self.deferred = Deferred()
        self.endState = None
        self.clientSocket = None
        self.serverSocket = None
        self.echoServer = TCPServer(
            port=Port,
            stateCallback=self.echoState,
            sockReadCallback=self.echoSocketRead,
            sockStateCallback=self.echoSocketState,
            name="echo",
        )

    @property
    def isDone(self):
        return self.endState is not None

    def close(self):
        if self.clientSocket:
            self.clientSocket.close()
        if self.serverSocket:
            self.serverSocket.close()
        self.echoServer.close()

    def endIfDone(self):
        if self.endState is not None:
            if self.clientSocket and self.clientSocket.isDone \
                and self.serverSocket and self.serverSocket.isDone \
                and self.echoServer.isDone:
                isOK, reason = self.endState
                # remove reference to deferred, for paranoia
                deferred, self.deferred = self.deferred, None
                if isOK:
                    deferred.callback(reason)
                else:
                    deferred.errback(reason)

    def clientState(self, sock):
        if sock.isReady:
            self.writeNext()
        elif sock.isDone and not self.isDone:
            self.end(False, "Client socket failed")
        self.endIfDone()

    def clientRead(self, sock):
        if self.readLine:
            data = sock.readLine()
        else:
            data = sock.read()
        if data != self.readData:
            self.deferred.errback(
                "Expected %r but read %r; readLine=%r" %
                (self.readData, data, self.readLine), )
        else:
            self.writeNext()

    def echoState(self, server):
        if server.isReady:
            self.makeClient()
        elif server.isDone and not self.isDone:
            self.end(False, "Echo server failed")
        self.endIfDone()

    def echoSocketState(self, sock):
        self.serverSocket = sock
        self.endIfDone()

    def echoSocketRead(self, sock):
        if self.binaryServer:
            data = sock.read()
            if data is not None:
                sock.write(data)
        else:
            data = sock.readLine(default=None)
            if data is not None:
                sock.writeLine(data)

    def end(self, isOK, reason=None):
        self.endState = (isOK, reason)
        self.close()

    def makeClient(self):
        self.clientSocket = TCPSocket(
            host="localhost",
            port=Port,
            stateCallback=self.clientState,
            readCallback=self.clientRead,
            name="client",
        )

    def writeNext(self):
        try:
            writeData, writeLine, self.readData, self.readLine = next(
                self.sendRcvListIter)
        except StopIteration:
            self.end(isOK=True)
            return

        if writeData is not None:
            if writeLine:
                self.clientSocket.writeLine(writeData)
            else:
                self.clientSocket.write(writeData)

        if self.readData is None:
            self.writeNext()