Beispiel #1
0
 def _test_limiter(limit, expected_result, *numbers):
     scheduler = Scheduler()
     rA = RoutineContainer(scheduler)
     rB = RoutineContainer(scheduler)
     limiter = RateLimiter(limit, rA)
     counter = [0, 0]
     result = []
     async def _record():
         first = True
         while True:
             await rA.do_events()
             if counter[0] == 0:
                 break
             result.append((counter[0], counter[1]))
             counter[0] = 0
             counter[1] = 0
     async def _limited(use = 1):
         await limiter.limit(use)
         counter[0] += 1
         counter[1] += use
     async def _starter():
         for t in numbers:
             if isinstance(t, tuple):
                 for use in t:
                     rB.subroutine(_limited(use))
             else:
                 for _ in range(t):
                     rB.subroutine(_limited())
             await rB.do_events()
     rA.subroutine(_record(), False)
     rB.subroutine(_starter())
     scheduler.main()
     self.assertEqual(result, expected_result)
Beispiel #2
0
    def testSelfConnectionUdp(self):
        c1 = Client('udp://localhost:199', self.protocolClient, self.scheduler)
        c2 = Client('pudp://localhost:199', self.protocolServer,
                    self.scheduler)
        r = RoutineContainer(self.scheduler, True)
        ret = bytearray()

        def mainA():
            m = TestDataEvent.createMatcher()
            while True:
                yield (m, )
                if r.event.connection is c2:
                    ret.extend(b'A')
                else:
                    ret.extend(b'B')

        r.main = mainA
        r.start()

        def waitAndStart(c):
            for m in r.waitWithTimeout(0.5):
                yield m
            c.start()

        r.subroutine(waitAndStart(c1))
        c2.start()
        self.scheduler.main()
        self.assertEqual(ret, b'ABABABABABABABABABAB')
Beispiel #3
0
 def testSemaphore(self):
     rc = RoutineContainer(self.server.scheduler)
     obj = [0]
     def routineLock(key):
         l = Lock(key, rc.scheduler)
         for m in l.lock(rc):
             yield m
         t = obj[0]
         for m in rc.waitWithTimeout(0.5):
             yield m
         obj[0] = t + 1
         l.unlock()
     def main_routine():
         smp = Semaphore('testobj', 2, rc.scheduler)
         smp.create()
         for m in rc.executeAll([routineLock('testobj'),
                                 routineLock('testobj'),
                                 routineLock('testobj'),
                                 routineLock('testobj')], retnames = ()):
             yield m
         for m in smp.destroy(rc):
             yield m
     rc.subroutine(main_routine())
     self.server.serve()
     self.assertEqual(obj[0], 2)
Beispiel #4
0
    def testSemaphore(self):
        rc = RoutineContainer(self.server.scheduler)
        obj = [0]

        async def routineLock(key):
            l = Lock(key, rc.scheduler)
            await l.lock(rc)
            t = obj[0]
            await rc.do_events()
            obj[0] = t + 1
            l.unlock()

        async def main_routine():
            smp = Semaphore('testobj', 2, rc.scheduler)
            smp.create()
            await rc.execute_all([
                routineLock('testobj'),
                routineLock('testobj'),
                routineLock('testobj'),
                routineLock('testobj')
            ])
            await smp.destroy(rc)

        rc.subroutine(main_routine())
        self.server.serve()
        self.assertEqual(obj[0], 2)
Beispiel #5
0
 def __init__(self, server):
     Module.__init__(self, server)
     self._managed_objs = {}
     self._watches = {}
     self._watchedkeys = set()
     self._requests = []
     self._transactno = 0
     self._stale = False
     self._updatekeys = set()
     self._update_version = {}
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self._update
     self.routines.append(self.apiroutine)
     self.createAPI(api(self.mget, self.apiroutine),
                    api(self.get, self.apiroutine),
                    api(self.mgetonce, self.apiroutine),
                    api(self.getonce, self.apiroutine),
                    api(self.mwatch, self.apiroutine),
                    api(self.watch, self.apiroutine),
                    api(self.munwatch, self.apiroutine),
                    api(self.unwatch, self.apiroutine),
                    api(self.transact, self.apiroutine),
                    api(self.watchlist),
                    api(self.walk, self.apiroutine)
                    )
