package org.ovirt.engine.core.bll; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.util.List; import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.queries.GetVmChangedFieldsForNextRunParameters; import org.ovirt.engine.core.common.utils.SimpleDependencyInjector; import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils; import org.ovirt.engine.core.compat.Version; @RunWith(MockitoJUnitRunner.class) public class GetVmChangedFieldsForNextRunQueryTest extends AbstractQueryTest<GetVmChangedFieldsForNextRunParameters, GetVmChangedFieldsForNextRunQuery<? extends GetVmChangedFieldsForNextRunParameters>> { @Mock CpuFlagsManagerHandler cpuFlagsManagerHandler; @Mock VmPropertiesUtils vmPropertiesUtils; @Spy @InjectMocks VmHandler vmHandler; @Before public void init() { mockCpuFlagsManagerHandler(); vmHandler.init(); mockVmPropertiesUtils(); } private void mockCpuFlagsManagerHandler() { injectorRule.bind(CpuFlagsManagerHandler.class, cpuFlagsManagerHandler); } private void mockVmPropertiesUtils() { SimpleDependencyInjector.getInstance().bind(VmPropertiesUtils.class, vmPropertiesUtils); } private VM createEmptyVm() { VM vm = new VM(); vm.setCustomProperties(StringUtils.EMPTY); vm.setPredefinedProperties(StringUtils.EMPTY); vm.setUserDefinedProperties(StringUtils.EMPTY); vm.setClusterCompatibilityVersion(Version.getLast()); vm.setClusterArch(ArchitectureType.x86_64); return vm; } @Test public void testEmptyVms() { VM srcVm = createEmptyVm(); VM dstVm = createEmptyVm(); when(getQueryParameters().getOriginal()).thenReturn(srcVm); when(getQueryParameters().getUpdated()).thenReturn(dstVm); getQuery().executeQueryCommand(); assertTrue(((List<String>) getQuery().getQueryReturnValue().getReturnValue()).isEmpty()); } @Test public void testDifferentCpuPerSocketOnly() { VM srcVm = createEmptyVm(); VM dstVm = createEmptyVm(); srcVm.setCpuPerSocket(4); dstVm.setCpuPerSocket(5); when(getQueryParameters().getOriginal()).thenReturn(srcVm); when(getQueryParameters().getUpdated()).thenReturn(dstVm); getQuery().executeQueryCommand(); assertFalse(((List<String>) getQuery().getQueryReturnValue().getReturnValue()).isEmpty()); } @Test public void testDifferentVms() { VM srcVm = createEmptyVm(); VM dstVm = createEmptyVm(); // field that should not count srcVm.setUseLatestVersion(false); dstVm.setUseLatestVersion(true); srcVm.setName("a"); dstVm.setName("b"); // some equal fields srcVm.setComment("my comment.."); dstVm.setComment("my comment.."); srcVm.setOriginalTemplateName("template4"); dstVm.setOriginalTemplateName("template4"); srcVm.setVmMemSizeMb(128); dstVm.setVmMemSizeMb(128); // changes for next run srcVm.setCustomProperties("prop=value"); dstVm.setCustomProperties("prop=value2"); srcVm.setUsbPolicy(UsbPolicy.DISABLED); dstVm.setUsbPolicy(UsbPolicy.ENABLED_NATIVE); srcVm.setStateless(true); dstVm.setStateless(false); srcVm.setUseHostCpuFlags(true); dstVm.setUseHostCpuFlags(false); when(getQueryParameters().getOriginal()).thenReturn(srcVm); when(getQueryParameters().getUpdated()).thenReturn(dstVm); getQuery().executeQueryCommand(); assertFalse(((List<String>) getQuery().getQueryReturnValue().getReturnValue()).isEmpty()); } @Test public void testSameVms() { VM srcVm = createEmptyVm(); VM dstVm = createEmptyVm(); // field that should not count srcVm.setUseLatestVersion(false); dstVm.setUseLatestVersion(true); // some equal fields srcVm.setName("a"); dstVm.setName("a"); srcVm.setComment("my comment.."); dstVm.setComment("my comment.."); srcVm.setOriginalTemplateName("template4"); dstVm.setOriginalTemplateName("template4"); srcVm.setVmMemSizeMb(128); dstVm.setVmMemSizeMb(128); // changes for next run srcVm.setCustomProperties("prop=value"); dstVm.setCustomProperties("prop=value"); srcVm.setUsbPolicy(UsbPolicy.ENABLED_NATIVE); dstVm.setUsbPolicy(UsbPolicy.ENABLED_NATIVE); srcVm.setStateless(true); dstVm.setStateless(true); srcVm.setUseHostCpuFlags(true); dstVm.setUseHostCpuFlags(true); when(getQueryParameters().getOriginal()).thenReturn(srcVm); when(getQueryParameters().getUpdated()).thenReturn(dstVm); getQuery().executeQueryCommand(); assertTrue(((List<String>) getQuery().getQueryReturnValue().getReturnValue()).isEmpty()); } }