package org.ovirt.engine.ui.uicommonweb.models.vms;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import java.util.ArrayList;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.ConsoleDisconnectAction;
import org.ovirt.engine.core.common.businessentities.SerialNumberPolicy;
import org.ovirt.engine.core.common.businessentities.SsoMethod;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
public abstract class BaseVmModelBehaviorTest extends BaseVmTest {
protected void setUpVm(VmBase vm) {
vm.setName(VM_NAME);
vm.setDescription(DESCRIPTION);
vm.setComment(COMMENT);
vm.setOsId(OS_TYPE);
vm.setMemSizeMb(MEM_SIZE);
vm.setMinAllocatedMem(MIN_MEM);
vm.setUsbPolicy(USB_POLICY);
vm.setNumOfMonitors(NUM_OF_MONITORS);
vm.setNumOfSockets(NUM_OF_SOCKETS);
vm.setCpuPerSocket(TOTAL_CPU / NUM_OF_SOCKETS);
vm.setAllowConsoleReconnect(true);
vm.setStateless(true);
vm.setRunAndPause(true);
vm.setBootMenuEnabled(true);
vm.setVncKeyboardLayout(VNC_KEYBOARD_LAYOUT);
vm.setDeleteProtected(true);
vm.setSsoMethod(SsoMethod.GUEST_AGENT);
vm.setKernelParams(KERNEL_PARAMS);
vm.setKernelUrl(KERNEL_PATH);
vm.setInitrdUrl(INITRD_PATH);
vm.setSerialNumberPolicy(SerialNumberPolicy.CUSTOM);
vm.setCustomSerialNumber(CUSTOM_SERIAL_NUMBER);
vm.setSpiceCopyPasteEnabled(true);
vm.setSpiceFileTransferEnabled(true);
vm.setMigrationDowntime(MIGRATION_DOWNTIME);
vm.setSmartcardEnabled(true);
vm.setDefaultBootSequence(BOOT_SEQUENCE);
vm.setSingleQxlPci(true);
vm.setAutoConverge(true);
vm.setMigrateCompressed(true);
vm.setLargeIconId(LARGE_ICON_ID);
vm.setSmallIconId(SMALL_ICON_ID);
vm.setNumOfIoThreads(NUM_OF_IO_THREADS);
vm.setConsoleDisconnectAction(ConsoleDisconnectAction.LOCK_SCREEN);
}
@Before
public void setUpVmBase() {
setUpVm(getVm());
}
@Before
public void setUpIconCache() {
TWO_ICONS_ICON_CACHE.inject();
}
@After
public void tearDownIconCache() {
IconCacheBaseVmModelMock.removeMock();
}
@Test
public void testBuildModel() {
VmModelBehaviorBase behavior = getBehavior();
final UnitVmModel model = initModel(behavior);
behavior.buildModel(getVm(), (source, destination) -> verifyBuiltModel(model));
}
protected abstract VmBase getVm();
protected abstract VmModelBehaviorBase getBehavior();
protected abstract void verifyBuiltModel(UnitVmModel model);
protected UnitVmModel initModel(VmModelBehaviorBase behavior) {
final Cluster cluster = new Cluster();
cluster.setCompatibilityVersion(CLUSTER_VERSION);
UnitVmModel model = spy(createModel(behavior));
doReturn(cluster).when(model).getSelectedCluster();
doReturn(new EntityModel<>(true)).when(model).getIsSingleQxlEnabled();
model.initialize(null);
model.getInstanceImages().setItems(new ArrayList<InstanceImageLineModel>());
return model;
}
protected UnitVmModel createModel(VmModelBehaviorBase behavior) {
return new UnitVmModel(behavior, null);
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder} */
protected void verifyBuiltNameAndDescription(UnitVmModel model) {
assertEquals(VM_NAME, model.getName().getEntity());
assertEquals(DESCRIPTION, model.getDescription().getEntity());
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.CommentVmBaseToUnitBuilder} */
protected void verifyBuiltComment(UnitVmModel model) {
assertEquals(COMMENT, model.getComment().getEntity());
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.CommonVmBaseToUnitBuilder} */
protected void verifyBuiltCommon(UnitVmModel model) {
verifyBuiltCore(model);
verifyBuiltHardware(model);
assertEquals(OS_TYPE, (int) model.getOSType().getSelectedItem());
assertTrue(model.getAllowConsoleReconnect().getEntity());
assertTrue(model.getIsStateless().getEntity());
assertTrue(model.getIsRunAndPause().getEntity());
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.CoreVmBaseToUnitBuilder} */
protected void verifyBuiltCore(UnitVmModel model) {
verifyBuiltKernelParams(model);
verifyBuiltSerialNumber(model);
assertTrue(model.getBootMenuEnabled().getEntity());
assertEquals(VNC_KEYBOARD_LAYOUT, model.getVncKeyboardLayout().getSelectedItem());
assertTrue(model.getIsDeleteProtected().getEntity());
assertTrue(model.getSsoMethodGuestAgent().getEntity());
assertTrue(model.getSpiceFileTransferEnabled().getEntity());
assertTrue(model.getSpiceCopyPasteEnabled().getEntity());
assertTrue(model.getAutoConverge().getSelectedItem());
assertTrue(model.getMigrateCompressed().getSelectedItem());
assertEquals(LARGE_ICON_DATA, model.getIcon().getEntity().getIcon());
assertEquals(LARGE_OS_DEFAULT_ICON_DATA, model.getIcon().getEntity().getOsDefaultIcon());
assertEquals(ConsoleDisconnectAction.LOCK_SCREEN, model.getConsoleDisconnectAction().getSelectedItem());
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.SerialNumberPolicyVmBaseToUnitBuilder} */
protected void verifyBuiltSerialNumber(UnitVmModel model) {
assertEquals(SERIAL_NUMBER_POLICY, model.getSerialNumberPolicy().getSelectedSerialNumberPolicy());
assertEquals(CUSTOM_SERIAL_NUMBER, model.getSerialNumberPolicy().getCustomSerialNumber().getEntity());
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.KernelParamsVmBaseToUnitBuilder} */
protected void verifyBuiltKernelParams(UnitVmModel model) {
assertEquals(KERNEL_PARAMS, model.getKernel_parameters().getEntity());
assertEquals(KERNEL_PATH, model.getKernel_path().getEntity());
assertEquals(INITRD_PATH, model.getInitrd_path().getEntity());
}
/** Verifies {@link org.ovirt.engine.ui.uicommonweb.builders.vm.HwOnlyVmBaseToUnitBuilder} */
protected void verifyBuiltHardware(UnitVmModel model) {
assertEquals(MEM_SIZE, (int) model.getMemSize().getEntity());
assertEquals(MIN_MEM, (int) model.getMinAllocatedMemory().getEntity());
assertEquals(USB_POLICY, model.getUsbPolicy().getSelectedItem());
assertEquals(NUM_OF_MONITORS, (int) model.getNumOfMonitors().getSelectedItem());
assertTrue(model.getIsSingleQxlEnabled().getEntity());
assertEquals(BOOT_SEQUENCE, model.getBootSequence());
assertEquals(Integer.toString(TOTAL_CPU), model.getTotalCPUCores().getEntity());
assertEquals(NUM_OF_SOCKETS, (int) model.getNumOfSockets().getSelectedItem());
assertTrue(model.getIsSmartcardEnabled().getEntity());
assertEquals(MIGRATION_DOWNTIME, model.getSelectedMigrationDowntime());
assertEquals(NUM_OF_IO_THREADS, model.getNumOfIoThreads().getEntity());
}
}