Beispiel #6
0
 def testServerClientSsl(self):
     c1 = Client('ssl://localhost:199', self.protocolClient, self.scheduler, 'testcerts/client.key', 'testcerts/client.crt', 'testcerts/root.crt')
     s1 = TcpServer('lssl://localhost:199', self.protocolServer, self.scheduler, 'testcerts/server.key', 'testcerts/server.crt', 'testcerts/root.crt')
     r = RoutineContainer(self.scheduler, True)
     ret = bytearray()
     def mainA():
         m = TestDataEvent.createMatcher()
         stopped = False
         while True:
             yield (m,)
             if r.event.connection is c1:
                 ret.extend(b'B')
             else:
                 ret.extend(b'A')
             if not stopped:
                 for m in s1.shutdown():
                     yield m
                 stopped = True
     r.main = mainA
     r.start()
     s1.start()
     def waitAndStart(c):
         for m in r.waitWithTimeout(0.5):
             yield m
         c.start()
     r.subroutine(waitAndStart(c1))
     self.scheduler.main()
     self.assertEqual(ret, b'ABABABABABABABABABAB')
Beispiel #7
0
 def __init__(self, server):
     Module.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.client = ZooKeeperClient(self.apiroutine, self.serverlist)
     self.connections.append(self.client)
     self.apiroutine.main = self.main
     self.routines.append(self.apiroutine)
Beispiel #8
0
 def testSelfConnectionUnixDgram(self):
     if not hasattr(socket, 'AF_UNIX'):
         print('Skip UNIX socket test because not supported')
         return
     try:
         os.remove('/var/run/unixsocktestudp1.sock')
     except Exception:
         pass
     try:
         os.remove('/var/run/unixsocktestudp2.sock')
     except Exception:
         pass
     c1 = Client('dunix:/var/run/unixsocktestudp2.sock', self.protocolClient, self.scheduler, bindaddress = ((socket.AF_UNIX, '/var/run/unixsocktestudp1.sock'),))
     c2 = Client('pdunix:/var/run/unixsocktestudp2.sock', self.protocolServer, self.scheduler)
     r = RoutineContainer(self.scheduler, True)
     ret = bytearray()
     def mainA():
         m = TestDataEvent.createMatcher()
         while True:
             yield (m,)
             if r.event.connection is c2:
                 ret.extend(b'A')
             else:
                 ret.extend(b'B')
     r.main = mainA
     r.start()
     def waitAndStart(c):
         for m in r.waitWithTimeout(0.5):
             yield m
         c.start()
     r.subroutine(waitAndStart(c1))
     c2.start()
     self.scheduler.main()
     self.assertEqual(ret, b'ABABABABABABABABABAB')
Beispiel #9
0
 def __init__(self, server):
     Module.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self._manage_conns
     self.routines.append(self.apiroutine)
     self.managed_conns = {}
     self.managed_systemids = {}
     self.managed_bridges = {}
     self.managed_routines = []
     self.endpoint_conns = {}
     self.createAPI(api(self.getconnection, self.apiroutine),
                    api(self.waitconnection, self.apiroutine),
                    api(self.getdatapathids, self.apiroutine),
                    api(self.getalldatapathids, self.apiroutine),
                    api(self.getallconnections, self.apiroutine),
                    api(self.getbridges, self.apiroutine),
                    api(self.getbridge, self.apiroutine),
                    api(self.getbridgebyuuid, self.apiroutine),
                    api(self.waitbridge, self.apiroutine),
                    api(self.waitbridgebyuuid, self.apiroutine),
                    api(self.getsystemids, self.apiroutine),
                    api(self.getallsystemids, self.apiroutine),
                    api(self.getconnectionbysystemid, self.apiroutine),
                    api(self.waitconnectionbysystemid, self.apiroutine),
                    api(self.getconnectionsbyendpoint, self.apiroutine),
                    api(self.getconnectionsbyendpointname, self.apiroutine),
                    api(self.getendpoints, self.apiroutine),
                    api(self.getallendpoints, self.apiroutine),
                    api(self.getallbridges, self.apiroutine),
                    api(self.getbridgeinfo, self.apiroutine),
                    api(self.waitbridgeinfo, self.apiroutine))
     self._synchronized = False
