Beispiel #1
0
 def testModuleLoad(self):
     logging.basicConfig()
     manager['server.startup'] = ('tests.gensrc.testmodule1.TestModule1', 'tests.gensrc.testmodule2.TestModule2')
     s = Server()
     import tests.gensrc
     basedir = tests.gensrc.__path__[0]
     with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
         f.write(module1)
     with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
         f.write(module2)
     # Run unittest discover may already load the module, reload it
     import tests.gensrc.testmodule1
     import tests.gensrc.testmodule2
     removeCache(tests.gensrc.testmodule1)
     removeCache(tests.gensrc.testmodule2)
     reload(tests.gensrc.testmodule1)
     reload(tests.gensrc.testmodule2)
     # Sometimes the timestamp is not working, make sure python re-compile the source file
     r = RoutineContainer(s.scheduler)
     apiResults = []
     def testproc():
         yield (ModuleLoadStateChanged.createMatcher(),)
         for m in callAPI(r, "testmodule1", "method1", {}):
             yield m
         apiResults.append(r.retvalue)
         for m in callAPI(r, "testmodule1", "method2", {'a' : 1, 'b' : 2}):
             yield m
         apiResults.append(r.retvalue)
         try:
             for m in callAPI(r, "testmodule1", "method4", {}):
                 yield m
             apiResults.append(None)
         except ValueError as exc:
             apiResults.append(exc.args[0])
         from .gensrc.testmodule2 import ModuleTestEvent2
         matcher = ModuleTestEvent2.createMatcher()
         self.event = False
         def proc2():            
             for m in callAPI(r, "testmodule1", "method3", {'a' : 1, 'b' : 2}):
                 yield m
         def callback(event, matcher):
             self.event = event
             if False:
                 yield
         for m in r.withCallback(proc2(), callback, matcher):
             yield m
         if not self.event:
             for m in r.waitWithTimeout(0.1, matcher):
                 yield m
             if not r.timeout:
                 self.event = r.event
         if self.event:
             apiResults.append((self.event.result, self.event.version))
         else:
             apiResults.append(False)
         for m in callAPI(r, "testmodule1", "discover", {}):
             yield m
         apiResults.append(r.retvalue)
         with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
             f.write(module1v2)
         for m in s.moduleloader.delegate(s.moduleloader.reloadModules(['tests.gensrc.testmodule1.TestModule1'])):
             yield m
         for m in callAPI(r, "testmodule1", "method1", {}):
             yield m
         apiResults.append(r.retvalue)
         matcher = ModuleTestEvent2.createMatcher()
         self.event = False
         def proc2_2():
             for m in callAPI(r, "testmodule1", "method3", {'a' : 1, 'b' : 2}):
                 yield m
         def callback_2(event, matcher):
             self.event = event
             if False:
                 yield
         for m in r.withCallback(proc2_2(), callback_2, matcher):
             yield m
         if not self.event:
             for m in r.waitWithTimeout(0.1, matcher):
                 yield m
             if not r.timeout:
                 self.event = r.event
         if self.event:
             apiResults.append((self.event.result, self.event.version))
         else:
             apiResults.append(False)
         with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
             f.write(module2v2)
         for m in s.moduleloader.delegate(s.moduleloader.reloadModules(['tests.gensrc.testmodule2.TestModule2'])):
             yield m
         matcher = ModuleTestEvent2.createMatcher()
         self.event = False
         def proc2_3():
             for m in callAPI(r, "testmodule1", "method3", {'a' : 1, 'b' : 2}):
                 yield m
         def callback_3(event, matcher):
             self.event = event
             if False:
                 yield
         for m in r.withCallback(proc2_3(), callback_3, matcher):
             yield m
         if not self.event:
             for m in r.waitWithTimeout(0.1, matcher):
                 yield m
             if not r.timeout:
                 self.event = r.event
         if self.event:
             apiResults.append((self.event.result, self.event.version))
         else:
             apiResults.append(False)
         with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
             f.write(module1v3)
         with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
             f.write(module2v3)
         for m in s.moduleloader.delegate(s.moduleloader.reloadModules(['tests.gensrc.testmodule1.TestModule1','tests.gensrc.testmodule2.TestModule2'])):
             yield m
         for m in callAPI(r, "testmodule1", "method1", {}):
             yield m
         apiResults.append(r.retvalue)
         matcher = ModuleTestEvent2.createMatcher()
         self.event = False
         def proc2_4():
             for m in callAPI(r, "testmodule1", "method3", {'a' : 1, 'b' : 2}):
                 yield m
         def callback_4(event, matcher):
             self.event = event
             if False:
                 yield
         for m in r.withCallback(proc2_4(), callback_4, matcher):
             yield m
         if not self.event:
             for m in r.waitWithTimeout(0.1, matcher):
                 yield m
             if not r.timeout:
                 self.event = r.event
         if self.event:
             apiResults.append((self.event.result, self.event.version))
         else:
             apiResults.append(False)
         try:
             for m in r.executeWithTimeout(1.0, callAPI(r, "testmodule1", "notexists", {})):
                 yield m
         except ValueError:
             apiResults.append(True)
         except:
             apiResults.append(False)
         else:
             apiResults.append(False)
         for m in s.moduleloader.delegate(s.moduleloader.unloadByPath("tests.gensrc.testmodule1.TestModule1")):
             yield m
     r.main = testproc
     r.start()
     s.serve()
     print(repr(apiResults))
     self.assertEqual(apiResults, ['version1', 3, 'test', (3, 'version1'),
                                   {'method1':'Run method1', 'method2':'Run method2', 'method3':'Run method3', 'method4': 'Run method4', 'discover':'Discover API definitions. Set details=true to show details'},
                                   'version2', (3, 'version1'), (3, 'version2'), 'version3', (3, 'version3'), True])
