package org.ovirt.engine.api.restapi.resource; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.junit.Test; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.VmPool; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmPoolParametersBase; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.VmPayload; import org.ovirt.engine.core.common.businessentities.VmPoolType; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; public class BackendVmPoolsResourceTest extends AbstractBackendCollectionResourceTest<VmPool, org.ovirt.engine.core.common.businessentities.VmPool, BackendVmPoolsResource> { public BackendVmPoolsResourceTest() { super(new BackendVmPoolsResource(), SearchType.VmPools, "Pools : "); } @Override protected List<VmPool> getCollection() { return collection.list().getVmPools(); } @Override protected org.ovirt.engine.core.common.businessentities.VmPool getEntity(int index) { org.ovirt.engine.core.common.businessentities.VmPool entity = mock(org.ovirt.engine.core.common.businessentities.VmPool.class); when(entity.getVmPoolId()).thenReturn(GUIDS[index]); when(entity.getName()).thenReturn(NAMES[index]); when(entity.getVmPoolDescription()).thenReturn(DESCRIPTIONS[index]); when(entity.getVmPoolType()).thenReturn(VmPoolType.AUTOMATIC); when(entity.getClusterId()).thenReturn(GUIDS[2]); return entity; } protected org.ovirt.engine.core.common.businessentities.VmTemplate getTemplateEntity() { VmTemplate entity = mock(VmTemplate.class); when(entity.getId()).thenReturn(GUIDS[1]); when(entity.getClusterId()).thenReturn(GUIDS[2]); when(entity.getName()).thenReturn(NAMES[1]); when(entity.getDescription()).thenReturn(DESCRIPTIONS[1]); when(entity.getNumOfCpus()).thenReturn(8); when(entity.getNumOfSockets()).thenReturn(2); when(entity.getDefaultDisplayType()).thenReturn(DisplayType.vga); when(entity.getNumOfMonitors()).thenReturn(2); when(entity.getVmType()).thenReturn(VmType.Server); return entity; } protected org.ovirt.engine.core.common.businessentities.VM getVmEntity() { org.ovirt.engine.core.common.businessentities.VM entity = mock(org.ovirt.engine.core.common.businessentities.VM.class); when(entity.getId()).thenReturn(GUIDS[0]); when(entity.getStaticData()).thenReturn(new VmStatic()); return entity; } protected org.ovirt.engine.core.common.businessentities.Cluster getClusterEntity() { org.ovirt.engine.core.common.businessentities.Cluster entity = mock(org.ovirt.engine.core.common.businessentities.Cluster.class); when(entity.getId()).thenReturn(GUIDS[2]); return entity; } private VmPool getModel(int index) { VmPool model = new VmPool(); model.setName(NAMES[index]); model.setDescription(DESCRIPTIONS[index]); model.setId(GUIDS[index].toString()); model.setCluster(new Cluster()); model.getCluster().setId(GUIDS[2].toString()); model.setTemplate(new Template()); model.getTemplate().setId(GUIDS[1].toString()); return model; } @Test public void add() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetClusterById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[2] }, getClusterEntity()); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, GetVmTemplateParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, getTemplateEntity()); setUpGetConsoleExpectations(1); setUpGetEntityExpectations(VdcQueryType.GetVirtioScsiControllers, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, new ArrayList<>()); setUpGetEntityExpectations(VdcQueryType.GetSoundDevices, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, new ArrayList<>()); setUpGetRngDeviceExpectations(0); addCommonAddExpectations(); setUpCreationExpectations(VdcActionType.AddVmPool, VmPoolParametersBase.class, new String[] { "StorageDomainId" }, new Object[] { GUIDS[0] }, true, true, GUIDS[0], VdcQueryType.GetVmPoolById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, getEntity(0)); Response response = collection.add(getModel(0)); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof VmPool); verifyModelTemplate((VmPool) response.getEntity()); } @Test public void addWithName() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetClusterById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[2] }, getClusterEntity()); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, GetVmTemplateParameters.class, new String[] { "Name", "ClusterId" }, new Object[] { NAMES[1], GUIDS[2] }, getTemplateEntity()); setUpGetConsoleExpectations(1); setUpGetRngDeviceExpectations(0); setUpGetEntityExpectations(VdcQueryType.GetVirtioScsiControllers, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, new ArrayList<>()); setUpGetEntityExpectations(VdcQueryType.GetSoundDevices, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, new ArrayList<>()); addCommonAddExpectations(); setUpCreationExpectations(VdcActionType.AddVmPool, VmPoolParametersBase.class, new String[] { "StorageDomainId" }, new Object[] { GUIDS[0] }, true, true, GUIDS[0], VdcQueryType.GetVmPoolById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, getEntity(0)); VmPool pool = getModel(0); pool.setId(null); pool.getTemplate().setId(null); pool.getTemplate().setName(NAMES[1]); Response response = collection.add(pool); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof VmPool); verifyModelTemplate((VmPool) response.getEntity()); } @Test @Override public void testList() throws Exception { UriInfo uriInfo = setUpUriExpectations(null); setUpQueryExpectations(""); collection.setUriInfo(uriInfo); verifyCollection(getCollection()); } @Test @Override public void testQuery() throws Exception { UriInfo uriInfo = setUpUriExpectations(QUERY); setUpQueryExpectations(QUERY); collection.setUriInfo(uriInfo); verifyCollection(getCollection()); } protected void verifyModelTemplate(VmPool model) { super.verifyModel(model, 0); verifyModelSpecific(model); } static void verifyModelSpecific(VmPool model) { assertNotNull(model.getCluster()); assertEquals(GUIDS[2].toString(), model.getCluster().getId()); } private void addCommonAddExpectations() throws Exception { setUpGetEntityExpectations(VdcQueryType.GetVmDataByPoolName, NameQueryParameters.class, new String[] { "Name" }, new Object[] { NAMES[0] }, getVmEntity()); setUpGetEntityExpectations(VdcQueryType.GetVmPayload, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, new VmPayload()); setUpGetEntityExpectations(VdcQueryType.IsBalloonEnabled, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, Boolean.FALSE); setUpGetEntityExpectations(VdcQueryType.GetConsoleDevices, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, new ArrayList<>()); setUpGetEntityExpectations(VdcQueryType.GetVirtioScsiControllers, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, new ArrayList<>()); setUpGetEntityExpectations(VdcQueryType.GetSoundDevices, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, new ArrayList<>()); setUpGetEntityExpectations(VdcQueryType.GetRngDevice, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, new ArrayList<>()); } }