/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2006-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) 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. * * OpenNMS(R) 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 OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.netmgt.mock; import java.sql.ResultSet; import java.sql.SQLException; import junit.framework.TestCase; import org.opennms.netmgt.mock.MockService.SvcMgmtStatus; import org.opennms.netmgt.utils.Querier; import org.opennms.netmgt.xml.event.Event; /** * @author brozow */ public class MockDatabaseTest extends TestCase { private MockNetwork m_network; private MockDatabase m_db; private MockDatabase m_secondDb; protected void setUp() throws Exception { super.setUp(); m_network = new MockNetwork(); m_network.setCriticalService("ICMP"); m_network.addNode(1, "Router"); m_network.addInterface("192.168.1.1"); m_network.addService("ICMP"); m_network.addService("SMTP"); m_network.addInterface("192.168.1.2"); m_network.addService("ICMP"); m_network.addService("SMTP"); m_network.addNode(2, "Server"); m_network.addInterface("192.168.1.3"); m_network.addService("ICMP"); // set the initial status to N as a test m_network.addService("HTTP").setMgmtStatus(SvcMgmtStatus.NOT_POLLED); m_network.addInterface("192.168.1.2"); m_db = new MockDatabase(); m_db.populate(m_network); } protected void tearDown() throws Exception { super.tearDown(); m_db.drop(); if (m_secondDb != null) m_secondDb.drop(); } public void testNodeQuery() { Querier querier = new Querier(m_db, "select * from node") { public void processRow(ResultSet rs) throws SQLException { int nodeId = rs.getInt("nodeId"); String label = rs.getString("nodeLabel"); MockNode node = m_network.getNode(nodeId); assertNotNull(node); assertEquals(nodeId, node.getNodeId()); assertEquals(label, node.getLabel()); } }; querier.execute(); assertEquals(m_network.getNodeCount(), querier.getCount()); } public void testMultipleDatabases() throws Exception { m_secondDb = new MockDatabase(m_db.getTestDatabase() + "_test2"); Querier secondQuerier = new Querier(m_secondDb, "select * from node"); secondQuerier.execute(); Querier querier = new Querier(m_db, "select * from node"); querier.execute(); assertFalse(secondQuerier.getCount() == querier.getCount()); MockNode node = m_network.getNode(1); m_secondDb.writeNode(node); secondQuerier = new Querier(m_secondDb, "select * from node"); secondQuerier.execute(); assertEquals(1, secondQuerier.getCount()); } public void testIFQuery() { Querier querier = new Querier(m_db, "select * from ipInterface") { public void processRow(ResultSet rs) throws SQLException { int nodeId = rs.getInt("nodeId"); String ipAddr = rs.getString("ipAddr"); MockInterface iface = m_network.getInterface(nodeId, ipAddr); assertNotNull(iface); assertEquals(nodeId, iface.getNodeId()); assertEquals(ipAddr, iface.getIpAddr()); } }; querier.execute(); assertEquals(m_network.getInterfaceCount(), querier.getCount()); } public void testServiceQuery() { Querier querier = new Querier(m_db, "select nodeId, ipAddr, ifServices.status as status, ifServices.serviceId as serviceId, service.serviceName as serviceName from ifServices, service where ifServices.serviceId = service.serviceId;") { public void processRow(ResultSet rs) throws SQLException { int nodeId = rs.getInt("nodeId"); String ipAddr = rs.getString("ipAddr"); int serviceId = rs.getInt("serviceId"); String serviceName = rs.getString("serviceName"); String status = rs.getString("status"); MockService svc = m_network.getService(nodeId, ipAddr, serviceName); assertNotNull(svc); assertEquals("Assertion failed: " + svc, svc.getNodeId(), nodeId); assertEquals("Assertion failed: " + svc, svc.getIpAddr(), ipAddr); assertEquals("Assertion failed: " + svc, svc.getSvcName(), serviceName); assertEquals("Assertion failed: " + svc, svc.getId(), serviceId); assertEquals("Assertion failed: " + svc, svc.getMgmtStatus().toDbString(), status); } }; querier.execute(); assertEquals(m_network.getServiceCount(), querier.getCount()); } public void testCascade() { m_db.update("delete from node where nodeid = '1'"); assertEquals(0, m_db.countRows("select * from node where nodeid = '1'")); assertEquals(0, m_db.countRows("select * from ipInterface where nodeid = '1'")); assertEquals(0, m_db.countRows("select * from ifServices where nodeid = '1'")); } public void testOutage() { final MockService svc = m_network.getService(1, "192.168.1.1", "ICMP"); Event svcLostEvent = MockEventUtil.createNodeLostServiceEvent("TEST", svc); m_db.writeEvent(svcLostEvent); m_db.createOutage(svc, svcLostEvent); m_db.createOutage(svc, svcLostEvent); assertEquals(2, m_db.countOutagesForService(svc)); Querier querier = new Querier(m_db, "select * from outages") { public void processRow(ResultSet rs) throws SQLException { int nodeId = rs.getInt("nodeId"); String ipAddr = rs.getString("ipAddr"); int serviceId = rs.getInt("serviceId"); assertEquals(nodeId, svc.getNodeId()); assertEquals(ipAddr, svc.getIpAddr()); assertEquals(serviceId, svc.getId()); } }; querier.execute(); assertEquals(2, querier.getCount()); } public void testUpdateNodeSequence() { int maxNodeId = m_db.getJdbcTemplate().queryForInt("select max(nodeid) from node"); int nextSeqNum = m_db.getJdbcTemplate().queryForInt("select nextval('nodeNxtId')"); assertTrue(nextSeqNum > maxNodeId); } public void testSetServiceStatus() { MockService svc = m_network.getService(1, "192.168.1.1", "SMTP"); assertEquals('A', m_db.getServiceStatus(svc)); m_db.setServiceStatus(svc, 'U'); assertEquals('U', m_db.getServiceStatus(svc)); } }