Beispiel #2
0
 def setUp(self):
     self.server = Server()
     self.rc = RoutineContainer(self.server.scheduler)
Beispiel #3
0
                table_id = currdef.OFPTT_ALL,
                out_port = currdef.OFPP_NONE,
                match = currdef.ofp_match.new(wildcards=currdef.OFPFW_ALL))
        openflow_reply = await of_proto.querymultipart(req, connection, self)
        for msg in openflow_reply:
            pprint(common.dump(msg, dumpextra = True, typeinfo = common.DUMPTYPE_FLAT, tostr=True))
        req = currdef.nx_flow_stats_request.new(table_id = currdef.OFPTT_ALL, out_port = currdef.OFPP_NONE)
        openflow_reply = await of_proto.querymultipart(req, connection, self)
        for msg in openflow_reply:
            pprint(common.dump(msg, dumpextra = True, typeinfo = common.DUMPTYPE_FLAT, tostr=True))
        req = currdef.ofp_msg.new()
        req.header.type = currdef.OFPT_GET_CONFIG_REQUEST
        openflow_reply = await of_proto.querywithreply(req, connection, self)
        pprint(common.dump(openflow_reply, tostr=True))
        await mgt_conn.shutdown(False)

if __name__ == '__main__':
    logging.basicConfig()
    s = Server()
    #s.scheduler.logger.setLevel(logging.DEBUG)
    #of_proto._logger.setLevel(logging.DEBUG)
    #of_proto.debugging = True
    #NamedStruct._logger.setLevel(logging.DEBUG)
    bridge = sys.argv[1]
    routine = MainRoutine(s.scheduler)
    routine.start()
    mgt_conn = Client('unix:/var/run/openvswitch/' + bridge + '.mgmt', of_proto, s.scheduler)
    mgt_conn.start()
    s.serve()
    
Beispiel #4
0
            for m in http.requestwithresponse(self, conn, b'www.baidu.com', b'/favicon.ico', b'GET', [], keepalive = False):
                yield m
            for r in self.http_responses:
                print('Response received:')
                print(r.status)
                print()
                print('Headers:')
                for k,v in r.headers:
                    print('%r: %r' % (k,v))
                print()
                print('Body:')
                if r.stream is None:
                    print('<Empty>')
                else:
                    for m in r.stream.read(self):
                        yield m
                    print('<Data: %d bytes>' % (len(self.data),))

if __name__ == '__main__':
    logging.basicConfig()
    s = Server()
    s.scheduler.debugging = True
    s.scheduler.logger.setLevel(logging.DEBUG)
    #Http.debugging = True
    #Http._logger.setLevel(logging.DEBUG)
    http.createmessagequeue(s.scheduler)
    routine = MainRoutine(s.scheduler)
    routine.start()
    s.serve()
    
