/***************************************************************************** * * Copyright (C) Zenoss, Inc. 2011, all rights reserved. * * This content is made available according to terms specified in * License.zenoss under the directory where your Zenoss product is installed. * ****************************************************************************/ package org.zenoss.zep.dao.impl; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.zenoss.protobufs.zep.Zep.DaemonHeartbeat; import org.zenoss.zep.ZepException; import org.zenoss.zep.dao.HeartbeatDao; import java.util.List; import static org.junit.Assert.*; /** * Unit tests for HeartbeatDao. */ @ContextConfiguration({ "classpath:zep-config.xml" }) public class HeartbeatDaoImplIT extends AbstractTransactionalJUnit4SpringContextTests { @Autowired public HeartbeatDao heartbeatDao; private void findHeartbeat(DaemonHeartbeat hb, List<DaemonHeartbeat> heartbeats) throws ZepException { boolean found = false; for (DaemonHeartbeat heartbeat : heartbeats) { // Clear last_time for comparisons heartbeat = DaemonHeartbeat.newBuilder(heartbeat).clearLastTime().build(); if (hb.getMonitor().equals(heartbeat.getMonitor()) && hb.getDaemon().equals(heartbeat.getDaemon())) { assertEquals(hb, heartbeat); found = true; } } assertTrue(found); } @Before public void init() { this.simpleJdbcTemplate.update("DELETE FROM daemon_heartbeat"); } private static DaemonHeartbeat createHeartbeat(String monitor, String daemon, int timeoutSeconds) { return DaemonHeartbeat.newBuilder().setMonitor(monitor).setDaemon(daemon).setTimeoutSeconds(timeoutSeconds) .build(); } private static DaemonHeartbeat clearLastTime(DaemonHeartbeat heartbeat) { return DaemonHeartbeat.newBuilder(heartbeat).clearLastTime().build(); } @Test public void testCreate() throws ZepException { DaemonHeartbeat hb = createHeartbeat("localhost", "zenactiond", 90); heartbeatDao.createHeartbeat(hb); findHeartbeat(hb, heartbeatDao.findAll()); // Change timeout - tests ON DUPLICATE KEY UPDATE hb = createHeartbeat("localhost", "zenactiond", 900); heartbeatDao.createHeartbeat(hb); findHeartbeat(hb, heartbeatDao.findAll()); } @Test public void testMonitor() throws ZepException { DaemonHeartbeat localhost = createHeartbeat("localhost", "zenactiond", 90); heartbeatDao.createHeartbeat(localhost); DaemonHeartbeat devsvcs = createHeartbeat("devsvcs", "zenactiond", 90); heartbeatDao.createHeartbeat(devsvcs); assertEquals(1, heartbeatDao.findByMonitor("localhost").size()); findHeartbeat(localhost, heartbeatDao.findByMonitor("localhost")); assertEquals(1, heartbeatDao.findByMonitor("devsvcs").size()); findHeartbeat(devsvcs, heartbeatDao.findByMonitor("devsvcs")); assertEquals(1, heartbeatDao.deleteByMonitor("localhost")); assertEquals(0, heartbeatDao.findByMonitor("localhost").size()); assertEquals(1, heartbeatDao.deleteByMonitor("devsvcs")); assertEquals(0, heartbeatDao.findByMonitor("devsvcs").size()); } @Test public void testDeleteByMonitorAndDaemon() throws ZepException { DaemonHeartbeat zenmodeler = createHeartbeat("localhost", "zenmodeler", 1440); heartbeatDao.createHeartbeat(zenmodeler); DaemonHeartbeat zenactiond = createHeartbeat("localhost", "zenactiond", 90); heartbeatDao.createHeartbeat(zenactiond); assertEquals(2, heartbeatDao.findByMonitor(zenmodeler.getMonitor()).size()); heartbeatDao.deleteByMonitorAndDaemon(zenmodeler.getMonitor(), zenmodeler.getDaemon()); assertEquals(zenactiond, clearLastTime(heartbeatDao.findByMonitor(zenactiond.getMonitor()).get(0))); heartbeatDao.deleteByMonitorAndDaemon(zenactiond.getMonitor(), zenactiond.getDaemon()); assertTrue(heartbeatDao.findByMonitor(zenactiond.getMonitor()).isEmpty()); } }