package org.ovirt.engine.api.restapi.types;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.ovirt.engine.api.model.GlusterBrick;
import org.ovirt.engine.api.model.GlusterBrickAdvancedDetails;
import org.ovirt.engine.core.common.businessentities.gluster.BrickDetails;
import org.ovirt.engine.core.common.businessentities.gluster.BrickProperties;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterClientInfo;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeAdvancedDetails;
import org.ovirt.engine.core.common.businessentities.gluster.MallInfo;
import org.ovirt.engine.core.common.businessentities.gluster.MemoryStatus;
import org.ovirt.engine.core.common.businessentities.gluster.Mempool;
import org.ovirt.engine.core.utils.RandomUtils;
public class GlusterBrickDetailMapperTest extends AbstractInvertibleMappingTest<GlusterBrick, GlusterVolumeAdvancedDetails, GlusterVolumeAdvancedDetails> {
public GlusterBrickDetailMapperTest() {
super(GlusterBrick.class, GlusterVolumeAdvancedDetails.class,
GlusterVolumeAdvancedDetails.class);
}
@Override
protected void verify(GlusterBrick model, GlusterBrick transform) {
assertNotNull(transform);
}
@Test
public void testWithAllDetails() {
GlusterVolumeAdvancedDetails volDetailsEntity = new GlusterVolumeAdvancedDetails();
volDetailsEntity.setBrickDetails(getBrickDetails(1, 2, 4));
GlusterBrickAdvancedDetails model = GlusterBrickDetailMapper.map(volDetailsEntity, null);
assertNotNull(model);
assertEquals(2, model.getGlusterClients().getGlusterClients().size());
assertEquals(model.getMntOptions(), volDetailsEntity.getBrickDetails().get(0).getBrickProperties().getMntOptions());
assertEquals(model.getMemoryPools().getGlusterMemoryPools().size(), volDetailsEntity.getBrickDetails().get(0).getMemoryStatus().getMemPools().size());
}
@Test
public void testWithNoLists() {
GlusterVolumeAdvancedDetails volDetailsEntity = new GlusterVolumeAdvancedDetails();
volDetailsEntity.setBrickDetails(getBrickDetails(0, 0, 0));
GlusterBrickAdvancedDetails model = GlusterBrickDetailMapper.map(volDetailsEntity, null);
assertNotNull(model);
assertNull(model.getGlusterClients());
assertNull(model.getMntOptions());
}
@Test
public void testWithMultipleClientLists() {
GlusterVolumeAdvancedDetails volDetailsEntity = new GlusterVolumeAdvancedDetails();
volDetailsEntity.setBrickDetails(getBrickDetails(2, 2, 2));
GlusterBrickAdvancedDetails model = GlusterBrickDetailMapper.map(volDetailsEntity, null);
assertEquals(2, model.getGlusterClients().getGlusterClients().size());
assertEquals(model.getMntOptions(), volDetailsEntity.getBrickDetails().get(0).getBrickProperties().getMntOptions());
assertEquals(model.getMemoryPools().getGlusterMemoryPools().size(), volDetailsEntity.getBrickDetails().get(0).getMemoryStatus().getMemPools().size());
}
@Test
public void testWithNullChildObjects() {
GlusterVolumeAdvancedDetails volDetailsEntity = new GlusterVolumeAdvancedDetails();
volDetailsEntity.setBrickDetails(getBrickDetails(1, 0, 0));
volDetailsEntity.getBrickDetails().get(0).setClients(null);
volDetailsEntity.getBrickDetails().get(0).setMemoryStatus(null);
GlusterBrickAdvancedDetails model = GlusterBrickDetailMapper.map(volDetailsEntity, null);
assertNotNull(model);
assertNull(model.getGlusterClients());
assertEquals(model.getMntOptions(), volDetailsEntity.getBrickDetails().get(0).getBrickProperties().getMntOptions());
assertNull(model.getMemoryPools());
}
private List<BrickDetails> getBrickDetails(int size, int clientListSize, int memPoolSize) {
ArrayList<BrickDetails> list = new ArrayList<>();
for(int i=0; i < size; i++) {
BrickDetails details = new BrickDetails();
BrickProperties props = new BrickProperties();
props.setBlockSize(14556);
props.setPid(88888);
props.setMntOptions("rw");
details.setBrickProperties(props);
details.setClients(getClientList(clientListSize));
details.setMemoryStatus(getMemoryStatus(memPoolSize));
list.add(details);
}
return list;
}
private MemoryStatus getMemoryStatus(int listSize) {
MemoryStatus memStatus = new MemoryStatus();
memStatus.setMallInfo(new MallInfo());
memStatus.getMallInfo().setArena(RandomUtils.instance().nextInt());
memStatus.getMallInfo().setUordblks(RandomUtils.instance().nextInt());
ArrayList<Mempool> memPoolsList = new ArrayList<>();
for(int i=0; i < listSize; i++) {
Mempool pool = new Mempool();
pool.setAllocCount(RandomUtils.instance().nextInt());
pool.setHotCount(0);
pool.setName(RandomUtils.instance().nextString(5));
memPoolsList.add(pool);
}
memStatus.setMemPools(memPoolsList);
return memStatus;
}
private List<GlusterClientInfo> getClientList(int listSize) {
ArrayList<GlusterClientInfo> list = new ArrayList<>();
for(int i=0; i < listSize; i++) {
GlusterClientInfo clientInfo = new GlusterClientInfo();
clientInfo.setBytesRead(RandomUtils.instance().nextLong());
clientInfo.setBytesWritten(RandomUtils.instance().nextLong());
clientInfo.setClientPort(RandomUtils.instance().nextInt());
clientInfo.setHostname(RandomUtils.instance().nextString(7));
list.add(clientInfo);
}
return list;
}
}