Beispiel #5
0
class Test(unittest.TestCase):
    def setUp(self):
        self.server = Server()
        self.rc = RoutineContainer(self.server.scheduler)

    def tearDown(self):
        pass

    def testStream_1(self):
        s = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m

        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_2(self):
        s = Stream(True)
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(u'abcde', rc):
                yield m
            for m in s.write(u'defgh', rc):
                yield m
            for m in s.write(u'ijklm', rc, True):
                yield m

        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [u'abcdedefghijklm'])

    def testStream_3(self):
        s = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdede\n', b'f\rgh\r\n', b'ijklm'])

    def testStream_4(self):
        s = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 3):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(
            retvalue,
            [b'abcd', b'ede', b'\n', b'f\rgh', b'\r\n', b'ijkl', b'm'])

    def testStream_5(self):
        s = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 3):
                yield m
            retvalue.append(rc.data)
            for m in s.read(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in s.read(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            try:
                for m in s.readline(rc, 4):
                    yield m
                retvalue.append(rc.data)
            except EOFError:
                retvalue.append(None)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(
            retvalue, [b'abcd', b'ede', b'\nf\rg', b'h\r\ni', b'jklm', None])

    def testStream_6(self):
        s = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            def read_next():
                data = s.readonce()
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce()
                rc.retvalue = data

            for m in s.write(b'abcde', rc, buffering=False):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next():
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue,
                         [b'abcde', b'de\nf\rgh\r\n', b'ijklm', None])

    def testStream_7(self):
        s = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            def read_next(size=None):
                data = s.readonce(size)
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce(size)
                rc.retvalue = data

            for m in s.write(b'abcde', rc, buffering=False):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next(4):
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(
            retvalue,
            [b'abcd', b'e', b'de\nf', b'\rgh\r', b'\n', b'ijkl', b'm', None])

    def testStream_8(self):
        s = Stream()
        s2 = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            rc.subroutine(s2.copyTo(s, rc, False))

            def read_next(size=None):
                data = s.readonce(size)
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce(size)
                rc.retvalue = data

            for m in s2.write(b'abcde', rc, buffering=False):
                yield m
            for m in s2.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in s2.write(b'ijklm', rc, True):
                yield m
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next(4):
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(
            retvalue,
            [b'abcd', b'e', b'de\nf', b'\rgh\r', b'\n', b'ijkl', b'm', None])

    def testStream_9(self):
        s = Stream()
        s2 = Stream()
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m

        def read_routine():
            for m in s2.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        rc.subroutine(s.copyTo(s2, rc))
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_10(self):
        s = Stream(isunicode=True, encoders=[unicode_decoder('utf-8')])
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m

        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [u'abcdedefghijklm'])

    def testStream_11(self):
        s = Stream(encoders=[unicode_encoder('utf-8')])
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(u'abcde', rc):
                yield m
            for m in s.write(u'defgh', rc):
                yield m
            for m in s.write(u'ijklm', rc, True):
                yield m

        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_12(self):
        s = Stream(isunicode=(str is not bytes),
                   encoders=[str_decoder('utf-8')])
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m

        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, ['abcdedefghijklm'])

    def testStream_13(self):
        s = Stream(encoders=[str_encoder('utf-8')])
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write('abcde', rc):
                yield m
            for m in s.write('defgh', rc):
                yield m
            for m in s.write('ijklm', rc, True):
                yield m

        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_14(self):
        s = Stream(encoders=[str_encoder('utf-8'), deflate_encoder()])
        s2 = Stream((str is not bytes),
                    encoders=[deflate_decoder(),
                              str_decoder('utf-8')])
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write('abcde', rc):
                yield m
            for m in s.write('defgh', rc):
                yield m
            for m in s.write('ijklm', rc, True):
                yield m

        def read_routine():
            for m in s2.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        rc.subroutine(s.copyTo(s2, rc))
        self.server.serve()
        self.assertEqual(retvalue, ['abcdedefghijklm'])

    def testStream_15(self):
        s = Stream(encoders=[str_encoder('utf-8'), gzip_encoder()])
        s2 = Stream((str is not bytes),
                    encoders=[gzip_decoder(),
                              str_decoder('utf-8')])
        retvalue = []
        rc = self.rc

        def write_routine():
            for m in s.write('abcde', rc):
                yield m
            for m in s.write('defgh', rc):
                yield m
            for m in s.write('ijklm', rc, True):
                yield m

        def read_routine():
            for m in s2.read(rc):
                yield m
            retvalue.append(rc.data)

        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        rc.subroutine(s.copyTo(s2, rc))
        self.server.serve()
        self.assertEqual(retvalue, ['abcdedefghijklm'])

    def testStream_16(self):
        s = Stream(splitsize=4)
        s2 = Stream(writebufferlimit=0)
        retvalue = []
        rc = self.rc

        def write_routine():
            rc.subroutine(s2.copyTo(s, rc, False))

            def read_next(size=None):
                data = s.readonce(size)
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce(size)
                rc.retvalue = data

            for m in s2.write(b'abcde', rc):
                yield m
            for m in s2.write(b'de\nf\rgh\r\n', rc):
                yield m
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in s2.write(b'ijklm', rc, True):
                yield m
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next():
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)

        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(
            retvalue,
            [b'abcd', b'e', b'de\nf', b'\rgh\r', b'\n', b'ijkl', b'm', None])

    def testStream_17(self):
        s = MemoryStream(b'abcdefg\nhijklmn\nopqrst\n')
        retvalue = []
        rc = self.rc

        def read_routine():
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
            retvalue.append(s.readonce())

        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdefg\n', b'hijklmn\nopqrst\n'])

    def testStream_18(self):
        fio, tmp = tempfile.mkstemp()
        try:
            os.close(fio)
            s = FileWriter(open(tmp, 'wb'))
            retvalue = []
            rc = self.rc

            def write_routine():
                for m in s.write(b'abcde\n', rc):
                    yield m
                for m in s.write(b'defgh', rc):
                    yield m
                for m in s.write(b'ijklm', rc, True):
                    yield m

            rc.subroutine(write_routine())
            self.server.serve()
            s = FileStream(open(tmp, 'rb'))

            def read_routine():
                with closing(s):
                    for m in s.readline(rc):
                        yield m
                    retvalue.append(rc.data)
                    for m in s.read(rc):
                        yield m
                    retvalue.append(rc.data)

            rc.subroutine(read_routine())
            self.server.serve()
            self.assertEqual(retvalue, [b'abcde\n', b'defghijklm'])
        finally:
            os.remove(tmp)
