package org.ovirt.engine.core.bll; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; import java.util.HashMap; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.ovirt.engine.core.bll.context.CompensationContext; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.businessentities.VmOsType; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dao.VmDynamicDAO; import org.ovirt.engine.core.utils.transaction.TransactionSupport; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @PrepareForTest({ DbFacade.class, TransactionSupport.class, Config.class }) @RunWith(PowerMockRunner.class) public class VmHandlerTest { @Mock DbFacade dbFacade; @Mock VmDynamicDAO vmDynamicDAO; public VmHandlerTest() { mockStatic(DbFacade.class); mockStatic(TransactionSupport.class); MockitoAnnotations.initMocks(this); } @Test(expected = VdcBLLException.class) public void lockLockedVM() { mockVmDynamicDAOWithLockedVm(); executeCheckAndLock(); } @Test public void lockUnlockedVm() { mockVmDynamicDAOWithUnlockedVm(); executeCheckAndLock(); } @Before public void mockDbFacade() { when(DbFacade.getInstance()).thenReturn(dbFacade); when(dbFacade.getVmDynamicDAO()).thenReturn(vmDynamicDAO); } private void mockVmDynamicDAOWithLockedVm() { when(vmDynamicDAO.get(any(Guid.class))).thenReturn(createVmDynamic(VMStatus.ImageLocked)); } private void mockVmDynamicDAOWithUnlockedVm() { when(vmDynamicDAO.get(any(Guid.class))).thenReturn(createVmDynamic(VMStatus.Down)); } private VmDynamic createVmDynamic(VMStatus status) { VmDynamic dynamic = new VmDynamic(); dynamic.setstatus(status); return dynamic; } private void executeCheckAndLock() { VmHandler.checkStatusAndLockVm(Guid.NewGuid(), mock(CompensationContext.class)); } @Test public void UpdateVmGuestAgentVersionWithNullAppList() { VM vm = new VM(); vm.setapp_list(null); VmHandler.UpdateVmGuestAgentVersion(vm); Assert.assertNull(vm.getGuestAgentVersion()); Assert.assertNull(vm.getSpiceDriverVersion()); } @Test public void UpdateVmGuestAgentVersionWithAppList() { PowerMockito.mockStatic(Config.class); Mockito.when(Config.GetValue(ConfigValues.AgentAppName)).thenReturn("oVirt-Agent"); HashMap<String, String> drivers = new HashMap<String, String>(); drivers.put("linux", "xorg-x11-drv-qxl"); Mockito.when(Config.GetValue(ConfigValues.SpiceDriverNameInGuest)).thenReturn(drivers); VM vm = new VM(); vm.getStaticData().setos(VmOsType.OtherLinux); vm.setapp_list("kernel-3.0,ovirt-agent-4.5.6,xorg-x11-drv-qxl-0.0.21-3.fc15.i686"); VmHandler.UpdateVmGuestAgentVersion(vm); Assert.assertNotNull(vm.getGuestAgentVersion()); Assert.assertNotNull(vm.getSpiceDriverVersion()); } }