def test_recieve_zero_length(self): nstr = NetString(self.socket) # close on empty socket try: nstr.read_string() assert False except NetStringClosed as e: assert str(e) == 'connection closed'
def test_too_long_string(self): data = str(NetString.MAX_STRING_LEN).encode() self.socket.output.sendall(data) nstr = NetString(self.socket) try: data = nstr.read_string() assert False except NetStringException as e: assert str(e) == 'can\'t receive, wrong net string format'
def test_not_numbers_in_string_length(self): # close on not numbers in string length self.socket.output.sendall(b'abc') nstr = NetString(self.socket) try: nstr.read_string() assert False except NetStringException as e: assert str(e) == 'can\'t receive, wrong net string format'
def test_exception_in_send_all(self): socket = Mock() socket.sendall = Mock() socket.sendall = Mock(side_effect=Exception('some error')) nstr = NetString(socket) try: nstr.write_string("some data") assert False except NetStringClosed as e: assert str(e) == 'connection closed'
def test_writing_to_long_string(self): nstr = NetString(None) data = Mock() data.__len__ = Mock() data.__len__.return_value = NetString.MAX_STRING_LEN + 1 try: data = nstr.write_string(data) assert False except NetStringException as e: assert str(e) == 'can\'t send, net string too long'
def test_too_short_string(self): data = "some string" data = '%d:%s' % (len(data), data) self.socket.output.sendall(data.encode()) nstr = NetString(self.socket) try: data = nstr.read_string() assert False except NetStringClosed as e: assert str(e) == 'can\'t receive, net string closed'
def test_comma_at_end_of_string(self): data = "some string" data = '%d:%sx' % (len(data), data) self.socket.output.sendall(data.encode()) nstr = NetString(self.socket) try: data = nstr.read_string() assert False except NetStringException as e: assert str(e) == 'wrong net string format'
def test_slen_greater_max(self): data = (str(NetString.MAX_STRING_LEN - 1) + ":abc").encode() NetString.MAX_STRING_LEN -= 2 self.socket.output.sendall(data) nstr = NetString(self.socket) try: data = nstr.read_string() assert False except NetStringException as e: assert str(e) == 'net string too long'
def test_low_level_exception_on_exchange(self, monkeypatch): transport = NetString('skt') transport.write_string = lambda x: MockUtils.raise_( Exception('some error')) client = AgentProxy('localhost:7000') client.transport = transport client.skt = 'skt' try: client._exchange({'some': 'data'}) assert False except AgentProxyException as e: assert str(e) == 'some error'
def connect(self, retry=6): self.disconnect() def parse_address(address): try: host, port = address.split(':') return host, int(port) except Exception: raise AgentProxyException("can't parse server address.") if not isinstance(self.address, tuple): self.address = parse_address(self.address) count = 0 random.seed() while True: try: log.info("trying to connect, attempt: %d (%d)" % (count + 1, retry)) s = socket.socket() s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) s.connect(self.address) self.transport = NetString(s) assert s is not None self.skt = s break except socket.error as e: s.close() count += 1 if count < retry: time.sleep(random.uniform(0.5, 6)) continue else: raise AgentProxyException(str(e)) except Exception as e: raise AgentProxyException(str(e))
def test_to_wire_and_read_back(self): some_string = b"some string" nstr = NetString(self.socket) nstr.write_string(some_string) data = nstr.read_string() assert data == some_string
def __init__(self, skt, address): NetString.__init__(self, skt) self.agent = RLXAgentProxy() self.address = address