Beispiel #10
0
    def testBeginlock(self):
        rc = RoutineContainer(self.server.scheduler)
        obj = [0]

        def routineLock(key):
            l = Lock(key, rc.scheduler)
            locked = l.beginlock(rc)
            if not locked:
                for m in rc.waitWithTimeout(1.0):
                    yield m
                locked = l.trylock()
                if not locked:
                    raise ValueError('Not locked')
            t = obj[0]
            for m in rc.waitWithTimeout(0.5):
                yield m
            obj[0] = t + 1
            l.unlock()
            for m in rc.doEvents():
                yield m
            for m in l.lock(rc):
                yield m
            t = obj[0]
            for m in rc.waitWithTimeout(1.0):
                yield m
            obj[0] = t + 1
            l.unlock()

        rc.subroutine(routineLock('testobj'))
        rc.subroutine(routineLock('testobj'))
        self.server.serve()
        self.assertEqual(obj[0], 4)
Beispiel #11
0
    def testBeginlock2(self):
        rc = RoutineContainer(self.server.scheduler)
        obj = [0]

        async def routineLock(key):
            l = Lock(key, rc.scheduler)
            locked = l.beginlock(rc)
            if not locked:
                await rc.wait_with_timeout(0.2)
                await l.lock(rc)
            t = obj[0]
            await rc.do_events()
            obj[0] = t + 1
            l.unlock()
            await rc.do_events()
            await l.lock(rc)
            t = obj[0]
            if t != 2:
                obj[0] = t - 1
            l.unlock()

        rc.subroutine(routineLock('testobj'))
        rc.subroutine(routineLock('testobj'))
        self.server.serve()
        self.assertEqual(obj[0], 2)
Beispiel #12
0
 def __init__(self, server):
     FlowBase.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self._main
     self.routines.append(self.apiroutine)
     self._flowupdaters = {}
     self._extra_arps = {}
Beispiel #13
0
    def __init__(self, server):
        '''
        Constructor
        '''
        Module.__init__(self, server)
        self._ce_matcher = ConsoleEvent.createMatcher()
        self.apiroutine = RoutineContainer(self.scheduler)
        self.apiroutine.main = self._service_routine
        self._restore_console_event = threading.Event()

        @generator_to_async(True, False)
        def proxy(event, matcher):
            while True:
                events = self.sendEventQueue.get()
                if events is None:
                    break
                yield events

        @async_to_async(True, False)
        @async_processor
        def processor(event, matcher, queueout):
            if event.type == 'initproxy':
                proxy(event, matcher, queueout)

        self.connector = Connector(processor, (self._ce_matcher, ),
                                   self.scheduler, False)
        self.routines.append(self.apiroutine)
        self.routines.append(self.connector)
