/**
* Abiquo community edition
* cloud management application for hybrid clouds
* Copyright (C) 2008-2010 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software 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
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package com.abiquo.vsm.monitor;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import java.util.UUID;
import org.testng.annotations.Test;
import com.abiquo.vsm.TestBase;
import com.abiquo.vsm.events.VMEventType;
import com.abiquo.vsm.exception.MonitorException;
import com.abiquo.vsm.model.PhysicalMachine;
import com.abiquo.vsm.model.VirtualMachine;
import com.abiquo.vsm.monitor.MockMonitor.InfiniteMachineMonitor;
import com.abiquo.vsm.monitor.MockMonitor.MulipleMachineMonitor;
import com.abiquo.vsm.monitor.MockMonitor.SingleMachineMonitor;
import com.abiquo.vsm.monitor.Monitor.Type;
/**
* Unit tests for the {@link MonitorManager} class.
*
* @author ibarrera
*/
public class MonitorManagerTest extends TestBase
{
/** The monitor manager to test. */
private MockMonitorManager monitorManager;
@Override
public void setUp() throws Exception
{
// Create the manager and load the monitors
monitorManager = new MockMonitorManager();
}
@Test
public void test_createMonitor() throws Exception
{
AbstractMonitor monitor1 = monitorManager.createMonitor(SingleMachineMonitor.TYPE);
AbstractMonitor monitor2 = monitorManager.createMonitor(MulipleMachineMonitor.TYPE);
AbstractMonitor monitor3 = monitorManager.createMonitor(InfiniteMachineMonitor.TYPE);
assertNotNull(monitor1);
assertNotNull(monitor2);
assertNotNull(monitor3);
assertEquals(monitor1.getClass(), SingleMachineMonitor.class);
assertEquals(monitor2.getClass(), MulipleMachineMonitor.class);
assertEquals(monitor3.getClass(), InfiniteMachineMonitor.class);
}
@Test
public void test_monitor() throws Exception
{
monitor("10.60.1.11", SingleMachineMonitor.TYPE);
monitor("10.60.1.12", MulipleMachineMonitor.TYPE);
monitor("10.60.1.13", InfiniteMachineMonitor.TYPE);
assertNull(monitorManager.findAvailableMonitor(SingleMachineMonitor.TYPE));
assertNotNull(monitorManager.findAvailableMonitor(MulipleMachineMonitor.TYPE));
assertNotNull(monitorManager.findAvailableMonitor(InfiniteMachineMonitor.TYPE));
}
@Test
public void test_shutdown() throws Exception
{
monitor("10.60.1.11", SingleMachineMonitor.TYPE);
monitor("10.60.1.12", SingleMachineMonitor.TYPE);
monitor("10.60.1.13", MulipleMachineMonitor.TYPE);
monitor("10.60.1.14", MulipleMachineMonitor.TYPE);
monitor("10.60.1.15", InfiniteMachineMonitor.TYPE);
assertNull(monitorManager.findAvailableMonitor(SingleMachineMonitor.TYPE));
assertNotNull(monitorManager.findAvailableMonitor(MulipleMachineMonitor.TYPE));
assertNotNull(monitorManager.findAvailableMonitor(InfiniteMachineMonitor.TYPE));
monitorManager.shutdown("10.60.1.11", SingleMachineMonitor.TYPE);
monitorManager.shutdown("10.60.1.13", MulipleMachineMonitor.TYPE);
monitorManager.shutdown("10.60.1.15", InfiniteMachineMonitor.TYPE);
// Verify running monitors
assertNull(monitorManager.findRunningMonitor("10.60.1.11", SingleMachineMonitor.TYPE));
assertNull(monitorManager.findRunningMonitor("10.60.1.13", MulipleMachineMonitor.TYPE));
assertNull(monitorManager.findRunningMonitor("10.60.1.15", InfiniteMachineMonitor.TYPE));
assertNotNull(monitorManager.findRunningMonitor("10.60.1.12", SingleMachineMonitor.TYPE));
assertNotNull(monitorManager.findRunningMonitor("10.60.1.14", MulipleMachineMonitor.TYPE));
// Verify available monitors
assertNull(monitorManager.findAvailableMonitor(SingleMachineMonitor.TYPE));
assertNotNull(monitorManager.findAvailableMonitor(MulipleMachineMonitor.TYPE));
assertNull(monitorManager.findAvailableMonitor(InfiniteMachineMonitor.TYPE));
}
@Test
public void test_shutdownMultiple() throws Exception
{
monitor("10.60.1.10", MulipleMachineMonitor.TYPE);
monitor("10.60.1.11", MulipleMachineMonitor.TYPE);
assertNotNull(monitorManager.findAvailableMonitor(MulipleMachineMonitor.TYPE));
monitorManager.shutdown("10.60.1.10", MulipleMachineMonitor.TYPE);
monitorManager.shutdown("10.60.1.11", MulipleMachineMonitor.TYPE);
// Verify running and available monitors
assertNull(monitorManager.findRunningMonitor("10.60.1.10", MulipleMachineMonitor.TYPE));
assertNull(monitorManager.findRunningMonitor("10.60.1.11", MulipleMachineMonitor.TYPE));
assertNull(monitorManager.findAvailableMonitor(MulipleMachineMonitor.TYPE));
}
@Test
public void test_subscribe() throws Exception
{
monitor("10.60.1.11", SingleMachineMonitor.TYPE);
assertNull(monitorManager.findAvailableMonitor(SingleMachineMonitor.TYPE));
String machineName = UUID.randomUUID().toString();
monitorManager.subscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
// Check subscription
VirtualMachine vm = monitorManager.dao.findVirtualMachineByName(machineName);
assertNotNull(vm);
assertNotNull(vm.getPhysicalMachine());
assertEquals(vm.getLastKnownState(), VMEventType.UNKNOWN.name());
assertEquals(vm.getPhysicalMachine().getAddress(), "10.60.1.11");
assertEquals(vm.getPhysicalMachine().getType(), SingleMachineMonitor.TYPE.name());
}
@Test(expectedExceptions = MonitorException.class)
public void test_subscribeUnexistingPhysicalMachine() throws Exception
{
String machineName = UUID.randomUUID().toString();
monitorManager.subscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
}
@Test
public void test_unsubscribe() throws Exception
{
monitor("10.60.1.11", SingleMachineMonitor.TYPE);
assertNull(monitorManager.findAvailableMonitor(SingleMachineMonitor.TYPE));
String machineName = UUID.randomUUID().toString();
monitorManager.subscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
// Check subscription
VirtualMachine vm = monitorManager.dao.findVirtualMachineByName(machineName);
assertNotNull(vm);
assertNotNull(vm.getPhysicalMachine());
assertEquals(vm.getLastKnownState(), VMEventType.UNKNOWN.name());
assertEquals(vm.getPhysicalMachine().getAddress(), "10.60.1.11");
assertEquals(vm.getPhysicalMachine().getType(), SingleMachineMonitor.TYPE.name());
monitorManager.unsubscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
// Check unsubscription
assertNull(monitorManager.dao.findVirtualMachineByName(machineName));
}
@Test(expectedExceptions = MonitorException.class)
public void test_unsubscribeUnexistingSubscription() throws Exception
{
monitor("10.60.1.11", SingleMachineMonitor.TYPE);
assertNull(monitorManager.findAvailableMonitor(SingleMachineMonitor.TYPE));
String machineName = UUID.randomUUID().toString();
monitorManager.subscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
// Check subscription
VirtualMachine vm = monitorManager.dao.findVirtualMachineByName(machineName);
assertNotNull(vm);
assertNotNull(vm.getPhysicalMachine());
assertEquals(vm.getLastKnownState(), VMEventType.UNKNOWN.name());
assertEquals(vm.getPhysicalMachine().getAddress(), "10.60.1.11");
assertEquals(vm.getPhysicalMachine().getType(), SingleMachineMonitor.TYPE.name());
monitorManager.unsubscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
// Check unsubscription
assertNull(monitorManager.dao.findVirtualMachineByName(machineName));
// This second unsuibscription should fail
monitorManager.unsubscribe("10.60.1.11", SingleMachineMonitor.TYPE, machineName);
}
@Test(expectedExceptions = MonitorException.class)
public void test_getStateOfUnexistingMachine() throws Exception
{
monitorManager.getState("10.60.1.78", SingleMachineMonitor.TYPE, UUID.randomUUID()
.toString());
}
private PhysicalMachine monitor(String address, Type type) throws Exception
{
PhysicalMachine pm = monitorManager.monitor(address, type, "", "");
assertNotNull(pm);
assertNotNull(pm.getId());
assertNotNull(pm.getUsername());
assertNotNull(pm.getPassword());
assertEquals(pm.getAddress(), address);
assertEquals(pm.getType(), type.name());
assertNotNull(monitorManager.findRunningMonitor(pm.getAddress(), type));
return pm;
}
}