package com.zstack.utils.test; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.zstack.utils.network.NetworkUtils; import java.util.ArrayList; import java.util.List; public class TestFindFirstIp { String sip = "10.0.110.2"; String eip = "10.0.255.255"; @Before public void setUp() throws Exception { } private Long[] populateUsedIps(long s1, long e1, int skip) { List<Long> lst1 = new ArrayList<Long>((int) (e1 - s1 + 1)); for (long i=s1; i< e1 - 11 + 1; i ++) { if (i % skip == 0) { continue; } lst1.add(i); } Long[] a1 = lst1.toArray(new Long[lst1.size()]); return a1; } private Long[] ipsToLongArray(String...ips) { Long[] ret = new Long[ips.length]; for (int i=0; i<ret.length; i++) { ret[i] = NetworkUtils.ipv4StringToLong(ips[i]); } return ret; } @Test public void test() { long lsip = NetworkUtils.ipv4StringToLong(sip); long leip = NetworkUtils.ipv4StringToLong(eip); long s1 = NetworkUtils.ipv4StringToLong("10.0.110.2"); long e1 = NetworkUtils.ipv4StringToLong("10.0.255.100"); Long[] a1 = populateUsedIps(s1, e1, 3); long ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); String ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.3", ip); s1 = NetworkUtils.ipv4StringToLong("10.0.110.5"); e1 = NetworkUtils.ipv4StringToLong("10.0.110.100"); a1 = populateUsedIps(s1, e1, 3); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.2", ip); s1 = NetworkUtils.ipv4StringToLong("10.0.110.2"); e1 = NetworkUtils.ipv4StringToLong("10.0.110.100"); a1 = populateUsedIps(s1, e1, 10); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.10", ip); a1 = ipsToLongArray("10.0.110.2", "10.0.110.4", "10.0.110.8"); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.3", ip); a1 = ipsToLongArray("10.0.110.2", "10.0.110.4", "10.0.110.5"); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.3", ip); a1 = ipsToLongArray("10.0.110.2"); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.3", ip); a1 = ipsToLongArray("10.0.110.2", "10.0.110.3"); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.4", ip); a1 = new Long[0]; ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.2", ip); a1 = ipsToLongArray("10.0.110.2", "10.0.110.3", "10.0.110.4", "10.0.110.5", "10.0.110.7", "10.0.110.9", "10.0.110.10"); ret = NetworkUtils.findFirstAvailableIpv4Address(lsip, leip, a1); ip = NetworkUtils.longToIpv4String(ret); Assert.assertEquals("10.0.110.6", ip); int arr[] = {1, 2, 3, 4, 5, 6, 8}; int r = 0; for (int i=0; i<arr.length; i++) { r ^= arr[i]; } System.out.println(r); } }