package enhancedsnapshots.dto.converter;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.Volume;
import com.amazonaws.services.ec2.model.VolumeAttachment;
import com.sungardas.enhancedsnapshots.dto.VolumeDto;
import com.sungardas.enhancedsnapshots.dto.converter.VolumeDtoConverter;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
//TODO
@Ignore
public class VolumeDtoConverterTest {
private static final String VOLUME_NAME = "First";
private static final String VOLUME_ID = "vol-69dee6a09b";
private static final int SIZE = 5;
private static final String VOLUME_TYPE = "gp2";
private static final String SNAPSHOT_ID = "snap-bf56423yds";
private static final Date CREATE_TIME = new Date(1437477836902L);
private static final String AVAILABILITY_ZONE = "us-east-1e";
private static final String STATE = "in use";
private static final String INSTANCE_ID = "i-d751bf7c7sd";
private List<Tag> tags;
@Before
public void setUp() {
tags = new ArrayList<>();
tags.add(new Tag("Name", VOLUME_NAME));
}
@Test
public void convertVolumeToVolumeDto() {
// convert volume without attachments
Volume volume = createVolume(VOLUME_ID, SNAPSHOT_ID, CREATE_TIME, AVAILABILITY_ZONE, SIZE, STATE, tags, null);
VolumeDto volumeDto = VolumeDtoConverter.convert(volume);
assertVolumeDtoFields(volumeDto, VOLUME_ID, SNAPSHOT_ID, CREATE_TIME, AVAILABILITY_ZONE, SIZE, STATE, tags, null);
// convert attached volume
volume = createVolume(VOLUME_ID, SNAPSHOT_ID, CREATE_TIME, AVAILABILITY_ZONE, SIZE, STATE, tags, INSTANCE_ID);
volumeDto = VolumeDtoConverter.convert(volume);
assertVolumeDtoFields(volumeDto, VOLUME_ID, SNAPSHOT_ID, CREATE_TIME, AVAILABILITY_ZONE, SIZE, STATE, tags, INSTANCE_ID);
// add field to volume that is missing in VolumeDto object
volume.setVolumeType(VOLUME_TYPE);
Assert.assertTrue(volumeDto.equals(VolumeDtoConverter.convert(volume)));
}
@Test
public void convertVolumeList() {
List<Volume> volumeList = new ArrayList<>();
//with tags
volumeList.add(createVolume(VOLUME_ID, SNAPSHOT_ID, CREATE_TIME, AVAILABILITY_ZONE, SIZE, STATE, tags, INSTANCE_ID));
// without tags
volumeList.add(createVolume(VOLUME_ID + "_", SNAPSHOT_ID + "_", CREATE_TIME, AVAILABILITY_ZONE + "_",
SIZE + 1, STATE + "_", new ArrayList<Tag>(), INSTANCE_ID + "_"));
Set<VolumeDto> volumeDtoList = VolumeDtoConverter.convert(volumeList);
Assert.assertTrue(volumeDtoList.size() == 2);
assertVolumeDtoFields((VolumeDto) volumeDtoList.toArray()[0], VOLUME_ID, SNAPSHOT_ID, CREATE_TIME, AVAILABILITY_ZONE, SIZE, STATE, tags, INSTANCE_ID);
assertVolumeDtoFields((VolumeDto) volumeDtoList.toArray()[1], VOLUME_ID + "_", SNAPSHOT_ID + "_", CREATE_TIME, AVAILABILITY_ZONE + "_",
SIZE + 1, STATE + "_", new ArrayList<Tag>(), INSTANCE_ID + "_");
}
private Volume createVolume(String volId, String snapId, Date createDate, String zone, int size, String state, List<Tag> tags, String instance_id) {
Volume volume = new Volume();
volume.setVolumeId(volId);
volume.setSnapshotId(snapId);
volume.setCreateTime(createDate);
volume.setAvailabilityZone(zone);
volume.setState(state);
volume.setSize(size);
volume.setTags(tags);
if (instance_id != null) {
List<VolumeAttachment> volumeAttachmentList = new ArrayList();
VolumeAttachment volumeAttachment = new VolumeAttachment();
volumeAttachment.setInstanceId(instance_id);
volumeAttachmentList.add(volumeAttachment);
volume.setAttachments(volumeAttachmentList);
}
return volume;
}
private void assertVolumeDtoFields(VolumeDto volumeDto, String volId, String snapId, Date createDate, String zone, int size,
String state, List<Tag> tags, String instance_id) {
Assert.assertTrue(volumeDto.getVolumeId().equals(volId));
Assert.assertTrue(volumeDto.getSnapshotId().equals(snapId));
Assert.assertTrue(volumeDto.getCreateTime().equals(createDate));
Assert.assertTrue(volumeDto.getAvailabilityZone().equals(zone));
Assert.assertTrue(volumeDto.getState().equals(state));
Assert.assertTrue(volumeDto.getSize() == size);
Assert.assertTrue(volumeDto.getTags().equals(tags));
if (instance_id != null) {
Assert.assertTrue(volumeDto.getInstanceID().equals(instance_id));
}
}
}