usergrid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From snoopd...@apache.org
Subject [1/2] git commit: Fix intermittent test failure.
Date Mon, 17 Feb 2014 20:26:19 GMT
Repository: incubator-usergrid
Updated Branches:
  refs/heads/two-dot-o d9e0bf78f -> 6c3576368


Fix intermittent test failure.


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/5256c4a0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/5256c4a0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/5256c4a0

Branch: refs/heads/two-dot-o
Commit: 5256c4a0081c1f230810c435ec176a7b5a2b1a38
Parents: d9e0bf7
Author: Dave Johnson <dmjohnson@apigee.com>
Authored: Mon Feb 17 14:39:29 2014 -0500
Committer: Dave Johnson <dmjohnson@apigee.com>
Committed: Mon Feb 17 14:39:29 2014 -0500

----------------------------------------------------------------------
 .../collection/util/AvailablePortFinder.java    | 186 +++++++++++++++++++
 .../util/AvailablePortFinderTest.java           |  73 ++++++++
 2 files changed, 259 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5256c4a0/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinder.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinder.java
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinder.java
new file mode 100644
index 0000000..1ef2ee0
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinder.java
@@ -0,0 +1,186 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.usergrid.persistence.collection.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 <a href="http://mina.apache.org">Apache MINA Project</a>
+ * @see <a href="http://www.iana.org/assignments/port-numbers">IANA.org</a>
+ */
+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 java.util.Set} of currently available port numbers ({@link Integer}).
 This method is identical to
+     * <code>getAvailablePorts(MIN_PORT_NUMBER, MAX_PORT_NUMBER)</code>.
+     * <p/>
+     * WARNING: this can take a very long time.
+     */
+    public static Set<Integer> getAvailablePorts() {
+        return getAvailablePorts( MIN_PORT_NUMBER, MAX_PORT_NUMBER );
+    }
+
+
+    /**
+     * Gets an available port, MAY be outside of MIN_PORT_NUMBER to MAX_PORT_NUMBER range.

+     *
+     * @throws java.util.NoSuchElementException if there are no ports available
+     */
+    public static int getNextAvailable() {
+        ServerSocket serverSocket = null;
+
+        try {
+            // Here, we simply return an available port found by the system
+            serverSocket = new ServerSocket( 0 );
+            int port = serverSocket.getLocalPort();
+
+            // Don't forget to close the socket...
+            serverSocket.close();
+
+            return port;
+        }
+        catch ( IOException ioe ) {
+            throw new NoSuchElementException( ioe.getMessage() );
+        }
+    }
+
+
+    /**
+     * Gets the next available port starting at a port.
+     *
+     * @param fromPort the port to scan for availability
+     *
+     * @throws java.util.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 java.util.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 <code>fromPort</code> if greater than <code>toPort</code>.
+     */
+    public static Set<Integer> 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<Integer> result = new TreeSet<Integer>();
+
+        for ( int i = fromPort; i <= toPort; i++ ) {
+            ServerSocket s = null;
+
+            try {
+                s = new ServerSocket( i );
+                result.add( new Integer( i ) );
+            }
+            catch ( IOException e ) {
+                // Do nothing
+            }
+            finally {
+                if ( s != null ) {
+                    try {
+                        s.close();
+                    }
+                    catch ( IOException e ) {
+                        /* should not be thrown */
+                    }
+                }
+            }
+        }
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5256c4a0/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinderTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinderTest.java
b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinderTest.java
new file mode 100644
index 0000000..ceccbc3
--- /dev/null
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/util/AvailablePortFinderTest.java
@@ -0,0 +1,73 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.usergrid.persistence.collection.util;
+
+import java.util.Set;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class AvailablePortFinderTest {
+
+    /**
+     * Test of getAvailablePorts method, of class AvailablePortFinder.
+     */
+    @Test
+    public void testGetAvailablePorts_0args() {
+        Set<Integer> result = AvailablePortFinder.getAvailablePorts();
+        assertTrue( !result.isEmpty() );
+    }
+
+    /**
+     * Test of getNextAvailable method, of class AvailablePortFinder.
+     */
+    @Test
+    public void testGetNextAvailable_0args() {
+        int result = AvailablePortFinder.getNextAvailable();
+        assertTrue( result > 0 );
+    }
+
+    /**
+     * Test of getNextAvailable method, of class AvailablePortFinder.
+     */
+    @Test
+    public void testGetNextAvailable_int() {
+        int result = AvailablePortFinder.getNextAvailable( 2000 );
+        assertTrue( result > 2000 );
+    }
+
+    /**
+     * Test of available method, of class AvailablePortFinder.
+     */
+    @Test
+    public void testAvailable() {
+        int port = 2000;
+        boolean result = AvailablePortFinder.available( port );
+        assertTrue( result );
+    }
+
+    /**
+     * Test of getAvailablePorts method, of class AvailablePortFinder.
+     */
+    @Test
+    public void testGetAvailablePorts_int_int() {
+        Set<Integer> result = AvailablePortFinder.getAvailablePorts( 1000, 2000 );
+        assertTrue( !result.isEmpty() );
+    }
+    
+}


Mime
View raw message