def __init__(self, o, iostr, name = None, chunksize=10240, io = None, password = None, expect_remclose = True): """Start a gensio object with this handler""" if (name): self.name = name else: self.name = iostr self.waiter = gensio.waiter(o) self.to_write = None self.compared = 0 self.to_compare = None self.compared_oob = 0 self.to_compare_oob = None self.to_waitfor = None self.expecting_modemstate = False self.expecting_linestate = False self.expecting_remclose = expect_remclose self.expected_server_cb = None self.expected_server_value = 0 self.expected_server_return = 0 self.expected_sig_server_cb = False self.expected_sig_server_val = None self.ignore_input = False self.stream = None self.password = password if (io): self.io = io io.set_cbs(self) else: gensios_enabled.check_iostr_gensios(iostr) self.io = gensio.gensio(o, iostr, self) self.io.handler = self self.chunksize = chunksize self.debug = 0 return
def test_sync_gensio_accepter(o): print("Testing sync accept") gensios_enabled.check_iostr_gensios("tcp") a = gensio.gensio_accepter(o, "tcp,0", None) a.set_sync() a.startup() port = a.control(gensio.GENSIO_CONTROL_DEPTH_FIRST, True, gensio.GENSIO_ACC_CONTROL_LPORT, "0") sa = SyncEvent() (io, time) = a.accept_s_timeout(o, sa, 1) if io != None or time != 0: raise Exception("accept_s_timeout didn't time out") sg = SyncEvent() gensios_enabled.check_iostr_gensios("tcp") g = gensio.gensio(o, "tcp,localhost," + port, sg) g.open(sg) (io, time) = a.accept_s_timeout(o, sa, 1000) if io == None or time == 0: raise Exception("accept_s_timeout timed out") return
def __init__(self, o, io1str, accstr, tester, name=None, io1_dummy_write=None, do_close=True, expected_raddr=None, expected_acc_laddr=None, chunksize=10240, get_port=True, except_on_log=False): self.o = o self.except_on_log = except_on_log if (name): self.name = name else: self.name = accstr self.io2 = None self.waiter = gensio.waiter(o) gensios_enabled.check_iostr_gensios(accstr) self.acc = gensio.gensio_accepter(o, accstr, self) self.acc.startup() self.waiter.service(1) # Wait a bit for the accepter to start up. if get_port: port = self.acc.control(gensio.GENSIO_CONTROL_DEPTH_FIRST, True, gensio.GENSIO_ACC_CONTROL_LPORT, "0") else: port = "" io1str = io1str + port io1 = alloc_io(o, io1str, do_open=False, chunksize=chunksize) self.io1 = io1 if expected_acc_laddr: expected_acc_laddr = expected_acc_laddr + port if expected_raddr: expected_raddr = expected_raddr + port if expected_acc_laddr: check_laddr(self.acc, self.name, expected_acc_laddr) io1.open_s() if expected_raddr: check_raddr(io1, self.name, expected_raddr) if (io1_dummy_write): # For UDP, kick start things. io1.write(io1_dummy_write, None) self.wait() if (io1_dummy_write): self.io2.handler.set_compare(io1_dummy_write) if (self.io2.handler.wait_timeout(1000) == 0): raise Exception( ("%s: %s: " % ("test_accept", self.io2.handler.name)) + ("Timed out waiting for dummy read at byte %d" % self.io2.handler.compared)) tester(self.io1, self.io2) if do_close: self.close()
def alloc_io(o, iostr, do_open = True, chunksize = 10240): """Allocate an io instance with a HandlerData handler If do_open is True (default), open it, too. """ gensios_enabled.check_iostr_gensios(iostr) h = HandleData(o, iostr, chunksize = chunksize) if (do_open): h.io.open_s() return h.io
def __init__(self, o, iostr, io2str, io3str, tester, name = None, io1_dummy_write = None, CA=None, do_close = True, auth_begin_rv = gensio.GE_NOTSUP, expect_pw = None, expect_pw_rv = gensio.GE_NOTSUP, password = None, expect_remclose = True, use_port = True): self.o = o if (name): self.name = name else: self.name = iostr self.waiter = gensio.waiter(o) gensios_enabled.check_iostr_gensios(iostr) gensios_enabled.check_iostr_gensios(io2str) self.acc = gensio.gensio_accepter(o, iostr, self); self.acc.startup() self.acc2 = gensio.gensio_accepter(o, io2str, self); self.acc2.startup() if (use_port): port = self.acc.control(gensio.GENSIO_CONTROL_DEPTH_FIRST, True, gensio.GENSIO_ACC_CONTROL_LPORT, "0") io3str = io3str + port self.io1 = self.acc2.str_to_gensio(io3str, None); self.io2 = None self.CA = CA h = HandleData(o, io3str, io = self.io1, password = password, expect_remclose = expect_remclose) self.auth_begin_rv = auth_begin_rv self.expect_pw = expect_pw self.expect_pw_rv = expect_pw_rv try: self.io1.open_s() except: self.io1 = None self.close() raise self.io1.read_cb_enable(True) if (io1_dummy_write): # For UDP, kick start things. self.io1.write(io1_dummy_write, None) try: self.wait() except: self.close() raise if (io1_dummy_write): self.io2.handler.set_compare(io1_dummy_write) if (self.io2.handler.wait_timeout(1000) == 0): raise Exception(("%s: %s: " % ("test_accept", self.io2.handler.name)) + ("Timed out waiting for dummy read at byte %d" % self.io2.handler.compared)) tester(self.io1, self.io2) if do_close: self.close()
def test_sync_gensio(o): print("Testing basic sync I/O") gensios_enabled.check_iostr_gensios("echo") g = gensio.gensio(o, "echo(readbuf=10)", None) g.set_sync() g.open_s() # Basic write then read (count, time) = g.write_s("Hello", 1000) if count != 5 or time < 500: raise Exception("Invalid write return: %d %d\n" % (count, time)) (buf, time) = g.read_s(10, 1000) buf = buf.decode(encoding='utf8') if buf != "Hello" or time < 500: raise Exception("Invalid read return: '%s' %d\n" % (buf, time)) # This should time out, no data (buf, time) = g.read_s(10, 250) buf = buf.decode(encoding='utf8') if buf != "" or time != 0: raise Exception("Invalid read timeout return: '%s' %d\n" % (buf, time)) # This should time out, buffer is only 10 bytes per readbuf above (count, time) = g.write_s("HelloHelloHello", 250) if count != 10 or time != 0: raise Exception("Invalid write timeout return: %d %d\n" % (count, time)) # Read out what should have been written time = 1000 buf = "" while len(buf) < 10 and time >= 500: (tbuf, time) = g.read_s(10, time) buf = buf + tbuf.decode(encoding='utf8') if buf != "HelloHello" or time < 500: raise Exception("Invalid read return(2): '%s' %d\n" % (buf, time)) # This should time out, no data (buf, time) = g.read_s(10, 250) buf = buf.decode(encoding='utf8') if buf != "" or time != 0: raise Exception("Invalid read timeout return: '%s' %d\n" % (buf, time)) g.close_s() return
def __init__(self, o, io1str, accstr, tester, name = None, io1_dummy_write = None, do_close = True, expected_raddr = None, expected_acc_laddr = None, chunksize = 10240, get_port = True, except_on_log = False, is_sergensio = False): self.o = o self.except_on_log = except_on_log if (name): self.name = name else: self.name = accstr if debug: print("TestAccept " + self.name); self.io2 = None self.waiter = gensio.waiter(o) gensios_enabled.check_iostr_gensios(accstr) self.acc = gensio.gensio_accepter(o, accstr, self); if is_sergensio: sga = self.acc.cast_to_sergensio_acc() if not sga: raise Exception("Cast to sergensio_accepter failed"); ga = sga.cast_to_gensio_acc() del sga del ga else: sga = None try: sga = self.acc.cast_to_sergensio_acc() except: pass if sga: raise Exception("Cast to sergensio_accepter succeeded"); if debug: print("acc startup"); self.acc.startup() self.waiter.service(1) # Wait a bit for the accepter to start up. if get_port: port = self.acc.control(gensio.GENSIO_CONTROL_DEPTH_FIRST, True, gensio.GENSIO_ACC_CONTROL_LPORT, "0") else: port = "" io1str = io1str + port io1 = alloc_io(o, io1str, do_open = False, chunksize = chunksize) self.io1 = io1 if expected_acc_laddr: expected_acc_laddr = expected_acc_laddr + port if expected_raddr: expected_raddr = expected_raddr + port if expected_acc_laddr: check_laddr(self.acc, self.name, expected_acc_laddr) if debug: print("io1 open " + self.name); io1.open_s() if expected_raddr: check_raddr(io1, self.name, expected_raddr) if (io1_dummy_write): # For UDP, kick start things. io1.write(io1_dummy_write, None) if debug: print("wait 1 " + self.name); # Wait for the accept to happen if (self.wait_timeout(1000) == 0): raise Exception(("%s: %s: " % ("test_accept", self.name)) + ("Timed out waiting for initial connection")) if (io1_dummy_write): self.io2.handler.set_compare(io1_dummy_write) if (self.io2.handler.wait_timeout(1000) == 0): raise Exception(("%s: %s: " % ("test_accept", self.io2.handler.name)) + ("Timed out waiting for dummy read at byte %d" % self.io2.handler.compared)) tester(self.io1, self.io2) if do_close: self.close()