/* * Copyright 2009-2014 Jagornet Technologies, LLC. All Rights Reserved. * * This software is the proprietary information of Jagornet Technologies, LLC. * Use is subject to license terms. * */ /* * This file TestIaManager.java is part of Jagornet DHCP. * * Jagornet DHCP is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Jagornet DHCP is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jagornet DHCP. If not, see <http://www.gnu.org/licenses/>. * */ package com.jagornet.dhcp.db; import java.net.InetAddress; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.Iterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jagornet.dhcp.db.DhcpOption; import com.jagornet.dhcp.db.IaAddress; import com.jagornet.dhcp.db.IaManager; import com.jagornet.dhcp.db.IdentityAssoc; // TODO: Auto-generated Javadoc /** * The Class TestJdbcIaManager. * * @author agrabil */ public class TestIaManager extends BaseTestCase { /** The log. */ private static Logger log = LoggerFactory.getLogger(TestIaManager.class); /** The ia mgr. */ protected IaManager iaMgr; /** The ia. */ protected IdentityAssoc ia; /** The duid. */ byte[] duid; /** The iatype. */ byte iatype; /** The iaid. */ long iaid; /** The onehour. */ long onehour; /** The twohours. */ long twohours; /** The ip1. */ IaAddress ip1; /** The now1. */ Date now1; /** The p1. */ Date p1; /** The v1. */ Date v1; /** The ip2. */ IaAddress ip2; /** The now2. */ Date now2; /** The p2. */ Date p2; /** The v2. */ Date v2; /** * Instantiates a new test jdbc ia manager. */ public TestIaManager() throws Exception { super("jdbc-derby", 2); iaMgr = (IaManager) ctx.getBean("iaManager"); } /* (non-Javadoc) * @see com.jagornet.dhcpv6.db.BaseDbTestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); iaMgr.deleteAllIAs(); // clean the database first duid = new byte[] { (byte)0xde, (byte)0xbb, (byte)0x1e, (byte)0xde, (byte)0xbb, (byte)0x1e }; iatype = 1; iaid = (long)0xdebdeb00; onehour = 3600*1000; twohours = 7200*1000; ia = new IdentityAssoc(); ia.setDuid(duid); ia.setIatype(iatype); ia.setIaid(iaid); ia.setState(IdentityAssoc.ADVERTISED); Collection<IaAddress> ips = new ArrayList<IaAddress>(); ip1 = new IaAddress(); ip1.setIpAddress(InetAddress.getByName("3ffe::1")); now1 = new Date(); ip1.setStartTime(now1); p1 = new Date(now1.getTime() + onehour); ip1.setPreferredEndTime(p1); v1 = new Date(now1.getTime() + twohours); ip1.setValidEndTime(v1); ip1.setState(IaAddress.ADVERTISED); Collection<DhcpOption> ip1opts = new ArrayList<DhcpOption>(); DhcpOption ip1opt1 = new DhcpOption(); ip1opt1.setCode(11); ip1opt1.setValue(new byte[] { (byte)0x11 } ); ip1opts.add(ip1opt1); DhcpOption ip1opt2 = new DhcpOption(); ip1opt2.setCode(12); ip1opt2.setValue(new byte[] { (byte)0x12 } ); ip1opts.add(ip1opt2); ip1.setDhcpOptions(ip1opts); ips.add(ip1); ip2 = new IaAddress(); ip2.setIpAddress(InetAddress.getByName("3ffe::2")); now2 = new Date(); ip2.setStartTime(now2); p2 = new Date(now2.getTime() + onehour); ip2.setPreferredEndTime(p2); v2 = new Date(now2.getTime() + twohours); ip2.setValidEndTime(v2); ip2.setState(IaAddress.ADVERTISED); Collection<DhcpOption> ip2opts = new ArrayList<DhcpOption>(); DhcpOption ip2opt1 = new DhcpOption(); ip2opt1.setCode(21); ip2opt1.setValue(new byte[] { (byte)0x21 } ); ip2opts.add(ip2opt1); DhcpOption ip2opt2 = new DhcpOption(); ip2opt2.setCode(22); ip2opt2.setValue(new byte[] { (byte)0x22 } ); ip2opts.add(ip1opt2); ip2.setDhcpOptions(ip2opts); ips.add(ip2); Collection<DhcpOption> iaopts = new ArrayList<DhcpOption>(); DhcpOption iaopt1 = new DhcpOption(); iaopt1.setCode(1); iaopt1.setValue(new byte[] { (byte)0x01 } ); iaopts.add(iaopt1); DhcpOption iaopt2 = new DhcpOption(); iaopt2.setCode(2); iaopt2.setValue(new byte[] { (byte)0x02 } ); iaopts.add(iaopt2); ia.setIaAddresses(ips); ia.setDhcpOptions(iaopts); } /** * Check ia. * * @param ia2 the ia2 */ private void checkIA(IdentityAssoc ia2) { assertTrue(Arrays.equals(duid, ia2.getDuid())); assertEquals(iatype, ia2.getIatype()); assertEquals(iaid, ia2.getIaid()); assertEquals(IdentityAssoc.ADVERTISED, ia2.getState()); Collection<DhcpOption> opts2 = ia2.getDhcpOptions(); assertNotNull(opts2); assertEquals(2, opts2.size()); } /** * Check ia addr1. * * @param ia2ip1 the ia2ip1 */ private void checkIaAddr1(IaAddress ia2ip1) { assertEquals(ip1.getIpAddress(), ia2ip1.getIpAddress()); assertEquals(now1.getTime(), ia2ip1.getStartTime().getTime()); assertEquals(p1.getTime(), ia2ip1.getPreferredEndTime().getTime()); assertEquals(v1.getTime(), ia2ip1.getValidEndTime().getTime()); assertEquals(IaAddress.ADVERTISED, ip1.getState()); Collection<DhcpOption> ia2ip1opts = ia2ip1.getDhcpOptions(); assertNotNull(ia2ip1opts); assertEquals(2, ia2ip1opts.size()); } /** * Check ia addr2. * * @param ia2ip2 the ia2ip2 */ private void checkIaAddr2(IaAddress ia2ip2) { assertEquals(ip2.getIpAddress(), ia2ip2.getIpAddress()); assertEquals(now2.getTime(), ia2ip2.getStartTime().getTime()); assertEquals(p2.getTime(), ia2ip2.getPreferredEndTime().getTime()); assertEquals(v2.getTime(), ia2ip2.getValidEndTime().getTime()); assertEquals(IaAddress.ADVERTISED, ip2.getState()); Collection<DhcpOption> ia2ip2opts = ia2ip2.getDhcpOptions(); assertNotNull(ia2ip2opts); assertEquals(2, ia2ip2opts.size()); } /** * Test create read delete ia. * * @throws Exception the exception */ public void testCreateReadDeleteIA() throws Exception { log.info("Creating IA"); iaMgr.createIA(ia); log.info("Locating IA"); IdentityAssoc ia2 = iaMgr.findIA(duid, iatype, iaid); assertNotNull(ia2); checkIA(ia2); Collection<? extends IaAddress> ips2 = ia2.getIaAddresses(); assertNotNull(ips2); assertEquals(2, ips2.size()); Iterator<? extends IaAddress> ips2i = ips2.iterator(); IaAddress ia2ip1 = ips2i.next(); checkIaAddr1(ia2ip1); IaAddress ia2ip2 = ips2i.next(); checkIaAddr2(ia2ip2); log.info("Deleting IA"); iaMgr.deleteIA(ia2); IdentityAssoc ia3 = iaMgr.findIA(duid, iatype, iaid); assertNull(ia3); } /** * Test update ia addr. * * @throws Exception the exception */ public void testUpdateIaAddr() throws Exception { log.info("Creating IA"); iaMgr.createIA(ia); // "expire" the first address IaAddress addr1 = ia.getIaAddresses().iterator().next(); addr1.setStartTime(null); addr1.setPreferredEndTime(null); addr1.setValidEndTime(null); iaMgr.updateIaAddr(addr1); log.info("Locating IA"); IdentityAssoc ia2 = iaMgr.findIA(duid, iatype, iaid); assertNotNull(ia2); checkIA(ia2); Collection<? extends IaAddress> ips2 = ia2.getIaAddresses(); assertNotNull(ips2); assertEquals(2, ips2.size()); Iterator<? extends IaAddress> ips2i = ips2.iterator(); IaAddress ia2ip1 = ips2i.next(); assertEquals(ip1.getIpAddress(), ia2ip1.getIpAddress()); assertNull(ia2ip1.getStartTime()); assertNull(ia2ip1.getPreferredEndTime()); assertNull(ia2ip1.getValidEndTime()); Collection<DhcpOption> ia2ip1opts = ia2ip1.getDhcpOptions(); assertNotNull(ia2ip1opts); assertEquals(2, ia2ip1opts.size()); IaAddress ia2ip2 = ips2i.next(); checkIaAddr2(ia2ip2); log.info("Deleting IA"); iaMgr.deleteIA(ia2); } /** * Test update all ia addrs. * * @throws Exception the exception */ public void testUpdateAllIaAddrs() throws Exception { log.info("Creating IA"); iaMgr.createIA(ia); Iterator<? extends IaAddress> iaAddrIter = ia.getIaAddresses().iterator(); // "expire" the first address IaAddress addr1 = iaAddrIter.next(); addr1.setStartTime(null); addr1.setPreferredEndTime(null); addr1.setValidEndTime(null); iaMgr.updateIaAddr(addr1); // "expire" the second address, which should trigger // a change to the IdentityAssoc.state IaAddress addr2 = iaAddrIter.next(); addr2.setStartTime(null); addr2.setPreferredEndTime(null); addr2.setValidEndTime(null); iaMgr.updateIaAddr(addr2); log.info("Locating IA"); IdentityAssoc ia2 = iaMgr.findIA(duid, iatype, iaid); assertNotNull(ia2); assertTrue(Arrays.equals(duid, ia2.getDuid())); assertEquals(iatype, ia2.getIatype()); assertEquals(iaid, ia2.getIaid()); // assertEquals(IdentityAssoc.EXPIRED, ia2.getState()); Collection<DhcpOption> opts2 = ia2.getDhcpOptions(); assertNotNull(opts2); assertEquals(2, opts2.size()); Collection<? extends IaAddress> ips2 = ia2.getIaAddresses(); assertNotNull(ips2); assertEquals(2, ips2.size()); Iterator<? extends IaAddress> ips2i = ips2.iterator(); IaAddress ia2ip1 = ips2i.next(); assertEquals(ip1.getIpAddress(), ia2ip1.getIpAddress()); assertNull(ia2ip1.getStartTime()); assertNull(ia2ip1.getPreferredEndTime()); assertNull(ia2ip1.getValidEndTime()); Collection<DhcpOption> ia2ip1opts = ia2ip1.getDhcpOptions(); assertNotNull(ia2ip1opts); assertEquals(2, ia2ip1opts.size()); IaAddress ia2ip2 = ips2i.next(); assertEquals(ip2.getIpAddress(), ia2ip2.getIpAddress()); assertNull(ia2ip2.getStartTime()); assertNull(ia2ip2.getPreferredEndTime()); assertNull(ia2ip2.getValidEndTime()); log.info("Deleting IA"); iaMgr.deleteIA(ia2); } /** * Test delete ia addr. * * @throws Exception the exception */ public void testDeleteIaAddr() throws Exception { log.info("Creating IA"); iaMgr.createIA(ia); // delete the first address IaAddress addr1 = ia.getIaAddresses().iterator().next(); iaMgr.deleteIaAddr(addr1); log.info("Locating IA"); IdentityAssoc ia2 = iaMgr.findIA(duid, iatype, iaid); assertNotNull(ia2); checkIA(ia2); Collection<? extends IaAddress> ips2 = ia2.getIaAddresses(); assertNotNull(ips2); assertEquals(1, ips2.size()); Iterator<? extends IaAddress> ips2i = ips2.iterator(); IaAddress ia2ip2 = ips2i.next(); checkIaAddr2(ia2ip2); log.info("Deleting IA"); iaMgr.deleteIA(ia2); } /** * Test delete all ia addrs. * * @throws Exception the exception */ public void testDeleteAllIaAddrs() throws Exception { log.info("Creating IA"); iaMgr.createIA(ia); Iterator<? extends IaAddress> iaAddrIter = ia.getIaAddresses().iterator(); // delete the first address IaAddress addr1 = iaAddrIter.next(); iaMgr.deleteIaAddr(addr1); // delete the second address, which should trigger // a delete of the IdentityAssoc IaAddress addr2 = iaAddrIter.next(); iaMgr.deleteIaAddr(addr2); log.info("Locating IA"); IdentityAssoc ia2 = iaMgr.findIA(duid, iatype, iaid); assertNull(ia2); } }