Beispiel #6
0
    def testModuleLoad(self):
        logging.basicConfig()
        manager['server.startup'] = ('tests.gensrc.testmodule1.TestModule1',
                                     'tests.gensrc.testmodule2.TestModule2')
        s = Server()
        import tests.gensrc
        basedir = tests.gensrc.__path__[0]
        with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
            f.write(module1)
        with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
            f.write(module2)
        # Run unittest discover may already load the module, reload it
        import tests.gensrc.testmodule1
        import tests.gensrc.testmodule2
        removeCache(tests.gensrc.testmodule1)
        removeCache(tests.gensrc.testmodule2)
        reload(tests.gensrc.testmodule1)
        reload(tests.gensrc.testmodule2)
        # Sometimes the timestamp is not working, make sure python re-compile the source file
        r = RoutineContainer(s.scheduler)
        apiResults = []

        def testproc():
            yield (ModuleLoadStateChanged.createMatcher(), )
            for m in callAPI(r, "testmodule1", "method1", {}):
                yield m
            apiResults.append(r.retvalue)
            for m in callAPI(r, "testmodule1", "method2", {'a': 1, 'b': 2}):
                yield m
            apiResults.append(r.retvalue)
            try:
                for m in callAPI(r, "testmodule1", "method4", {}):
                    yield m
                apiResults.append(None)
            except ValueError as exc:
                apiResults.append(exc.args[0])
            from .gensrc.testmodule2 import ModuleTestEvent2
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            def proc2():
                for m in callAPI(r, "testmodule1", "method3", {
                        'a': 1,
                        'b': 2
                }):
                    yield m

            def callback(event, matcher):
                self.event = event
                if False:
                    yield

            for m in r.withCallback(proc2(), callback, matcher):
                yield m
            if not self.event:
                for m in r.waitWithTimeout(0.1, matcher):
                    yield m
                if not r.timeout:
                    self.event = r.event
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            for m in callAPI(r, "testmodule1", "discover", {}):
                yield m
            apiResults.append(r.retvalue)
            with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
                f.write(module1v2)
            for m in s.moduleloader.delegate(
                    s.moduleloader.reloadModules(
                        ['tests.gensrc.testmodule1.TestModule1'])):
                yield m
            for m in callAPI(r, "testmodule1", "method1", {}):
                yield m
            apiResults.append(r.retvalue)
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            def proc2_2():
                for m in callAPI(r, "testmodule1", "method3", {
                        'a': 1,
                        'b': 2
                }):
                    yield m

            def callback_2(event, matcher):
                self.event = event
                if False:
                    yield

            for m in r.withCallback(proc2_2(), callback_2, matcher):
                yield m
            if not self.event:
                for m in r.waitWithTimeout(0.1, matcher):
                    yield m
                if not r.timeout:
                    self.event = r.event
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
                f.write(module2v2)
            for m in s.moduleloader.delegate(
                    s.moduleloader.reloadModules(
                        ['tests.gensrc.testmodule2.TestModule2'])):
                yield m
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            def proc2_3():
                for m in callAPI(r, "testmodule1", "method3", {
                        'a': 1,
                        'b': 2
                }):
                    yield m

            def callback_3(event, matcher):
                self.event = event
                if False:
                    yield

            for m in r.withCallback(proc2_3(), callback_3, matcher):
                yield m
            if not self.event:
                for m in r.waitWithTimeout(0.1, matcher):
                    yield m
                if not r.timeout:
                    self.event = r.event
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
                f.write(module1v3)
            with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
                f.write(module2v3)
            for m in s.moduleloader.delegate(
                    s.moduleloader.reloadModules([
                        'tests.gensrc.testmodule1.TestModule1',
                        'tests.gensrc.testmodule2.TestModule2'
                    ])):
                yield m
            for m in callAPI(r, "testmodule1", "method1", {}):
                yield m
            apiResults.append(r.retvalue)
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            def proc2_4():
                for m in callAPI(r, "testmodule1", "method3", {
                        'a': 1,
                        'b': 2
                }):
                    yield m

            def callback_4(event, matcher):
                self.event = event
                if False:
                    yield

            for m in r.withCallback(proc2_4(), callback_4, matcher):
                yield m
            if not self.event:
                for m in r.waitWithTimeout(0.1, matcher):
                    yield m
                if not r.timeout:
                    self.event = r.event
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            try:
                for m in r.executeWithTimeout(
                        1.0, callAPI(r, "testmodule1", "notexists", {})):
                    yield m
            except ValueError:
                apiResults.append(True)
            except Exception:
                apiResults.append(False)
            else:
                apiResults.append(False)
            for m in s.moduleloader.delegate(
                    s.moduleloader.unloadByPath(
                        "tests.gensrc.testmodule1.TestModule1")):
                yield m

        r.main = testproc
        r.start()
        s.serve()
        print(repr(apiResults))
        self.assertEqual(apiResults, [
            'version1', 3, 'test', (3, 'version1'), {
                'method1':
                'Run method1',
                'method2':
                'Run method2',
                'method3':
                'Run method3',
                'method4':
                'Run method4',
                'discover':
                'Discover API definitions. Set details=true to show details'
            }, 'version2', (3, 'version1'), (3, 'version2'), 'version3',
            (3, 'version3'), True
        ])
