Beispiel #1
0
def test_available_in_range():
    sock = socket.socket()
    sock.bind(('', 0))
    sock.listen(1)
    port = sock.getsockname()[1]
    avail = available_in_range(port, port + 1)
    sock.close()
    assert port not in avail
Beispiel #2
0
 def _set_shipit_port(self):
     """finds an empty port for shipit"""
     shipit_port = self.get('shipit', 'port')
     if shipit_port:
         log.debug('shipit port: {0}'.format(shipit_port))
         return
     log.debug('shipit port is not defined, finding a random port.')
     port_range = int(self.get('port_ranges', 'range_size'))
     shipit_base_port = int(self.get('port_ranges', 'shipit'))
     _ports = ports.available_in_range(shipit_base_port,
                                       shipit_base_port + port_range)
     # random.sample(_ports, 1) returns a list
     shipit_port = str(random.sample(_ports, 1)[0])
     log.debug('shipit port: {0}'.format(shipit_port))
     self.set('shipit', 'port', shipit_port)
Beispiel #3
0
    def _set_master_ports(self):
        """finds three random ports for master (pb, ssh and http)"""
        # assuming that if http port is set, ssh and pb base ports are set too

        http_port = self.get('master', 'http_port')
        if http_port:
            log.debug("http port is set, ssh and pb base ports are set too")
            return
        # ports are not set so we need to pick up a random ports
        # this is the algorithm
        # (usually) http port is in range 8000-8999
        # ssh port == http_port - 1000
        # pb_port == http_poer + 1000
        port_range = int(self.get('port_ranges', 'range_size'))
        http_base_port = int(self.get('port_ranges', 'master_http'))
        ssh_base_port = int(self.get('port_ranges', 'master_ssh'))
        pb_base_port = int(self.get('port_ranges', 'master_pb'))
        _ports = ports.available_in_range(http_base_port,
                                          http_base_port + port_range)

        while True:
            if len(_ports) < 1:
                # no more ports to test
                break
            # sample returns a single element list
            http_port = random.sample(_ports, 1)[0]
            suffix = http_port - http_base_port
            # 8744 -> 744 (suffix)
            pb_port = pb_base_port + suffix
            ssh_port = ssh_base_port + suffix

            if not ports.in_use(pb_port) and not ports.in_use(ssh_port):
                # we have found 3 ports that fit into our algorithm!
                log.debug('master ports:')
                log.debug('http: {0}'.format(http_port))
                log.debug('ssh: {0}'.format(ssh_port))
                log.debug('pb: {0}'.format(pb_port))
                self.set('master', 'ssh_port', str(ssh_port))
                self.set('master', 'pb_port', str(pb_port))
                self.set('master', 'http_port', str(http_port))
                return
            # some of the ports was not free
            # discarding current port and picking up a new one
            _ports.discard(http_port)
        # giving up
        msg = "no available ports for your staging master. Giving up"
        raise ConfigError(msg)