package org.ovirt.engine.api.restapi.types; import java.util.List; import org.junit.Test; import org.ovirt.engine.api.model.GlusterVolume; import org.ovirt.engine.api.model.GlusterVolumeStatus; import org.ovirt.engine.api.model.GlusterVolumeType; import org.ovirt.engine.api.model.Option; import org.ovirt.engine.api.model.TransportType; import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; public class GlusterVolumeMapperTest extends AbstractInvertibleMappingTest<GlusterVolume, GlusterVolumeEntity, GlusterVolumeEntity> { public GlusterVolumeMapperTest() { super(GlusterVolume.class, GlusterVolumeEntity.class, GlusterVolumeEntity.class); } @Override protected GlusterVolume postPopulate(GlusterVolume model) { // The model is pre-populated with randomly generated values. // This won't work for enum fields like volume type since it // must be a valid value from corresponding enum model.setVolumeType(GlusterVolumeType.DISTRIBUTE); List<TransportType> transportTypes = model.getTransportTypes().getTransportTypes(); transportTypes.clear(); transportTypes.add(TransportType.TCP); return model; } @Override protected void verify(GlusterVolume model, GlusterVolume transform) { assertNotNull(transform); assertNotNull(transform.getId()); assertEquals(model.getId(), transform.getId()); assertNotNull(transform.getName()); assertEquals(model.getName(), transform.getName()); assertNotNull(transform.getVolumeType()); assertEquals(model.getVolumeType(), transform.getVolumeType()); assertNotNull(transform.getTransportTypes()); assertArrayEquals(model.getTransportTypes().getTransportTypes().toArray(), transform.getTransportTypes().getTransportTypes().toArray()); assertNotNull(transform.getReplicaCount()); assertEquals(model.getReplicaCount(), transform.getReplicaCount()); assertNotNull(transform.getStripeCount()); assertEquals(model.getStripeCount(), transform.getStripeCount()); assertNotNull(transform.getDisperseCount()); assertEquals(model.getDisperseCount(), transform.getDisperseCount()); assertNotNull(transform.getRedundancyCount()); assertEquals(model.getRedundancyCount(), transform.getRedundancyCount()); verifyOptions(model, transform); } /** * this test was added to support 'status' field, which has only a one-way mapping (from Backend entity to REST * entity). The generic test does a round-trip, which would fail on status comparison when there's only one-way mapping. */ @Test public void testFromBackendToRest() { testStatusMapping(GlusterStatus.UP, GlusterVolumeStatus.UP); testStatusMapping(GlusterStatus.DOWN, GlusterVolumeStatus.DOWN); } private void testStatusMapping(GlusterStatus backendStatus, GlusterVolumeStatus restStatus) { GlusterVolumeEntity volume = new GlusterVolumeEntity(); volume.setStatus(backendStatus); GlusterVolume restVolume = GlusterVolumeMapper.map(volume, null); assertEquals(restVolume.getStatus(), restStatus); } private boolean containsOption(GlusterVolume volume, Option expectedOption) { for (Option option : volume.getOptions().getOptions()) { if (option.getName().equals(expectedOption.getName()) && option.getValue().equals(expectedOption.getValue())) { return true; } } return false; } private void verifyOptions(GlusterVolume model, GlusterVolume transform) { for (Option modelOption : model.getOptions().getOptions()) { assertTrue(containsOption(transform, modelOption)); } } }