Beispiel #7
0
    def testModuleLoad(self):
        logging.basicConfig()
        manager['server.startup'] = ('tests.gensrc.testmodule1.TestModule1',
                                     'tests.gensrc.testmodule2.TestModule2')
        s = Server()
        import tests.gensrc
        basedir = tests.gensrc.__path__[0]
        with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
            f.write(module1)
        with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
            f.write(module2)
        # Run unittest discover may already load the module, reload it
        import tests.gensrc.testmodule1
        import tests.gensrc.testmodule2
        remove_cache(tests.gensrc.testmodule1)
        remove_cache(tests.gensrc.testmodule2)
        reload(tests.gensrc.testmodule1)
        reload(tests.gensrc.testmodule2)
        # Sometimes the timestamp is not working, make sure python re-compile the source file
        r = RoutineContainer(s.scheduler)
        apiResults = []

        async def testproc():
            await ModuleLoadStateChanged.createMatcher()
            apiResults.append(await call_api(r, "testmodule1", "method1", {}))
            apiResults.append(await call_api(r, "testmodule1", "method2", {
                'a': 1,
                'b': 2
            }))
            try:
                await call_api(r, "testmodule1", "method4", {})
                apiResults.append(None)
            except ValueError as exc:
                apiResults.append(exc.args[0])
            from .gensrc.testmodule2 import ModuleTestEvent2
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            async def proc2():
                return await call_api(r, "testmodule1", "method3", {
                    'a': 1,
                    'b': 2
                })

            def callback(event, matcher):
                self.event = event

            await r.with_callback(proc2(), callback, matcher)
            if not self.event:
                timeout, ev, m = await r.wait_with_timeout(0.1, matcher)
                if not timeout:
                    self.event = ev
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            apiResults.append(await call_api(r, "testmodule1", "discover", {}))
            with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
                f.write(module1v2)
            await s.moduleloader.reload_modules(
                ['tests.gensrc.testmodule1.TestModule1'])
            apiResults.append(await call_api(r, "testmodule1", "method1", {}))
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            async def proc2_2():
                return await call_api(r, "testmodule1", "method3", {
                    'a': 1,
                    'b': 2
                })

            def callback_2(event, matcher):
                self.event = event

            await r.with_callback(proc2_2(), callback_2, matcher)
            if not self.event:
                timeout, ev, m = await r.wait_with_timeout(0.1, matcher)
                if not timeout:
                    self.event = ev
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
                f.write(module2v2)
            await s.moduleloader.reload_modules(
                ['tests.gensrc.testmodule2.TestModule2'])
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            async def proc2_3():
                return await call_api(r, "testmodule1", "method3", {
                    'a': 1,
                    'b': 2
                })

            def callback_3(event, matcher):
                self.event = event

            await r.with_callback(proc2_3(), callback_3, matcher)
            if not self.event:
                timeout, ev, m = await r.wait_with_timeout(0.1, matcher)
                if not timeout:
                    self.event = ev
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            with open(os.path.join(basedir, 'testmodule1.py'), 'wb') as f:
                f.write(module1v3)
            with open(os.path.join(basedir, 'testmodule2.py'), 'wb') as f:
                f.write(module2v3)
            await s.moduleloader.reload_modules([
                'tests.gensrc.testmodule1.TestModule1',
                'tests.gensrc.testmodule2.TestModule2'
            ])
            apiResults.append(await call_api(r, "testmodule1", "method1", {}))
            matcher = ModuleTestEvent2.createMatcher()
            self.event = False

            async def proc2_4():
                return await call_api(r, "testmodule1", "method3", {
                    'a': 1,
                    'b': 2
                })

            def callback_4(event, matcher):
                self.event = event

            await r.with_callback(proc2_4(), callback_4, matcher)
            if not self.event:
                timeout, ev, m = await r.wait_with_timeout(0.1, matcher)
                if not timeout:
                    self.event = ev
            if self.event:
                apiResults.append((self.event.result, self.event.version))
            else:
                apiResults.append(False)
            try:
                await r.execute_with_timeout(
                    1.0, call_api(r, "testmodule1", "notexists", {}))
            except APIRejectedException:
                apiResults.append(True)
            except Exception:
                apiResults.append(False)
            else:
                apiResults.append(False)
            await s.moduleloader.unload_by_path(
                "tests.gensrc.testmodule1.TestModule1")

        r.main = testproc
        r.start()
        s.serve()
        print(repr(apiResults))
        self.assertEqual(apiResults, [
            'version1', 3, 'test', (3, 'version1'), {
                'method1':
                'Run method1',
                'method2':
                'Run method2',
                'method3':
                'Run method3',
                'method4':
                'Run method4',
                'discover':
                'Discover API definitions. Set details=true to show details'
            }, 'version2', (3, 'version1'), (3, 'version2'), 'version3',
            (3, 'version3'), True
        ])
