/* * Copyright (c) 2013 Big Switch Networks, Inc. * * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html * * 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.sdnplatform.util; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.sdnplatform.packet.IPv4; import org.sdnplatform.util.IPV4Subnet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class IPV4SubnetTest { protected static Logger logger = LoggerFactory.getLogger(IPV4SubnetTest.class); private IPV4Subnet getSub(String address, int i) { IPV4Subnet s = new IPV4Subnet(); s.maskBits = (short)i; s.address = IPv4.toIPv4Address(address); return s; } @Test public void subnetComparison() { IPV4Subnet sub1 = getSub("192.168.0.1", 24); IPV4Subnet sub2 = getSub("192.168.0.1", 24); assertEquals(0, sub1.compareTo(sub2)); sub2 = getSub("192.168.1.1", 24); assertEquals(-1, sub1.compareTo(sub2)); sub2 = getSub("192.167.255.1", 24); assertEquals(1, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.1", 23); assertEquals(1, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.1", 25); assertEquals(-1, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.0", 24); assertEquals(0, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.255", 24); assertEquals(0, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.255", 32); assertEquals(-1, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.1", 31); assertEquals(-1, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.255", 1); assertEquals(1, sub1.compareTo(sub2)); sub2 = getSub("192.168.0.255", 0); assertEquals(1, sub1.compareTo(sub2)); sub1 = getSub("192.0.0.0", 8); sub2 = getSub("1.1.1.1", 32); assertEquals(1, sub1.compareTo(sub2)); sub1 = getSub("192.0.0.0", -1); sub2 = getSub("1.1.1.1", 64); assertEquals(-1, sub1.compareTo(sub2)); sub1 = getSub("0.0.0.0", 0); sub2 = getSub("255.255.255.255", 32); assertEquals(-1, sub1.compareTo(sub2)); try { sub1 = getSub("192.256.0.1", 24); } catch (IllegalArgumentException e) { logger.error("{}", e.toString()); } } @Test public void testContains() { IPV4Subnet sub1 = getSub("192.168.0.1", 24); int ip1 = IPv4.toIPv4Address("192.168.0.20"); int ip2 = IPv4.toIPv4Address("192.168.1.1"); assertEquals(true, sub1.contains(ip1)); assertEquals(false, sub1.contains(ip2)); } @Test public void testListOfSubnets() { IPV4Subnet sub1 = getSub("192.168.0.1", 24); IPV4Subnet sub2 = getSub("192.168.0.12", 25); IPV4Subnet sub3 = getSub("192.168.0.12", 24); List<IPV4Subnet> ssub = new ArrayList<IPV4Subnet>(); int ip1 = IPv4.toIPv4Address("192.168.0.128"); ssub.add(sub1); assertEquals(1, ssub.size()); if (sub1.compareTo(sub2) != 0) { ssub.add(sub2); } assertEquals(2, ssub.size()); assertEquals(-1, sub1.compareTo(sub2)); assertEquals(true, sub1.contains(ip1)); assertEquals(false, sub2.contains(ip1)); if (sub1.compareTo(sub3) != 0 && sub2.compareTo(sub3) != 0) { ssub.add(sub3); } assertEquals(2, ssub.size()); assertEquals(0, sub1.compareTo(sub3)); assertEquals(1, sub2.compareTo(sub3)); assertEquals(true, sub1.contains(ip1)); assertEquals(false, sub2.contains(ip1)); assertEquals(true, sub3.contains(ip1)); } }