package org.ovirt.engine.api.restapi.resource; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import org.junit.Test; import org.ovirt.engine.api.model.DataCenter; import org.ovirt.engine.api.model.Network; import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendNetworksResourceTest extends AbstractBackendNetworksResourceTest<BackendNetworksResource> { private static final Guid DATA_CENTER_ID = GUIDS[1]; public BackendNetworksResourceTest() { super(new BackendNetworksResource(), SearchType.Network, "Networks : "); } @Test public void testAddNetwork() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpCreationExpectations(VdcActionType.AddNetwork, AddNetworkStoragePoolParameters.class, new String[] { "StoragePoolId" }, new Object[] { DATA_CENTER_ID }, true, true, null, //GUIDS[0], VdcQueryType.GetAllNetworks, IdQueryParameters.class, new String[] { "Id" }, new Object[] { Guid.Empty }, asList(getEntity(0))); Network model = getModel(0); model.setDataCenter(new DataCenter()); model.getDataCenter().setId(DATA_CENTER_ID.toString()); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Network); verifyModel((Network) response.getEntity(), 0); } @Test public void testAddNetworkWithNamedDataCenter() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetStoragePoolByDatacenterName, NameQueryParameters.class, new String[] { "Name" }, new Object[] { NAMES[1] }, setUpStoragePool(DATA_CENTER_ID)); setUpCreationExpectations(VdcActionType.AddNetwork, AddNetworkStoragePoolParameters.class, new String[] { "StoragePoolId" }, new Object[] { DATA_CENTER_ID }, true, true, null, //GUIDS[0], VdcQueryType.GetAllNetworks, IdQueryParameters.class, new String[] { "Id" }, new Object[] { Guid.Empty }, asList(getEntity(0))); Network model = getModel(0); model.setDataCenter(new DataCenter()); model.getDataCenter().setName(NAMES[1]); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Network); verifyModel((Network) response.getEntity(), 0); } @Test public void testAddNetworkCantDo() throws Exception { doTestBadAddNetwork(false, true, CANT_DO); } @Test public void testAddNetworkFailure() throws Exception { doTestBadAddNetwork(true, false, FAILURE); } private void doTestBadAddNetwork(boolean valid, boolean success, String detail) throws Exception { setUriInfo(setUpActionExpectations(VdcActionType.AddNetwork, AddNetworkStoragePoolParameters.class, new String[] { "StoragePoolId" }, new Object[] { DATA_CENTER_ID }, valid, success)); Network model = getModel(0); model.setDataCenter(new DataCenter()); model.getDataCenter().setId(DATA_CENTER_ID.toString()); try { collection.add(model); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } @Test public void testAddIncompleteParameters() throws Exception { Network model = new Network(); model.setName(NAMES[0]); setUriInfo(setUpBasicUriExpectations()); try { collection.add(model); fail("expected WebApplicationException on incomplete parameters"); } catch (WebApplicationException wae) { verifyIncompleteException(wae, "Network", "add", "dataCenter.name|id"); } } @Test public void testQueryWithFilter() throws Exception { List<String> filterValue = new ArrayList<>(); filterValue.add("true"); reset(httpHeaders); when(httpHeaders.getRequestHeader(USER_FILTER_HEADER)).thenReturn(filterValue); setUpEntityQueryExpectations(1); setUriInfo(setUpBasicUriExpectations()); List<Network> networks = getCollection(); Collections.sort(networks, new NetworkIdComparator()); verifyCollection(networks); } protected void setUpEntityQueryExpectations(int times, Object failure) throws Exception { while (times-- > 0) { setUpEntityQueryExpectations(VdcQueryType.GetAllNetworks, IdQueryParameters.class, new String[] { "Id" }, new Object[] { Guid.Empty }, getEntityList(), failure); } } protected StoragePool setUpStoragePool(Guid id) { StoragePool pool = mock(StoragePool.class); when(pool.getId()).thenReturn(id); return pool; } class NetworkIdComparator implements Comparator<Network>{ @Override public int compare(Network n1, Network n2) { if (n1.getId().equals(n2.getId())) { return 0; } else { return n1.getId().compareTo(n2.getId()); } } } }