Beispiel #14
0
    def testBlock(self):
        scheduler = Scheduler()
        scheduler.queue.addSubQueue(10, RoutineControlEvent.createMatcher())
        scheduler.queue.addSubQueue(1, TestConsumerEvent.createMatcher(),
                                    'consumer', 5, 5)
        rA = RoutineContainer(scheduler)
        output = bytearray()

        def mainA():
            rA.subroutine(mainB(), daemon=True)
            for i in range(0, 10):
                for ms in rA.waitForSend(TestConsumerEvent(rA.mainroutine)):
                    yield ms
                output.extend(b'A')

        def mainB():
            for m in rA.doEvents():
                yield m
            matcher = TestConsumerEvent.createMatcher(producer=rA.mainroutine)
            while True:
                yield (matcher, )
                rA.event.canignore = True
                output.extend(b'B')

        def mainC():
            for m in rA.doEvents():
                yield m
            output.extend(b'C')

        rA.main = mainA
        rA.start()
        rA.subroutine(mainC())
        scheduler.main()
        self.assertEqual(output, b'AAAAACBABABABABABBBBB')
Beispiel #15
0
 def __init__(self, server):
     super(NetworkNativeDriver, self).__init__(server)
     self.app_routine = RoutineContainer(self.scheduler)
     self.app_routine.main = self._main
     self.routines.append(self.app_routine)
     self.createAPI(
         publicapi(self.createphysicalnetworks,
                   criteria=lambda networks, type: type == 'native'),
         publicapi(self.updatephysicalnetworks,
                   criteria=lambda type, networks: type == 'native'),
         publicapi(self.deletephysicalnetworks,
                   criteria=lambda type, networks: type == 'native'),
         publicapi(self.createphysicalports,
                   criteria=lambda type, ports: type == 'native'),
         publicapi(
             self.updatephysicalports,
             criteria=lambda phynettype, ports: phynettype == 'native'),
         publicapi(
             self.deletephysicalports,
             criteria=lambda phynettype, ports: phynettype == 'native'),
         publicapi(
             self.createlogicalnetworks,
             criteria=lambda phynettype, networks: phynettype == 'native'),
         publicapi(
             self.updatelogicalnetworks,
             criteria=lambda phynettype, networks: phynettype == 'native'),
         publicapi(
             self.deletelogicalnetworks,
             criteria=lambda phynettype, networks: phynettype == "native"),
         #used in IOprocessing module
         publicapi(self.createioflowparts,
                   criteria=lambda connection, logicalnetwork, physicalport,
                   logicalnetworkid, physicalportid: logicalnetwork.
                   physicalnetwork.type == "native"))
Beispiel #16
0
    def testLoopConsumer(self):
        scheduler = Scheduler()
        scheduler.queue.addSubQueue(10, RoutineControlEvent.createMatcher())
        scheduler.queue.addSubQueue(1, TestConsumerEvent.createMatcher(),
                                    'consumer', 5, 5)
        rA = RoutineContainer(scheduler)
        output = bytearray()

        def mainA():
            rA.subroutine(mainB(), True, 'mainB', True)
            matcher = TestConsumerEvent.createMatcher(rA.mainB)
            for i in range(0, 10):
                for ms in rA.waitForSend(TestConsumerEvent(rA.mainroutine)):
                    yield ms
                output.extend(b'A')
                yield (matcher, )

        def mainB():
            matcher = TestConsumerEvent.createMatcher(producer=rA.mainroutine)
            while True:
                yield (matcher, )
                rA.event.canignore = True
                output.extend(b'B')
                for ms in rA.waitForSend(
                        TestConsumerEvent(rA.mainB, canignore=True)):
                    yield ms

        rA.main = mainA
        rA.start()
        scheduler.main()
        self.assertEqual(output, b'ABABABABABABABABABAB')
Beispiel #17
0
 def __init__(self, server):
     Module.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self._manage_conns
     self.routines.append(self.apiroutine)
     self.managed_conns = {}
     self.endpoint_conns = {}
     self.table_modules = set()
     self._acquiring = False
     self._acquire_updated = False
     self._lastacquire = None
     self._synchronized = False
     self.createAPI(api(self.getconnections, self.apiroutine),
                    api(self.getconnection, self.apiroutine),
                    api(self.waitconnection, self.apiroutine),
                    api(self.getdatapathids, self.apiroutine),
                    api(self.getalldatapathids, self.apiroutine),
                    api(self.getallconnections, self.apiroutine),
                    api(self.getconnectionsbyendpoint, self.apiroutine),
                    api(self.getconnectionsbyendpointname, self.apiroutine),
                    api(self.getendpoints, self.apiroutine),
                    api(self.getallendpoints, self.apiroutine),
                    api(self.acquiretable, self.apiroutine),
                    api(self.unacquiretable, self.apiroutine),
                    api(self.lastacquiredtables))
