package org.ovirt.engine.core.bll.storage.disk.cinder; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import org.junit.Test; import org.mockito.Mock; import org.ovirt.engine.core.bll.AbstractQueryTest; import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.DiskDao; import com.woorea.openstack.cinder.model.Volume; public class GetUnregisteredCinderDisksByStorageDomainIdQueryTest extends AbstractQueryTest<IdQueryParameters, GetUnregisteredCinderDisksByStorageDomainIdQuery<IdQueryParameters>> { @Mock private OpenStackVolumeProviderProxy provider; @Mock private DiskDao diskDao; private List<Volume> volumes; @Override protected void initQuery(GetUnregisteredCinderDisksByStorageDomainIdQuery<IdQueryParameters> query) { super.initQuery(query); IdQueryParameters parameters = query.getParameters(); when(parameters.getId()).thenReturn(Guid.newGuid()); setUpVolumes(); setUpDisks(); } private void setUpVolumes() { volumes = new ArrayList<>(3); for (int i = 0; i < 3; ++i) { Volume v = mock(Volume.class); when(v.getId()).thenReturn(Guid.newGuid().toString()); when(v.getName()).thenReturn("volume" + i); when(v.getSize()).thenReturn(i); when(v.getCreatedAt()).thenReturn(new SimpleDateFormat(CinderBroker.DATE_FORMAT).format(new Date())); volumes.add(v); } when(provider.getVolumes()).thenReturn(volumes); doReturn(provider).when(getQuery()).getVolumeProviderProxy(); } private void setUpDisks() { Volume existingVolume = volumes.get(1); List<Disk> existingDisks = new ArrayList<>(CinderBroker.volumesToCinderDisks (Collections.singletonList(existingVolume), getQueryParameters().getId())); when(diskDao.getAllFromDisksByDiskStorageType(DiskStorageType.CINDER, getUser().getId(), false)).thenReturn(existingDisks); } @Test public void executeQueryCommand() { getQuery().executeQueryCommand(); List<CinderDisk> result = getQuery().getQueryReturnValue().getReturnValue(); assertEquals(2, result.size()); assertDiskFromVolume(volumes.get(0), result.get(0)); assertDiskFromVolume(volumes.get(2), result.get(1)); } private void assertDiskFromVolume(Volume volume, CinderDisk disk) { assertEquals(volume.getId(), disk.getId().toString()); assertEquals(volume.getName(), disk.getDiskAlias()); assertEquals(volume.getSize().intValue(), disk.getSizeInGigabytes()); assertEquals(getQueryParameters().getId(), disk.getStorageIds().get(0)); } }