Beispiel #8
0
 def setUp(self):
     self.server = Server()
     self.rc = RoutineContainer(self.server.scheduler)
Beispiel #9
0
class Test(unittest.TestCase):


    def setUp(self):
        self.server = Server()
        self.rc = RoutineContainer(self.server.scheduler)

    def tearDown(self):
        pass
    
    def testStream_1(self):
        s = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m
        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_2(self):
        s = Stream(True)
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(u'abcde', rc):
                yield m
            for m in s.write(u'defgh', rc):
                yield m
            for m in s.write(u'ijklm', rc, True):
                yield m
        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [u'abcdedefghijklm'])

    def testStream_3(self):
        s = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdede\n', b'f\rgh\r\n', b'ijklm'])

    def testStream_4(self):
        s = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 3):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcd',b'ede', b'\n', b'f\rgh', b'\r\n', b'ijkl', b'm'])
    
    def testStream_5(self):
        s = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 3):
                yield m
            retvalue.append(rc.data)
            for m in s.read(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.write(b'ijklm', rc, True):
                yield m
            for m in s.read(rc, 4):
                yield m
            retvalue.append(rc.data)
            for m in s.readline(rc, 4):
                yield m
            retvalue.append(rc.data)
            try:
                for m in s.readline(rc, 4):
                    yield m
                retvalue.append(rc.data)
            except EOFError:
                retvalue.append(None)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcd',b'ede', b'\nf\rg', b'h\r\ni', b'jklm', None])
    
    def testStream_6(self):
        s = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            def read_next():
                data = s.readonce()
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce()
                rc.retvalue = data
            for m in s.write(b'abcde', rc, buffering=False):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in s.write(b'ijklm', rc, True):
                yield m            
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next():
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcde', b'de\nf\rgh\r\n', b'ijklm', None])

    def testStream_7(self):
        s = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            def read_next(size = None):
                data = s.readonce(size)
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce(size)
                rc.retvalue = data
            for m in s.write(b'abcde', rc, buffering=False):
                yield m
            for m in s.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in s.write(b'ijklm', rc, True):
                yield m            
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next(4):
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcd', b'e',b'de\nf', b'\rgh\r', b'\n', b'ijkl', b'm', None])

    def testStream_8(self):
        s = Stream()
        s2 = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            rc.subroutine(s2.copyTo(s, rc, False))
            def read_next(size = None):
                data = s.readonce(size)
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce(size)
                rc.retvalue = data
            for m in s2.write(b'abcde', rc, buffering=False):
                yield m
            for m in s2.write(b'de\nf\rgh\r\n', rc, buffering=False):
                yield m
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in s2.write(b'ijklm', rc, True):
                yield m            
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next(4):
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next(4):
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcd', b'e',b'de\nf', b'\rgh\r', b'\n', b'ijkl', b'm', None])

    def testStream_9(self):
        s = Stream()
        s2 = Stream()
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m
        def read_routine():
            for m in s2.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        rc.subroutine(s.copyTo(s2, rc))
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_10(self):
        s = Stream(isunicode=True, encoders=[unicode_decoder('utf-8')])
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m
        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [u'abcdedefghijklm'])

    def testStream_11(self):
        s = Stream(encoders=[unicode_encoder('utf-8')])
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(u'abcde', rc):
                yield m
            for m in s.write(u'defgh', rc):
                yield m
            for m in s.write(u'ijklm', rc, True):
                yield m
        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_12(self):
        s = Stream(isunicode=(str is not bytes), encoders=[str_decoder('utf-8')])
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write(b'abcde', rc):
                yield m
            for m in s.write(b'defgh', rc):
                yield m
            for m in s.write(b'ijklm', rc, True):
                yield m
        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, ['abcdedefghijklm'])

    def testStream_13(self):
        s = Stream(encoders=[str_encoder('utf-8')])
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write('abcde', rc):
                yield m
            for m in s.write('defgh', rc):
                yield m
            for m in s.write('ijklm', rc, True):
                yield m
        def read_routine():
            for m in s.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdedefghijklm'])

    def testStream_14(self):
        s = Stream(encoders=[str_encoder('utf-8'), deflate_encoder()])
        s2 = Stream((str is not bytes), encoders=[deflate_decoder(), str_decoder('utf-8')])
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write('abcde', rc):
                yield m
            for m in s.write('defgh', rc):
                yield m
            for m in s.write('ijklm', rc, True):
                yield m
        def read_routine():
            for m in s2.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        rc.subroutine(s.copyTo(s2, rc))
        self.server.serve()
        self.assertEqual(retvalue, ['abcdedefghijklm'])
        
    def testStream_15(self):
        s = Stream(encoders=[str_encoder('utf-8'), gzip_encoder()])
        s2 = Stream((str is not bytes), encoders=[gzip_decoder(), str_decoder('utf-8')])
        retvalue = []
        rc = self.rc
        def write_routine():
            for m in s.write('abcde', rc):
                yield m
            for m in s.write('defgh', rc):
                yield m
            for m in s.write('ijklm', rc, True):
                yield m
        def read_routine():
            for m in s2.read(rc):
                yield m
            retvalue.append(rc.data)
        rc.subroutine(write_routine())
        rc.subroutine(read_routine())
        rc.subroutine(s.copyTo(s2, rc))
        self.server.serve()
        self.assertEqual(retvalue, ['abcdedefghijklm'])
        
    def testStream_16(self):
        s = Stream(splitsize=4)
        s2 = Stream(writebufferlimit=0)
        retvalue = []
        rc = self.rc
        def write_routine():
            rc.subroutine(s2.copyTo(s, rc, False))
            def read_next(size = None):
                data = s.readonce(size)
                while not data:
                    for m in s.prepareRead(rc):
                        yield m
                    data = s.readonce(size)
                rc.retvalue = data
            for m in s2.write(b'abcde', rc):
                yield m
            for m in s2.write(b'de\nf\rgh\r\n', rc):
                yield m
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in s2.write(b'ijklm', rc, True):
                yield m            
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            for m in read_next():
                yield m
            retvalue.append(rc.retvalue)
            try:
                for m in read_next():
                    yield m
                retvalue.append(rc.retvalue)
            except EOFError:
                retvalue.append(None)
        rc.subroutine(write_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcd', b'e',b'de\nf', b'\rgh\r', b'\n', b'ijkl', b'm', None])

    def testStream_17(self):
        s = MemoryStream(b'abcdefg\nhijklmn\nopqrst\n')
        retvalue = []
        rc = self.rc
        def read_routine():
            for m in s.readline(rc):
                yield m
            retvalue.append(rc.data)
            retvalue.append(s.readonce())
        rc.subroutine(read_routine())
        self.server.serve()
        self.assertEqual(retvalue, [b'abcdefg\n', b'hijklmn\nopqrst\n'])

    def testStream_18(self):
        fio, tmp = tempfile.mkstemp()
        try:
            os.close(fio)
            s = FileWriter(open(tmp, 'wb'))
            retvalue = []
            rc = self.rc
            def write_routine():
                for m in s.write(b'abcde\n', rc):
                    yield m
                for m in s.write(b'defgh', rc):
                    yield m
                for m in s.write(b'ijklm', rc, True):
                    yield m
            rc.subroutine(write_routine())
            self.server.serve()
            s = FileStream(open(tmp, 'rb'))
            def read_routine():
                with closing(s):
                    for m in s.readline(rc):
                        yield m
                    retvalue.append(rc.data)
                    for m in s.read(rc):
                        yield m
                    retvalue.append(rc.data)
            rc.subroutine(read_routine())
            self.server.serve()
            self.assertEqual(retvalue, [b'abcde\n', b'defghijklm'])
        finally:
            os.remove(tmp)
Beispiel #10
0
    def main(self):
        while True:

            connectEventMatcher = OpenflowConnectionStateEvent.createMatcher()
            yield (connectEventMatcher,)
           
            # here event must be connect event
            self.connectStateHandler(self.event)

if __name__ == '__main__':

   
    #logging.basicConfig(format='%(asctime)s-%(name)s-%(levelname)s : %(message)s',level=logging.DEBUG)
    logging.basicConfig(format='%(asctime)s-%(name)s-%(levelname)s : %(message)s')
    log = logging.getLogger('l2switch')
    log.setLevel(logging.DEBUG)

    of_proto.debuging = True
    
    #manager['server.debugging']=True
    loopServer = Server()
    loopServer.scheduler.logger.setLevel(logging.DEBUG)

    tcpServer = TcpServer("tcp://127.0.0.1",of_proto,loopServer.scheduler)
    tcpServer.start()
    
    switch = l2switch(loopServer.scheduler)
    switch.start()

    loopServer.serve()