Beispiel #18
0
 def __init__(self, server):
     super(NetworkVxlanDriver, self).__init__(server)
     self.app_routine = RoutineContainer(self.scheduler)
     self.app_routine.main = self._main
     self.routines.append(self.app_routine)
     self.createAPI(
         publicapi(self.createphysicalnetworks,
                   criteria=lambda networks, type: type == 'vxlan'),
         publicapi(self.updatephysicalnetworks,
                   criteria=lambda type, networks: type == 'vxlan'),
         publicapi(self.deletephysicalnetworks,
                   criteria=lambda type, networks: type == 'vxlan'),
         publicapi(self.createphysicalports,
                   criteria=lambda type, ports: type == 'vxlan'),
         publicapi(
             self.updatephysicalports,
             criteria=lambda phynettype, ports: phynettype == 'vxlan'),
         publicapi(
             self.deletephysicalports,
             criteria=lambda phynettype, ports: phynettype == 'vxlan'),
         publicapi(
             self.createlogicalnetworks,
             criteria=lambda phynettype, networks: phynettype == 'vxlan'),
         publicapi(
             self.updatelogicalnetworks,
             criteria=lambda phynettype, networks: phynettype == 'vxlan'),
         publicapi(
             self.deletelogicalnetworks,
             criteria=lambda phynettype, networks: phynettype == "vxlan"))
Beispiel #19
0
 def testCAVerify3(self):
     c1 = Client('ssl://localhost:199', self.protocolClient, self.scheduler, None, None, 'testcerts/root.crt')
     c2 = Client('pssl://localhost:199', self.protocolServer, self.scheduler, 'testcerts/server.key','testcerts/server.crt','testcerts/root.crt')
     r = RoutineContainer(self.scheduler, True)
     ret = bytearray()
     def mainA():
         m = TestDataEvent.createMatcher()
         while True:
             yield (m,)
             if r.event.connection is c2:
                 ret.extend(b'A')
             else:
                 ret.extend(b'B')
     self.notconnected = False
     def notConnected(connection):
         if connection is c1:
             self.notconnected = True
         if False:
             yield
     self.protocolClient.notconnected = notConnected
     r.main = mainA
     r.start()
     def waitAndStart(c):
         for m in r.waitWithTimeout(0.5):
             yield m
         c.start()
     r.subroutine(waitAndStart(c1))
     c2.start()
     self.scheduler.main()
     self.assertTrue(self.notconnected)
     self.assertEqual(ret, b'')
Beispiel #20
0
 def testBlock(self):
     scheduler = Scheduler()
     scheduler.queue.addSubQueue(10, RoutineControlEvent.createMatcher())
     scheduler.queue.addSubQueue(1, TestConsumerEvent.createMatcher(), 'consumer', 5, 5)
     rA = RoutineContainer(scheduler)
     output = bytearray()
     async def mainA():
         rA.subroutine(mainB(), daemon = True)
         for _ in range(0,10):
             await rA.wait_for_send(TestConsumerEvent(rA.mainroutine))
             output.extend(b'A')
     async def mainB():
         await rA.do_events()
         matcher = TestConsumerEvent.createMatcher(producer=rA.mainroutine)
         while True:
             ev = await matcher
             ev.canignore = True
             output.extend(b'B')
     async def mainC():
         await rA.do_events()
         output.extend(b'C')
     rA.main = mainA
     rA.start()
     rA.subroutine(mainC())
     scheduler.main()
     self.assertEqual(output, b'AAAAACBABABABABABBBBB')
