def testUnbindPortNumberV6(self): if not has_dual_stack(): return printDualStackSkipped() p = PortNumberGenerator.next(bind=True) self.assertNotBound( bindV4(ip='::1', port=p, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=p) self.assertBoundAndUnbind( bindV6(ip='::1', port=p, protocol='tcp', reuse=False) ) # Same IP-version, protocol, host, port combination: basically testing bindV6's close happened. for protocol in ['tcp', 'udp']: self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind( bindV4(ip='0.0.0.0', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind( bindV6(ip='::1', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind( bindV6(ip='::', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind( bindV6(ip='::1', port=p, protocol=protocol, reuse=False, ipV6Only=False)) self.assertBoundAndUnbind( bindV6(ip='::', port=p, protocol=protocol, reuse=False, ipV6Only=False))
def testUnbindPortNumberV4(self): p = PortNumberGenerator.next(bind=True) self.assertNotBound(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=p) self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False)) self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False)) # Same IP-version, protocol, host, port combination: basically testing bindV4's close happened. self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=False)) self.assertBoundAndUnbind(bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=False)) self.assertBoundAndUnbind(bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=False))
def testBindPortRangeNumberGiven(self): port = PortNumberGenerator.next(blockSize=2) port2 = port + 1 PortNumberGenerator.bind(port=port, blockSize=2) self.assertNotBound(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) self.assertNotBound(bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=port, blockSize=2) self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True))
def testBindPortNumberGiven(self): port, close = attemptBinding(bindPort=0); close() PortNumberGenerator.bind(port=port) self.assertNotBound(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) if has_dual_stack(): self.assertNotBound(bindV6(ip='::1', port=port, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=port) self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) if has_dual_stack(): self.assertBoundAndUnbind(bindV6(ip='::1', port=port, protocol='tcp', reuse=True))
def testBindPortNumbersGeneratedV4(self): p = PortNumberGenerator.next(bind=True) self.assertTrue(0 < p < 65536) for reuse in [True, False]: self.assertNotBound( bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=reuse)) self.assertNotBound( bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=reuse)) self.assertNotBound( bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=reuse)) self.assertNotBound( bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=reuse)) PortNumberGenerator.unbind(p)
def testBindPortRangeNumberGiven(self): port = PortNumberGenerator.next(blockSize=2) port2 = port + 1 PortNumberGenerator.bind(port=port, blockSize=2) self.assertNotBound( bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) self.assertNotBound( bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=port, blockSize=2) self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True))
def testBindPortNumberGiven(self): port, close = attemptBinding(bindPort=0) close() PortNumberGenerator.bind(port=port) self.assertNotBound( bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) if has_dual_stack(): self.assertNotBound( bindV6(ip='::1', port=port, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=port) self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True)) if has_dual_stack(): self.assertBoundAndUnbind( bindV6(ip='::1', port=port, protocol='tcp', reuse=True))
def testUnbindPortNumberV6(self): if not has_dual_stack(): return printDualStackSkipped() p = PortNumberGenerator.next(bind=True) self.assertNotBound(bindV4(ip='::1', port=p, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=p) self.assertBoundAndUnbind(bindV6(ip='::1', port=p, protocol='tcp', reuse=False)) # Same IP-version, protocol, host, port combination: basically testing bindV6's close happened. for protocol in ['tcp', 'udp']: self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind(bindV4(ip='0.0.0.0', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind(bindV6(ip='::1', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind(bindV6(ip='::', port=p, protocol=protocol, reuse=False)) self.assertBoundAndUnbind(bindV6(ip='::1', port=p, protocol=protocol, reuse=False, ipV6Only=False)) self.assertBoundAndUnbind(bindV6(ip='::', port=p, protocol=protocol, reuse=False, ipV6Only=False))
def testUnbindPortNumberV4(self): p = PortNumberGenerator.next(bind=True) self.assertNotBound( bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=True)) PortNumberGenerator.unbind(port=p) self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False)) self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False) ) # Same IP-version, protocol, host, port combination: basically testing bindV4's close happened. self.assertBoundAndUnbind( bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=False)) self.assertBoundAndUnbind( bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=False)) self.assertBoundAndUnbind( bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=False))
def testBindPortNumberGivenKeepsOldUsedPortsOnFailure(self): port1 = PortNumberGenerator.next() port2 = PortNumberGenerator.next(blockSize=2) port3 = port2 + 1 PortNumberGenerator.bind(port3) # Overlap with already bind port: port3. self.assertEqual(set([port1, port2, port3]), PortNumberGenerator._usedPorts) self.assertEqual(set([port3]), set(PortNumberGenerator._bound.keys())) try: PortNumberGenerator.bind(port2, blockSize=2) except RuntimeError as e: self.assertEqual('Port(s) already bound', str(e)) else: self.fail() self.assertEqual(set([port1, port2, port3]), PortNumberGenerator._usedPorts) self.assertEqual(set([port3]), set(PortNumberGenerator._bound.keys())) # Overlap with bound port: port3. PortNumberGenerator.unbind(port=port3) _port, close = attemptBinding(bindPort=port3) self.assertTrue(_port) self.assertEqual(set(), set(PortNumberGenerator._bound.keys())) try: PortNumberGenerator.bind(port2, blockSize=2) except RuntimeError as e: self.assertEqual('Port(s) are not free!', str(e)) else: self.fail() self.assertEqual(set([port1, port2, port3]), PortNumberGenerator._usedPorts) self.assertEqual(set(), set(PortNumberGenerator._bound.keys())) close() # Cleanup
def testUnbindUnboundPortNumber(self): PortNumberGenerator.unbind(port=4321)
def testUnbindUnboundPortNumber(self): PortNumberGenerator.unbind(port=4321)