All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.everrest.assured.util.AvailablePortFinder Maven / Gradle / Ivy

Go to download

Testng listener that deploy mock rest services on Jetty with Everrest and tested with rest-assured

There is a newer version: 1.15.0
Show newest version
/*
 * Copyright (c) 2012-2016 Codenvy, S.A.
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *   Codenvy, S.A. - initial API and implementation
 */
package org.everrest.assured.util;


import java.io.IOException;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.TreeSet;

/**
 * Finds currently available server ports.
 *
 * @author Apache MINA Project
 * @see IANA.org
 */
public class AvailablePortFinder {
    /** The minimum number of server port number. */
    public static final int MIN_PORT_NUMBER = 1;
    /** The maximum number of server port number. */
    public static final int MAX_PORT_NUMBER = 49151;

    /** Creates a new instance. */
    private AvailablePortFinder() {
        // Do nothing
    }

    /**
     * Returns the {@link Set} of currently available port numbers (
     * {@link Integer}). This method is identical to
     * getAvailablePorts(MIN_PORT_NUMBER, MAX_PORT_NUMBER).
     * 

* WARNING: this can take a very long time. */ public static Set getAvailablePorts() { return getAvailablePorts(MIN_PORT_NUMBER, MAX_PORT_NUMBER); } /** * Gets the next available port starting at the lowest port number. * * @throws NoSuchElementException * if there are no ports available */ public static int getNextAvailable() { return getNextAvailable(MIN_PORT_NUMBER); } /** * Gets the next available port starting at a port. * * @param fromPort * the port to scan for availability * @throws NoSuchElementException * if there are no ports available */ public static int getNextAvailable(int fromPort) { if (fromPort < MIN_PORT_NUMBER || fromPort > MAX_PORT_NUMBER) { throw new IllegalArgumentException("Invalid start port: " + fromPort); } for (int i = fromPort; i <= MAX_PORT_NUMBER; i++) { if (available(i)) { return i; } } throw new NoSuchElementException("Could not find an available port " + "above " + fromPort); } /** * Checks to see if a specific port is available. * * @param port * the port to check for availability */ public static boolean available(int port) { if (port < MIN_PORT_NUMBER || port > MAX_PORT_NUMBER) { throw new IllegalArgumentException("Invalid start port: " + port); } ServerSocket ss = null; DatagramSocket ds = null; try { ss = new ServerSocket(port); ss.setReuseAddress(true); ds = new DatagramSocket(port); ds.setReuseAddress(true); return true; } catch (IOException e) { // Do nothing } finally { if (ds != null) { ds.close(); } if (ss != null) { try { ss.close(); } catch (IOException e) { /* should not be thrown */ } } } return false; } /** * Returns the {@link Set} of currently avaliable port numbers ( * {@link Integer}) between the specified port range. * * @throws IllegalArgumentException * if port range is not between {@link #MIN_PORT_NUMBER} and * {@link #MAX_PORT_NUMBER} or fromPort if greater * than toPort. */ public static Set getAvailablePorts(int fromPort, int toPort) { if (fromPort < MIN_PORT_NUMBER || toPort > MAX_PORT_NUMBER || fromPort > toPort) { throw new IllegalArgumentException("Invalid port range: " + fromPort + " ~ " + toPort); } Set result = new TreeSet(); for (int i = fromPort; i <= toPort; i++) { ServerSocket s = null; try { s = new ServerSocket(i); result.add(Integer.valueOf(i)); } catch (IOException e) { // Do nothing } finally { if (s != null) { try { s.close(); } catch (IOException e) { /* should not be thrown */ } } } } return result; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy