def testOSAssignedPorts(self):
        self.last_assigned_port = None

        def error_for_explicit_ports(port, socket_type, socket_proto):
            # Only successfully return a port if an OS-assigned port is
            # requested, or if we're checking that the last OS-assigned port
            # is unused on the other protocol.
            if port == 0 or port == self.last_assigned_port:
                self.last_assigned_port = self._bind(port, socket_type,
                                                     socket_proto)
                return self.last_assigned_port
            else:
                return None

        with mock.patch.object(portpicker, 'bind', error_for_explicit_ports):
            # Without server, this can be little flaky, so check that it
            # passes most of the time.
            ports = 0
            for _ in range(100):
                try:
                    port = portpicker._pick_unused_port_without_server()
                except portpicker.NoFreePortFoundError:
                    continue
                self.assertTrue(self.IsUnusedTCPPort(port))
                self.assertTrue(self.IsUnusedUDPPort(port))
                ports += 1
            self.assertGreater(ports, 95)
Beispiel #2
0
 def testRandomlyChosenPorts(self):
     # Unless this box is under an overwhelming socket load, this test
     # will heavily exercise the "pick a port randomly" part of the
     # port picking code, but may never hit the "OS assigns a port"
     # code.
     for _ in range(100):
         port = portpicker._pick_unused_port_without_server()
         self.assertTrue(self.IsUnusedTCPPort(port))
         self.assertTrue(self.IsUnusedUDPPort(port))
 def pickUnusedPortWithoutServer(self):
     # Try a few times to pick a port, to avoid flakiness and to make sure
     # the code path we want was exercised.
     for _ in range(5):
         try:
             port = portpicker._pick_unused_port_without_server()
         except portpicker.NoFreePortFoundError:
             continue
         else:
             self.assertTrue(self.IsUnusedTCPPort(port))
             self.assertTrue(self.IsUnusedUDPPort(port))
             return
     self.fail("Failed to find a free port")
Beispiel #4
0
    def testPickPortsWithError(self):
        r = random.Random()

        def bind_with_error(port, socket_type, socket_proto):
            # 95% failure rate means both port picking methods will be
            # exercised.
            if int(r.uniform(0, 20)) == 0:
                return self._bind(port, socket_type, socket_proto)
            else:
                return None

        with mock.patch.object(portpicker, 'bind', bind_with_error):
            for _ in range(100):
                port = portpicker._pick_unused_port_without_server()
                self.assertTrue(self.IsUnusedTCPPort(port))
                self.assertTrue(self.IsUnusedUDPPort(port))
Beispiel #5
0
    def testOSAssignedPorts(self):
        self.last_assigned_port = None

        def error_for_explicit_ports(port, socket_type, socket_proto):
            # Only successfully return a port if an OS-assigned port is
            # requested, or if we're checking that the last OS-assigned port
            # is unused on the other protocol.
            if port == 0 or port == self.last_assigned_port:
                self.last_assigned_port = self._bind(port, socket_type,
                                                     socket_proto)
                return self.last_assigned_port
            else:
                return None

        with mock.patch.object(portpicker, 'bind', error_for_explicit_ports):
            for _ in range(100):
                port = portpicker._pick_unused_port_without_server()
                self.assertTrue(self.IsUnusedTCPPort(port))
                self.assertTrue(self.IsUnusedUDPPort(port))
 def testRandomlyChosenPorts(self):
     # Unless this box is under an overwhelming socket load, this test
     # will heavily exercise the "pick a port randomly" part of the
     # port picking code, but may never hit the "OS assigns a port"
     # code.
     ports = 0
     for _ in range(100):
         try:
             port = portpicker._pick_unused_port_without_server()
         except portpicker.NoFreePortFoundError:
             # Without the portserver, pick_unused_port can sometimes fail
             # to find a free port. Check that it passes most of the time.
             continue
         self.assertTrue(self.IsUnusedTCPPort(port))
         self.assertTrue(self.IsUnusedUDPPort(port))
         ports += 1
     # Getting a port shouldn't have failed very often, even on machines
     # with a heavy socket load.
     self.assertGreater(ports, 95)