package org.ovirt.engine.api.restapi.resource; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.ovirt.engine.api.restapi.resource.BackendClusterNetworksResourceTest.CLUSTER_ID; import java.util.ArrayList; import javax.ws.rs.WebApplicationException; import org.junit.Test; import org.ovirt.engine.api.model.Network; import org.ovirt.engine.api.model.NetworkUsage; import org.ovirt.engine.core.common.action.AttachNetworkToClusterParameter; import org.ovirt.engine.core.common.action.NetworkClusterParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendClusterNetworkResourceTest extends AbstractBackendNetworkResourceTest<BackendClusterNetworkResource> { public BackendClusterNetworkResourceTest() { super(new BackendClusterNetworkResource(CLUSTER_ID.toString(), new BackendClusterNetworksResource(CLUSTER_ID.toString()))); } @Test public void testBadGuid() throws Exception { try { new BackendClusterNetworkResource("foo", null); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } @Test public void testGetNotFound() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetAllNetworksByClusterId, IdQueryParameters.class, new String[] { "Id" }, new Object[] { CLUSTER_ID }, new ArrayList<org.ovirt.engine.core.common.businessentities.network.Network>()); try { resource.get(); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } @Test public void testGet() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(1, false, false, false, false); verifyModel(resource.get(), 1); } @Test public void testUpdate() throws Exception { setUpEntityQueryExpectations(1, false, false, false, false); setUpEntityQueryExpectations(1, true, true, true, true); setUpClusterExpectations(GUIDS[1]); setUriInfo(setUpActionExpectations(VdcActionType.UpdateNetworkOnCluster, NetworkClusterParameters.class, new String[] {}, new Object[] {}, true, true)); verifyUpdate(resource.update(getModel(0))); } @Test public void testRemoveNotFound() throws Exception { setUpEntityQueryExpectations( VdcQueryType.GetAllNetworksByClusterId, IdQueryParameters.class, new String[] { "Id" }, new Object[] { CLUSTER_ID }, new ArrayList<org.ovirt.engine.core.common.businessentities.network.Network>() ); try { resource.remove(); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } @Test public void testRemove() throws Exception { setUpClusterExpectations(CLUSTER_ID); setUpEntityQueryExpectations(2, false, false, false, false); setUriInfo( setUpActionExpectations( VdcActionType.DetachNetworkToCluster, AttachNetworkToClusterParameter.class, new String[] { "ClusterId" }, new Object[] { CLUSTER_ID }, true, true ) ); verifyRemove(resource.remove()); } @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 valid, boolean success, String detail) throws Exception { setUpClusterExpectations(CLUSTER_ID); setUpEntityQueryExpectations(2, false, false, false, false); setUriInfo( setUpActionExpectations( VdcActionType.DetachNetworkToCluster, AttachNetworkToClusterParameter.class, new String[] { "ClusterId" }, new Object[] { CLUSTER_ID }, valid, success ) ); try { resource.remove(); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } protected Cluster setUpClusterExpectations(Guid id) { Cluster group = mock(Cluster.class); when(group.getId()).thenReturn(id); setUpEntityQueryExpectations(VdcQueryType.GetClusterById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { id }, group); return group; } private Network getModel(int i) { Network network = new Network(); network.setId(GUIDS[i].toString()); network.setName(NAMES[i]); network.setDisplay(true); return network; } protected void verifyUpdate(Network model) { assertTrue(model.isSetDisplay()); assertEquals(true, model.isDisplay()); assertTrue(model.isSetUsages()); assertNotNull(model.getUsages().getUsages()); assertTrue(model.getUsages().getUsages().contains(NetworkUsage.DISPLAY)); assertTrue(model.getUsages().getUsages().contains(NetworkUsage.MIGRATION)); assertTrue(model.getUsages().getUsages().contains(NetworkUsage.DEFAULT_ROUTE)); assertTrue(model.isSetRequired()); assertEquals(true, model.isRequired()); } protected void setUpEntityQueryExpectations(int times, boolean isDisplay, boolean isMigration, boolean isRequired, boolean isDefaultRoute) throws Exception { while (times-- > 0) { setUpEntityQueryExpectations(VdcQueryType.GetAllNetworksByClusterId, IdQueryParameters.class, new String[] { "Id" }, new Object[] { CLUSTER_ID }, getEntityList(isDisplay, isMigration, isRequired, isDefaultRoute)); } } }