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])
def setUp(self): self.server = Server() self.rc = RoutineContainer(self.server.scheduler)
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()
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()
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)
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 ])
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 ])
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)
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()