Beispiel #21
0
 def __init__(self, server):
     FlowBase.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self._main
     self.routines.append(self.apiroutine)
     self._flowupdaters = {}
     self._extra_arps = {}
     self.createAPI(api(self.createproxyarp), api(self.removeproxyarp))
Beispiel #22
0
 def __init__(self, server):
     Module.__init__(self, server)
     self.protocol = ZooKeeper()
     self.client = Client(self.url, self.protocol, self.scheduler)
     self.connections.append(self.client)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self.main
     self.routines.append(self.apiroutine)
Beispiel #23
0
 def __init__(self, server):
     Module.__init__(self, server)
     taskpool = TaskPool(self.scheduler)
     self.taskpool = taskpool
     self.routines.append(self.taskpool)
     self.routines.append(NetworkPlugin(self))
     self.apiroutine = RoutineContainer(self.scheduler)
     self._reqid = 0
     self.createAPI(api(self.getdockerinfo, self.apiroutine))
Beispiel #24
0
 async def destroy(self, container=None):
     """
     Destroy the created subqueue to change the behavior back to Lock
     """
     if container is None:
         container = RoutineContainer(self.scheduler)
     if self.queue is not None:
         await container.syscall_noreturn(
             syscall_removequeue(self.scheduler.queue, self.queue))
         self.queue = None
Beispiel #25
0
 def __init__(self, server):
     '''
     Constructor
     '''
     Module.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.createAPI(api(self.start, self.apiroutine),
                    api(self.create, self.apiroutine),
                    api(self.get, self.apiroutine),
                    api(self.destroy, self.apiroutine))
Beispiel #26
0
 def __init__(self, server):
     Module.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     def _main():
         try:
             for m in self.run(*self.args, **self.kwargs):
                 yield m
         finally:
             self.scheduler.quit()
     self.apiroutine.main = _main
     self.routines.append(self.apiroutine)
Beispiel #27
0
 def __init__(self, server, protocolclass):
     Module.__init__(self, server)
     self._protocolclass = protocolclass
     self.apiroutine = RoutineContainer(self.scheduler)
     self.managed_connections = set()
     self._createServers(self, '')
     self.createAPI(api(self.getservers),
                    api(self.stoplisten, self.apiroutine),
                    api(self.startlisten, self.apiroutine),
                    api(self.updateconfig, self.apiroutine),
                    api(self.getconnections))
Beispiel #28
0
    def __init__(self, server):
        Module.__init__(self, server)
        self.apiroutine = RoutineContainer(self.scheduler)

        async def _main():
            try:
                return await self.run(*self.args, **self.kwargs)
            finally:
                self.scheduler.quit()

        self.apiroutine.main = _main
        self.routines.append(self.apiroutine)
Beispiel #29
0
 def __init__(self, server):
     '''
     Constructor
     '''
     Module.__init__(self, server)
     self.timeoutroutine = RoutineContainer(self.scheduler)
     self.timeoutroutine.main = self._timeout
     self.db = {}
     self.routines.append(self.timeoutroutine)
     self.createAPI(api(self.get), api(self.set), api(self.delete),
                    api(self.mget), api(self.mgetwithcache), api(self.mset),
                    api(self.update), api(self.mupdate),
                    api(self.updateall), api(self.updateallwithtime))
Beispiel #30
0
 def __init__(self, server):
     Module.__init__(self, server)
     self.apiroutine = RoutineContainer(self.scheduler)
     self.apiroutine.main = self._manage_ports
     self.routines.append(self.apiroutine)
     self.managed_ports = {}
     self.createAPI(api(self.getports, self.apiroutine),
                    api(self.getallports, self.apiroutine),
                    api(self.getportbyno, self.apiroutine),
                    api(self.waitportbyno, self.apiroutine),
                    api(self.getportbyname, self.apiroutine),
                    api(self.waitportbyname, self.apiroutine),
                    api(self.resync, self.apiroutine))
     self._synchronized = False