package org.ovirt.engine.api.restapi.resource; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; 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.Cpu; import org.ovirt.engine.api.model.DataCenter; import org.ovirt.engine.api.model.Version; import org.ovirt.engine.core.common.action.ManagementNetworkOnClusterOperationParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.MigrationBandwidthLimitType; 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; public class BackendClustersResourceTest extends AbstractBackendCollectionResourceTest<org.ovirt.engine.api.model.Cluster, Cluster, BackendClustersResource> { public BackendClustersResourceTest() { super(new BackendClustersResource(), SearchType.Cluster, "Clusters : "); } @Test public void testAddClusterFallbackVersion() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpGetEntityExpectations(VdcQueryType.GetStoragePoolById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, setUpStoragePool(-1)); setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, null); setUpCreationExpectations(VdcActionType.AddCluster, ManagementNetworkOnClusterOperationParameters.class, new String[] { "Cluster.CompatibilityVersion" }, new Object[] { new org.ovirt.engine.core.compat.Version(2, 2) }, true, true, GUIDS[0], VdcQueryType.GetClusterById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, getEntity(0)); org.ovirt.engine.api.model.Cluster model = getModel(0); model.getDataCenter().setId(GUIDS[1].toString()); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof org.ovirt.engine.api.model.Cluster); verifyModel((org.ovirt.engine.api.model.Cluster) response.getEntity(), 0); } @Test public void testAddClusterSpecificVersion() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpGetEntityExpectations(VdcQueryType.GetStoragePoolById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, setUpStoragePool(-1)); setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, null); setUpCreationExpectations(VdcActionType.AddCluster, ManagementNetworkOnClusterOperationParameters.class, new String[] { "Cluster.CompatibilityVersion" }, new Object[] { new org.ovirt.engine.core.compat.Version(2, 3) }, true, true, GUIDS[0], VdcQueryType.GetClusterById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, getEntity(0)); org.ovirt.engine.api.model.Cluster model = getModel(0); model.getDataCenter().setId(GUIDS[1].toString()); model.setVersion(new Version()); model.getVersion().setMajor(2); model.getVersion().setMinor(3); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof org.ovirt.engine.api.model.Cluster); verifyModel((org.ovirt.engine.api.model.Cluster) response.getEntity(), 0); } @Test public void testAddClusterCantDo() throws Exception { doTestBadAddCluster(false, true, CANT_DO); } @Test public void testAddClusterFailure() throws Exception { doTestBadAddCluster(true, false, FAILURE); } private void doTestBadAddCluster(boolean valid, boolean success, String detail) throws Exception { setUpGetEntityExpectations(VdcQueryType.GetStoragePoolById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[1] }, setUpStoragePool(-1)); setUriInfo(setUpActionExpectations(VdcActionType.AddCluster, ManagementNetworkOnClusterOperationParameters.class, new String[] {}, new Object[] {}, valid, success)); org.ovirt.engine.api.model.Cluster model = getModel(0); model.getDataCenter().setId(GUIDS[1].toString()); try { collection.add(model); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } @Test public void testAddClusterNamedDataCenter() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetStoragePoolByDatacenterName, NameQueryParameters.class, new String[] { "Name" }, new Object[] { NAMES[1] }, setUpStoragePool(1)); setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, null); setUpCreationExpectations(VdcActionType.AddCluster, ManagementNetworkOnClusterOperationParameters.class, new String[] {}, new Object[] {}, true, true, GUIDS[0], VdcQueryType.GetClusterById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, getEntity(0)); org.ovirt.engine.api.model.Cluster model = getModel(0); model.getDataCenter().setName(NAMES[1]); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof org.ovirt.engine.api.model.Cluster); verifyModel((org.ovirt.engine.api.model.Cluster) response.getEntity(), 0); } @Test public void testAddClusterCantDoNamedDataCenter() throws Exception { doTestBadAddClusterNamedDataCenter(false, true, CANT_DO); } @Test public void testAddClusterFailureNamedDataCenter() throws Exception { doTestBadAddClusterNamedDataCenter(true, false, FAILURE); } private void doTestBadAddClusterNamedDataCenter(boolean valid, boolean success, String detail) throws Exception { setUpEntityQueryExpectations(VdcQueryType.GetStoragePoolByDatacenterName, NameQueryParameters.class, new String[] { "Name" }, new Object[] { NAMES[1] }, setUpStoragePool(1)); setUriInfo(setUpActionExpectations(VdcActionType.AddCluster, ManagementNetworkOnClusterOperationParameters.class, new String[] {}, new Object[] {}, valid, success)); org.ovirt.engine.api.model.Cluster model = getModel(0); model.getDataCenter().setName(NAMES[1]); try { collection.add(model); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } @Test public void testAddIncompleteParameters() throws Exception { org.ovirt.engine.api.model.Cluster model = new org.ovirt.engine.api.model.Cluster(); model.setName(NAMES[0]); setUriInfo(setUpBasicUriExpectations()); try { collection.add(model); fail("expected WebApplicationException on incomplete parameters"); } catch (WebApplicationException wae) { verifyIncompleteException(wae, "Cluster", "add", "dataCenter.name|id"); } } protected StoragePool setUpStoragePool(int index) { StoragePool pool = mock(StoragePool.class); org.ovirt.engine.core.compat.Version version = new org.ovirt.engine.core.compat.Version(2, 2); if (index != -1) { when(pool.getId()).thenReturn(GUIDS[index]); } when(pool.getCompatibilityVersion()).thenReturn(version); return pool; } @Override protected Cluster getEntity(int index) { return setUpEntityExpectations(mock(Cluster.class), index); } static Cluster setUpEntityExpectations(Cluster entity, int index) { when(entity.getId()).thenReturn(GUIDS[index]); when(entity.getName()).thenReturn(NAMES[index]); when(entity.getDescription()).thenReturn(DESCRIPTIONS[index]); when(entity.getMigrationBandwidthLimitType()).thenReturn(MigrationBandwidthLimitType.AUTO); return entity; } static org.ovirt.engine.api.model.Cluster getModel(int index) { org.ovirt.engine.api.model.Cluster model = new org.ovirt.engine.api.model.Cluster(); model.setName(NAMES[index]); model.setDescription(DESCRIPTIONS[index]); model.setDataCenter(new DataCenter()); model.setCpu(new Cpu()); model.getCpu().setType("Intel Xeon"); return model; } @Override protected List<org.ovirt.engine.api.model.Cluster> getCollection() { return collection.list().getClusters(); } }