예제 #1
0
 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
예제 #2
0
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
예제 #3
0
    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()
예제 #4
0
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
예제 #5
0
 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()
예제 #6
0
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
예제 #7
0
    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()