package org.ovirt.engine.api.restapi.resource; import org.junit.Test; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.CdRom; import org.ovirt.engine.api.model.File; import org.ovirt.engine.api.resource.DeviceResource; import org.ovirt.engine.core.common.action.VmManagementParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; public class BackendCdRomsResourceTest extends AbstractBackendCdRomsResourceTest<BackendCdRomsResource> { public BackendCdRomsResourceTest() { super(new BackendCdRomsResource(PARENT_ID, VdcQueryType.GetVmByVmId, new GetVmByVmIdParameters(PARENT_ID)), VdcQueryType.GetVmByVmId, new GetVmByVmIdParameters(PARENT_ID), "Id"); } @Test public void testRemove() throws Exception { setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId, GetVmByVmIdParameters.class, new String[] { "Id" }, new Object[] { PARENT_ID }, getEntity(0), 2); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, VmManagementParametersBase.class, new String[] {}, new Object[] {}, true, true)); verifyRemove(collection.remove(GUIDS[0].toString())); } @Test public void testRemoveNonExistant() throws Exception{ setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId, GetVmByVmIdParameters.class, new String[] { "Id" }, new Object[] { PARENT_ID }, new VM(), 1); control.replay(); try { collection.remove(NON_EXISTANT_GUID.toString()); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { assertNotNull(wae.getResponse()); assertEquals(wae.getResponse().getStatus(), 404); } } @Test public void testRemoveCantDo() throws Exception { doTestBadRemove(false, true, CANT_DO); } @Test public void testRemoveFailed() throws Exception { doTestBadRemove(true, false, FAILURE); } protected void doTestBadRemove(boolean canDo, boolean success, String detail) throws Exception { setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId, GetVmByVmIdParameters.class, new String[] { "Id" }, new Object[] { PARENT_ID }, getEntity(0), 2); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, VmManagementParametersBase.class, new String[] {}, new Object[] {}, canDo, success)); try { collection.remove(GUIDS[0].toString()); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } @Test public void testAddCdRom() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId, GetVmByVmIdParameters.class, new String[] { "Id" }, new Object[] { PARENT_ID }, getEntity(0), 1); setUpCreationExpectations(VdcActionType.UpdateVm, VmManagementParametersBase.class, new String[] {}, new Object[] {}, true, true, null, VdcQueryType.GetVmByVmId, GetVmByVmIdParameters.class, new String[] { "Id" }, new Object[] { PARENT_ID }, getEntity(0)); CdRom model = getModel(0); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof CdRom); verifyModel((CdRom) response.getEntity(), 0); } @Test public void testAddCdRomCantDo() throws Exception { doTestBadAddCdRom(false, true, CANT_DO); } @Test public void testAddCdRomFailure() throws Exception { doTestBadAddCdRom(true, false, FAILURE); } private void doTestBadAddCdRom(boolean canDo, boolean success, String detail) throws Exception { setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId, GetVmByVmIdParameters.class, new String[] { "Id" }, new Object[] { PARENT_ID }, getEntity(0), 1); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, VmManagementParametersBase.class, new String[] {}, new Object[] {}, canDo, success)); CdRom model = getModel(0); try { collection.add(model); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } @Test public void testAddIncompleteParameters() throws Exception { CdRom model = new CdRom(); model.setName(NAMES[0]); model.setFile(new File()); setUriInfo(setUpBasicUriExpectations()); control.replay(); try { collection.add(model); fail("expected WebApplicationException on incomplete parameters"); } catch (WebApplicationException wae) { verifyIncompleteException(wae, "CdRom", "add", "file.id"); } } @Test public void testSubResourceLocator() throws Exception { control.replay(); assertTrue(collection.getDeviceSubResource(GUIDS[0].toString()) instanceof DeviceResource); } @Test public void testSubResourceLocatorBadGuid() throws Exception { control.replay(); try { collection.getDeviceSubResource("foo"); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } protected void setUpEntityQueryExpectations(VdcQueryType query, Class<? extends VdcQueryParametersBase> queryClass, String[] queryNames, Object[] queryValues, Object queryReturn, int times) { while (times-->0) { setUpEntityQueryExpectations(query, queryClass, queryNames, queryValues, queryReturn); } } }