diff --git a/pom.xml b/pom.xml
index c0b8219c0d8..02b18087273 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,9 @@
1.1.1
0.5
3.0
- 4.10
+
+ 4.11
+ 1.3
1.46
0.1.42
2.0.0
@@ -413,6 +415,12 @@
${cs.junit.version}
test
+
+ org.hamcrest
+ hamcrest-library
+ ${cs.hamcrest.version}
+ test
+
org.mockito
mockito-all
diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java
index c22e39aa94f..6350986a89f 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -44,13 +44,12 @@ import org.apache.commons.lang.SystemUtils;
import org.apache.commons.net.util.SubnetUtils;
import org.apache.log4j.Logger;
-import com.googlecode.ipv6.IPv6Address;
-import com.googlecode.ipv6.IPv6AddressRange;
-import com.googlecode.ipv6.IPv6Network;
-
import com.cloud.utils.IteratorUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.script.Script;
+import com.googlecode.ipv6.IPv6Address;
+import com.googlecode.ipv6.IPv6AddressRange;
+import com.googlecode.ipv6.IPv6Network;
public class NetUtils {
protected final static Logger s_logger = Logger.getLogger(NetUtils.class);
@@ -158,14 +157,6 @@ public class NetUtils {
return cidrList.toArray(new String[0]);
}
- private static boolean isWindows() {
- String os = System.getProperty("os.name");
- if (os != null && os.startsWith("Windows"))
- return true;
-
- return false;
- }
-
public static String getDefaultHostIp() {
if (SystemUtils.IS_OS_WINDOWS) {
Pattern pattern = Pattern.compile("\\s*0.0.0.0\\s*0.0.0.0\\s*(\\S*)\\s*(\\S*)\\s*");
diff --git a/utils/test/com/cloud/utils/net/NetUtilsTest.java b/utils/test/com/cloud/utils/net/NetUtilsTest.java
index d3e283cd91f..31838267d86 100644
--- a/utils/test/com/cloud/utils/net/NetUtilsTest.java
+++ b/utils/test/com/cloud/utils/net/NetUtilsTest.java
@@ -19,54 +19,90 @@
package com.cloud.utils.net;
+import static org.hamcrest.Matchers.anyOf;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
+import static org.hamcrest.Matchers.lessThanOrEqualTo;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
import java.math.BigInteger;
-import java.net.URI;
import java.util.SortedSet;
import java.util.TreeSet;
-import junit.framework.TestCase;
-
import org.apache.log4j.Logger;
import org.junit.Test;
import com.googlecode.ipv6.IPv6Address;
-public class NetUtilsTest extends TestCase {
+public class NetUtilsTest {
private static final Logger s_logger = Logger.getLogger(NetUtilsTest.class);
@Test
- public void testGetRandomIpFromCidr() {
+ public void testGetRandomIpFromCidrWithSize24() throws Exception {
String cidr = "192.168.124.1";
- long ip = NetUtils.getRandomIpFromCidr(cidr, 24, new TreeSet());
- assertEquals("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/24", cidr.substring(0, 12), NetUtils.long2Ip(ip)
- .substring(0, 12));
+ int size = 24;
+ int netCharacters = 12;
- ip = NetUtils.getRandomIpFromCidr(cidr, 16, new TreeSet());
- assertEquals("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/16", cidr.substring(0, 8), NetUtils.long2Ip(ip).substring(0, 8));
+ long ip = NetUtils.getRandomIpFromCidr(cidr, size, new TreeSet());
- ip = NetUtils.getRandomIpFromCidr(cidr, 8, new TreeSet());
- assertEquals("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/8", cidr.substring(0, 4), NetUtils.long2Ip(ip).substring(0, 4));
+ assertThat("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/" + size, cidr.substring(0, netCharacters), equalTo(NetUtils.long2Ip(ip)
+ .substring(0, netCharacters)));
+ }
+
+ @Test
+ public void testGetRandomIpFromCidrWithSize16() throws Exception {
+ String cidr = "192.168.124.1";
+ int size = 16;
+ int netCharacters = 8;
+
+ long ip = NetUtils.getRandomIpFromCidr(cidr, 16, new TreeSet());
+
+ assertThat("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/" + size, cidr.substring(0, netCharacters), equalTo(NetUtils.long2Ip(ip)
+ .substring(0, netCharacters)));
+ }
+
+ @Test
+ public void testGetRandomIpFromCidrWithSize8() throws Exception {
+ String cidr = "192.168.124.1";
+ int size = 8;
+ int netCharacters = 4;
+
+ long ip = NetUtils.getRandomIpFromCidr(cidr, 16, new TreeSet());
+
+ assertThat("The ip " + NetUtils.long2Ip(ip) + " retrieved must be within the cidr " + cidr + "/" + size, cidr.substring(0, netCharacters), equalTo(NetUtils.long2Ip(ip)
+ .substring(0, netCharacters)));
+ }
+
+ @Test
+ public void testGetRandomIpFromCidrUsignAvoid() throws Exception {
+ String cidr = "192.168.124.1";
+ int size = 30;
SortedSet avoid = new TreeSet();
- ip = NetUtils.getRandomIpFromCidr(cidr, 30, avoid);
- assertTrue("We should be able to retrieve an ip on the first call.", ip != -1);
+ long ip = NetUtils.getRandomIpFromCidr(cidr, size, avoid);
+ assertThat("We should be able to retrieve an ip on the first call.", ip, not(equalTo(-1L)));
avoid.add(ip);
- ip = NetUtils.getRandomIpFromCidr(cidr, 30, avoid);
- assertTrue("We should be able to retrieve an ip on the second call.", ip != -1);
- assertTrue("ip returned is not in the avoid list", !avoid.contains(ip));
+ ip = NetUtils.getRandomIpFromCidr(cidr, size, avoid);
+ assertThat("We should be able to retrieve an ip on the second call.", ip, not(equalTo(-1L)));
+ assertThat("ip returned is not in the avoid list", avoid, not(contains(ip)));
avoid.add(ip);
- ip = NetUtils.getRandomIpFromCidr(cidr, 30, avoid);
- assertTrue("We should be able to retrieve an ip on the third call.", ip != -1);
- assertTrue("ip returned is not in the avoid list", !avoid.contains(ip));
+ ip = NetUtils.getRandomIpFromCidr(cidr, size, avoid);
+ assertThat("We should be able to retrieve an ip on the third call.", ip, not(equalTo(-1L)));
+ assertThat("ip returned is not in the avoid list", avoid, not(contains(ip)));
avoid.add(ip);
-
- ip = NetUtils.getRandomIpFromCidr(cidr, 30, avoid);
+ ip = NetUtils.getRandomIpFromCidr(cidr, size, avoid);
assertEquals("This should be -1 because we ran out of ip addresses: " + ip, ip, -1);
}
@Test
- public void testVpnPolicy() {
+ public void testIsValidS2SVpnPolicy() {
assertTrue(NetUtils.isValidS2SVpnPolicy("aes128-sha1"));
assertTrue(NetUtils.isValidS2SVpnPolicy("3des-sha1"));
assertTrue(NetUtils.isValidS2SVpnPolicy("3des-sha1,aes256-sha1"));
@@ -81,22 +117,12 @@ public class NetUtilsTest extends TestCase {
assertFalse(NetUtils.isValidS2SVpnPolicy(",aes;modp1536,,,"));
}
- public void testIpv6() {
- assertTrue(NetUtils.isValidIpv6("fc00::1"));
- assertFalse(NetUtils.isValidIpv6(""));
- assertFalse(NetUtils.isValidIpv6(null));
- assertFalse(NetUtils.isValidIpv6("1234:5678::1/64"));
- assertTrue(NetUtils.isValidIp6Cidr("1234:5678::1/64"));
- assertFalse(NetUtils.isValidIp6Cidr("1234:5678::1"));
- assertEquals(NetUtils.getIp6CidrSize("1234:5678::1/32"), 32);
- assertEquals(NetUtils.getIp6CidrSize("1234:5678::1"), 0);
- BigInteger two = new BigInteger("2");
- assertEquals(NetUtils.countIp6InRange("1234:5678::1-1234:5678::2"), two);
- assertEquals(NetUtils.countIp6InRange("1234:5678::2-1234:5678::0"), null);
+ @Test
+ public void testGetIp6FromRange() {
assertEquals(NetUtils.getIp6FromRange("1234:5678::1-1234:5678::1"), "1234:5678::1");
for (int i = 0; i < 5; i++) {
String ip = NetUtils.getIp6FromRange("1234:5678::1-1234:5678::2");
- assertTrue(ip.equals("1234:5678::1") || ip.equals("1234:5678::2"));
+ assertThat(ip, anyOf(equalTo("1234:5678::1"), equalTo("1234:5678::2")));
s_logger.info("IP is " + ip);
}
String ipString = null;
@@ -106,49 +132,104 @@ public class NetUtilsTest extends TestCase {
ipString = NetUtils.getIp6FromRange(ipStart.toString() + "-" + ipEnd.toString());
s_logger.info("IP is " + ipString);
IPv6Address ip = IPv6Address.fromString(ipString);
- assertTrue(ip.compareTo(ipStart) >= 0);
- assertTrue(ip.compareTo(ipEnd) <= 0);
+ assertThat(ip, greaterThanOrEqualTo(ipStart));
+ assertThat(ip, lessThanOrEqualTo(ipEnd));
}
- //Test isIp6RangeOverlap
- assertFalse(NetUtils.isIp6RangeOverlap("1234:5678::1-1234:5678::ffff", "1234:5678:1::1-1234:5678:1::ffff"));
- assertTrue(NetUtils.isIp6RangeOverlap("1234:5678::1-1234:5678::ffff", "1234:5678::2-1234:5678::f"));
- assertTrue(NetUtils.isIp6RangeOverlap("1234:5678::f-1234:5678::ffff", "1234:5678::2-1234:5678::f"));
- assertFalse(NetUtils.isIp6RangeOverlap("1234:5678::f-1234:5678::ffff", "1234:5678::2-1234:5678::e"));
- assertFalse(NetUtils.isIp6RangeOverlap("1234:5678::f-1234:5678::f", "1234:5678::2-1234:5678::e"));
- //Test getNextIp6InRange
- String range = "1234:5678::1-1234:5678::8000:0000";
- assertEquals(NetUtils.getNextIp6InRange("1234:5678::8000:0", range), "1234:5678::1");
- assertEquals(NetUtils.getNextIp6InRange("1234:5678::7fff:ffff", range), "1234:5678::8000:0");
- assertEquals(NetUtils.getNextIp6InRange("1234:5678::1", range), "1234:5678::2");
- range = "1234:5678::1-1234:5678::ffff:ffff:ffff:ffff";
- assertEquals(NetUtils.getNextIp6InRange("1234:5678::ffff:ffff:ffff:ffff", range), "1234:5678::1");
- //Test isIp6InNetwork
- assertFalse(NetUtils.isIp6InNetwork("1234:5678:abcd::1", "1234:5678::/64"));
- assertTrue(NetUtils.isIp6InNetwork("1234:5678::1", "1234:5678::/64"));
- assertTrue(NetUtils.isIp6InNetwork("1234:5678::ffff:ffff:ffff:ffff", "1234:5678::/64"));
- assertTrue(NetUtils.isIp6InNetwork("1234:5678::", "1234:5678::/64"));
- //Test isIp6InRange
+ }
+
+ @Test
+ public void testCountIp6InRange() {
+ assertEquals(NetUtils.countIp6InRange("1234:5678::1-1234:5678::2"), new BigInteger("2"));
+ assertEquals(NetUtils.countIp6InRange("1234:5678::2-1234:5678::0"), null);
+ }
+
+ @Test
+ public void testGetIp6CidrSize() {
+ assertEquals(NetUtils.getIp6CidrSize("1234:5678::1/32"), 32);
+ assertEquals(NetUtils.getIp6CidrSize("1234:5678::1"), 0);
+ }
+
+ @Test
+ public void testIsValidIp6Cidr() {
+ assertTrue(NetUtils.isValidIp6Cidr("1234:5678::1/64"));
+ assertFalse(NetUtils.isValidIp6Cidr("1234:5678::1"));
+ }
+
+ @Test
+ public void testIsValidIpv6() {
+ assertTrue(NetUtils.isValidIpv6("fc00::1"));
+ assertFalse(NetUtils.isValidIpv6(""));
+ assertFalse(NetUtils.isValidIpv6(null));
+ assertFalse(NetUtils.isValidIpv6("1234:5678::1/64"));
+ }
+
+ @Test
+ public void testIsIp6InRange() {
assertTrue(NetUtils.isIp6InRange("1234:5678:abcd::1", "1234:5678:abcd::1-1234:5678:abcd::1"));
assertFalse(NetUtils.isIp6InRange("1234:5678:abcd::1", "1234:5678:abcd::2-1234:5678:abcd::1"));
assertFalse(NetUtils.isIp6InRange("1234:5678:abcd::1", null));
assertTrue(NetUtils.isIp6InRange("1234:5678:abcd::1", "1234:5678::1-1234:5679::1"));
}
- public void testPvlan() {
- URI uri = NetUtils.generateUriForPvlan("123", "456");
- assertTrue(uri.toString().equals("pvlan://123-i456"));
- assertTrue(NetUtils.getPrimaryPvlanFromUri(uri).equals("123"));
- assertTrue(NetUtils.getIsolatedPvlanFromUri(uri).equals("456"));
+ @Test
+ public void testIsIp6InNetwork() {
+ assertFalse(NetUtils.isIp6InNetwork("1234:5678:abcd::1", "1234:5678::/64"));
+ assertTrue(NetUtils.isIp6InNetwork("1234:5678::1", "1234:5678::/64"));
+ assertTrue(NetUtils.isIp6InNetwork("1234:5678::ffff:ffff:ffff:ffff", "1234:5678::/64"));
+ assertTrue(NetUtils.isIp6InNetwork("1234:5678::", "1234:5678::/64"));
}
- public void testIsSameIpRange() {
- //Test to check IP Range of 2 CIDRs
+ @Test
+ public void testGetNextIp6InRange() {
+ String range = "1234:5678::1-1234:5678::8000:0000";
+ assertEquals(NetUtils.getNextIp6InRange("1234:5678::8000:0", range), "1234:5678::1");
+ assertEquals(NetUtils.getNextIp6InRange("1234:5678::7fff:ffff", range), "1234:5678::8000:0");
+ assertEquals(NetUtils.getNextIp6InRange("1234:5678::1", range), "1234:5678::2");
+ range = "1234:5678::1-1234:5678::ffff:ffff:ffff:ffff";
+ assertEquals(NetUtils.getNextIp6InRange("1234:5678::ffff:ffff:ffff:ffff", range), "1234:5678::1");
+ }
+
+ @Test
+ public void testIsIp6RangeOverlap() {
+ assertFalse(NetUtils.isIp6RangeOverlap("1234:5678::1-1234:5678::ffff", "1234:5678:1::1-1234:5678:1::ffff"));
+ assertTrue(NetUtils.isIp6RangeOverlap("1234:5678::1-1234:5678::ffff", "1234:5678::2-1234:5678::f"));
+ assertTrue(NetUtils.isIp6RangeOverlap("1234:5678::f-1234:5678::ffff", "1234:5678::2-1234:5678::f"));
+ assertFalse(NetUtils.isIp6RangeOverlap("1234:5678::f-1234:5678::ffff", "1234:5678::2-1234:5678::e"));
+ assertFalse(NetUtils.isIp6RangeOverlap("1234:5678::f-1234:5678::f", "1234:5678::2-1234:5678::e"));
+ }
+
+ @Test
+ public void testGenerateUriForPvlan() {
+ assertEquals("pvlan://123-i456", NetUtils.generateUriForPvlan("123", "456").toString());
+ }
+
+ @Test
+ public void testGetPrimaryPvlanFromUri() {
+ assertEquals("123", NetUtils.getPrimaryPvlanFromUri(NetUtils.generateUriForPvlan("123", "456")));
+ }
+
+ @Test
+ public void testGetIsolatedPvlanFromUri() {
+ assertEquals("456", NetUtils.getIsolatedPvlanFromUri(NetUtils.generateUriForPvlan("123", "456")));
+ }
+
+ @Test
+ public void testIsValidCIDR() throws Exception {
+ //Test to check IP Range of 2 CIDR
String cidrFirst = "10.0.144.0/20";
String cidrSecond = "10.0.151.0/20";
String cidrThird = "10.0.144.0/21";
+
assertTrue(NetUtils.isValidCIDR(cidrFirst));
assertTrue(NetUtils.isValidCIDR(cidrSecond));
assertTrue(NetUtils.isValidCIDR(cidrThird));
+ }
+
+ @Test
+ public void testIsSameIpRange() {
+ String cidrFirst = "10.0.144.0/20";
+ String cidrSecond = "10.0.151.0/20";
+ String cidrThird = "10.0.144.0/21";
//Check for exactly same CIDRs
assertTrue(NetUtils.isSameIpRange(cidrFirst, cidrFirst));
@@ -160,17 +241,14 @@ public class NetUtilsTest extends TestCase {
assertFalse(NetUtils.isSameIpRange(cidrFirst, "10.3.6.5/50"));
}
- public void testMacGenerateion() {
+ @Test
+ public void testGenerateMacOnIncrease() {
String mac = "06:01:23:00:45:67";
- String newMac = NetUtils.generateMacOnIncrease(mac, 2);
- assertTrue(newMac.equals("06:01:25:00:45:67"));
- newMac = NetUtils.generateMacOnIncrease(mac, 16);
- assertTrue(newMac.equals("06:01:33:00:45:67"));
+ assertEquals("06:01:25:00:45:67", NetUtils.generateMacOnIncrease(mac, 2));
+ assertEquals("06:01:33:00:45:67", NetUtils.generateMacOnIncrease(mac, 16));
mac = "06:ff:ff:00:45:67";
- newMac = NetUtils.generateMacOnIncrease(mac, 1);
- assertTrue(newMac.equals("06:00:00:00:45:67"));
- newMac = NetUtils.generateMacOnIncrease(mac, 16);
- assertTrue(newMac.equals("06:00:0f:00:45:67"));
+ assertEquals("06:00:00:00:45:67", NetUtils.generateMacOnIncrease(mac, 1));
+ assertEquals("06:00:0f:00:45:67", NetUtils.generateMacOnIncrease(mac, 16));
}
@Test
@@ -187,4 +265,11 @@ public class NetUtilsTest extends TestCase {
assertFalse(NetUtils.isSameIsolationId("2", "vlan://3"));
assertFalse(NetUtils.isSameIsolationId("bla", null));
}
+
+ @Test
+ public void testValidateGuestCidr() throws Exception {
+ String guestCidr = "192.168.1.0/24";
+
+ assertTrue(NetUtils.validateGuestCidr(guestCidr));
+ }
}