def test_remove(self): s1, s2 = socketpair() fd = s2.fileno() mp = MultiPoll(get_hub().loop, fd) cbargs = [] called = Event() def callback(arg=0): def _callback(fd, events): cbargs.append((fd, events, arg)) called.set() return _callback h1 = mp.add_callback(READABLE, callback(0)) check_mpoll(mp) h2 = mp.add_callback(READABLE, callback(1)) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE, 0), (fd, READABLE, 1)]) del cbargs[:]; called.clear() mp.remove_callback(h1) check_mpoll(mp) called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE, 1)]) mp.remove_callback(h2) check_mpoll(mp) mp.close() check_mpoll(mp) s1.close(); s2.close()
def test_multiple(self): s1, s2 = socketpair() fd = s2.fileno() mp = MultiPoll(get_hub().loop, fd) cbargs = [] called = Event() def callback(arg=0): def _callback(fd, events): cbargs.append((fd, events, arg)) called.set() return _callback mp.add_callback(READABLE, callback(0)) check_mpoll(mp) mp.add_callback(READABLE, callback(1)) check_mpoll(mp) mp.add_callback(WRITABLE, callback(2)) check_mpoll(mp) mp.add_callback(WRITABLE, callback(3)) check_mpoll(mp) called.wait(0.1) self.assertEqual(cbargs, [(fd, WRITABLE, 2), (fd, WRITABLE, 3)]) del cbargs[:]; called.clear() s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE, 0), (fd, READABLE, 1), (fd, WRITABLE, 2), (fd, WRITABLE, 3)]) self.assertEqual(s2.recv(10), b'x') mp.close() check_mpoll(mp) s1.close(); s2.close()
def test_update(self): s1, s2 = socketpair() fd = s2.fileno() mp = MultiPoll(get_hub().loop, fd) cbargs = [] called = Event() def callback(fd, events): cbargs.append((fd, events)) called.set() h1 = mp.add_callback(READABLE, callback) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE)]) del cbargs[:]; called.clear() mp.update_callback(h1, READABLE|WRITABLE) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE|WRITABLE)]) del cbargs[:]; called.clear() mp.update_callback(h1, WRITABLE) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, WRITABLE)]) del cbargs[:]; called.clear() mp.update_callback(h1, 0) check_mpoll(mp) s1.send(b'x') called.wait(0.01) self.assertEqual(cbargs, []) mp.close() check_mpoll(mp) s1.close(); s2.close()
def test_remove(self): s1, s2 = socketpair() fd = s2.fileno() mp = MultiPoll(get_hub().loop, fd) cbargs = [] called = Event() def callback(arg=0): def _callback(fd, events): cbargs.append((fd, events, arg)) called.set() return _callback h1 = mp.add_callback(READABLE, callback(0)) check_mpoll(mp) h2 = mp.add_callback(READABLE, callback(1)) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE, 0), (fd, READABLE, 1)]) del cbargs[:] called.clear() mp.remove_callback(h1) check_mpoll(mp) called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE, 1)]) mp.remove_callback(h2) check_mpoll(mp) mp.close() check_mpoll(mp) s1.close() s2.close()
def test_multiple(self): s1, s2 = socketpair() fd = s2.fileno() mp = MultiPoll(get_hub().loop, fd) cbargs = [] called = Event() def callback(arg=0): def _callback(fd, events): cbargs.append((fd, events, arg)) called.set() return _callback mp.add_callback(READABLE, callback(0)) check_mpoll(mp) mp.add_callback(READABLE, callback(1)) check_mpoll(mp) mp.add_callback(WRITABLE, callback(2)) check_mpoll(mp) mp.add_callback(WRITABLE, callback(3)) check_mpoll(mp) called.wait(0.1) self.assertEqual(cbargs, [(fd, WRITABLE, 2), (fd, WRITABLE, 3)]) del cbargs[:] called.clear() s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE, 0), (fd, READABLE, 1), (fd, WRITABLE, 2), (fd, WRITABLE, 3)]) self.assertEqual(s2.recv(10), b'x') mp.close() check_mpoll(mp) s1.close() s2.close()
def test_update(self): s1, s2 = socketpair() fd = s2.fileno() mp = MultiPoll(get_hub().loop, fd) cbargs = [] called = Event() def callback(fd, events): cbargs.append((fd, events)) called.set() h1 = mp.add_callback(READABLE, callback) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE)]) del cbargs[:] called.clear() mp.update_callback(h1, READABLE | WRITABLE) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, READABLE | WRITABLE)]) del cbargs[:] called.clear() mp.update_callback(h1, WRITABLE) check_mpoll(mp) s1.send(b'x') called.wait(0.1) self.assertEqual(cbargs, [(fd, WRITABLE)]) del cbargs[:] called.clear() mp.update_callback(h1, 0) check_mpoll(mp) s1.send(b'x') called.wait(0.01) self.assertEqual(cbargs, []) mp.close() check_mpoll(mp) s1.close() s2.close()