mirror of https://github.com/apache/cloudstack.git
add tests
This commit is contained in:
parent
a923bdbeb6
commit
93782bb5f1
|
|
@ -28,14 +28,18 @@ import static org.mockito.Mockito.verify;
|
|||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.any;
|
||||
|
||||
import com.cloud.storage.ClvmLockManager;
|
||||
import com.cloud.storage.Storage;
|
||||
import com.cloud.storage.StorageManager;
|
||||
import com.cloud.storage.StoragePool;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
|
|
@ -288,4 +292,210 @@ public class AncientDataMotionStrategyTest {
|
|||
canBypassSecondaryStorage = (boolean) method.invoke(strategy, destVolumeInfo, srcVolumeInfo);
|
||||
Assert.assertTrue(canBypassSecondaryStorage);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_CLVMPool_SetsLockHost() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
EndPoint endPoint = Mockito.mock(EndPoint.class);
|
||||
VolumeInfo volumeInfo = Mockito.mock(VolumeInfo.class);
|
||||
DataStore dataStore = Mockito.mock(DataStore.class, Mockito.withSettings().extraInterfaces(StoragePool.class));
|
||||
ClvmLockManager clvmLockManager = Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
Long hostId = 123L;
|
||||
Long volumeId = 456L;
|
||||
String volumeUuid = "test-volume-uuid";
|
||||
|
||||
Mockito.when(endPoint.getId()).thenReturn(hostId);
|
||||
Mockito.when(volumeInfo.getDataStore()).thenReturn(dataStore);
|
||||
Mockito.when(volumeInfo.getId()).thenReturn(volumeId);
|
||||
Mockito.when(volumeInfo.getUuid()).thenReturn(volumeUuid);
|
||||
Mockito.when(((StoragePool) dataStore).getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
|
||||
Mockito.when(clvmLockManager.getClvmLockHostId(volumeId, volumeUuid)).thenReturn(null);
|
||||
|
||||
method.invoke(strategy, endPoint, volumeInfo);
|
||||
|
||||
Mockito.verify(clvmLockManager).setClvmLockHostId(volumeId, hostId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_CLVM_NG_Pool_SetsLockHost() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
EndPoint endPoint = Mockito.mock(EndPoint.class);
|
||||
VolumeInfo volumeInfo = Mockito.mock(VolumeInfo.class);
|
||||
DataStore dataStore = Mockito.mock(DataStore.class, Mockito.withSettings().extraInterfaces(StoragePool.class));
|
||||
ClvmLockManager clvmLockManager = Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
Long hostId = 789L;
|
||||
Long volumeId = 101L;
|
||||
String volumeUuid = "test-clvm-ng-volume-uuid";
|
||||
|
||||
Mockito.when(endPoint.getId()).thenReturn(hostId);
|
||||
Mockito.when(volumeInfo.getDataStore()).thenReturn(dataStore);
|
||||
Mockito.when(volumeInfo.getId()).thenReturn(volumeId);
|
||||
Mockito.when(volumeInfo.getUuid()).thenReturn(volumeUuid);
|
||||
Mockito.when(((StoragePool) dataStore).getPoolType()).thenReturn(Storage.StoragePoolType.CLVM_NG);
|
||||
Mockito.when(clvmLockManager.getClvmLockHostId(volumeId, volumeUuid)).thenReturn(null);
|
||||
|
||||
try {
|
||||
method.invoke(strategy, endPoint, volumeInfo);
|
||||
} catch (InvocationTargetException e) {
|
||||
e.getCause().printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
|
||||
Mockito.verify(clvmLockManager).setClvmLockHostId(volumeId, hostId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_NonCLVMPool_DoesNotSetLockHost() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
EndPoint endPoint = Mockito.mock(EndPoint.class);
|
||||
VolumeInfo volumeInfo = Mockito.mock(VolumeInfo.class);
|
||||
// Create mock that implements both DataStore and StoragePool interfaces
|
||||
DataStore dataStore = Mockito.mock(DataStore.class, Mockito.withSettings().extraInterfaces(StoragePool.class));
|
||||
ClvmLockManager clvmLockManager = Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
Mockito.when(volumeInfo.getDataStore()).thenReturn(dataStore);
|
||||
Mockito.when(((StoragePool) dataStore).getPoolType()).thenReturn(Storage.StoragePoolType.NetworkFilesystem);
|
||||
|
||||
method.invoke(strategy, endPoint, volumeInfo);
|
||||
|
||||
Mockito.verify(clvmLockManager, never()).setClvmLockHostId(any(Long.class), any(Long.class));
|
||||
Mockito.verify(clvmLockManager, never()).getClvmLockHostId(any(Long.class), any(String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_ExistingLockHost_DoesNotOverwrite() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
EndPoint endPoint = Mockito.mock(EndPoint.class);
|
||||
VolumeInfo volumeInfo = Mockito.mock(VolumeInfo.class);
|
||||
DataStore dataStore = Mockito.mock(DataStore.class, Mockito.withSettings().extraInterfaces(StoragePool.class));
|
||||
ClvmLockManager clvmLockManager = Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
Long hostId = 555L;
|
||||
Long existingHostId = 666L;
|
||||
Long volumeId = 777L;
|
||||
String volumeUuid = "existing-lock-volume-uuid";
|
||||
|
||||
Mockito.when(endPoint.getId()).thenReturn(hostId);
|
||||
Mockito.when(volumeInfo.getDataStore()).thenReturn(dataStore);
|
||||
Mockito.when(volumeInfo.getId()).thenReturn(volumeId);
|
||||
Mockito.when(volumeInfo.getUuid()).thenReturn(volumeUuid);
|
||||
Mockito.when(((StoragePool) dataStore).getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
|
||||
Mockito.when(clvmLockManager.getClvmLockHostId(volumeId, volumeUuid)).thenReturn(existingHostId);
|
||||
|
||||
method.invoke(strategy, endPoint, volumeInfo);
|
||||
|
||||
Mockito.verify(clvmLockManager, never()).setClvmLockHostId(any(Long.class), any(Long.class));
|
||||
Mockito.verify(clvmLockManager).getClvmLockHostId(volumeId, volumeUuid);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_NullEndPoint_DoesNotSetLockHost() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
VolumeInfo volumeInfo =
|
||||
Mockito.mock(VolumeInfo.class);
|
||||
ClvmLockManager clvmLockManager =
|
||||
Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
method.invoke(strategy, null, volumeInfo);
|
||||
|
||||
Mockito.verify(clvmLockManager, never()).setClvmLockHostId(any(Long.class), any(Long.class));
|
||||
Mockito.verify(clvmLockManager, never()).getClvmLockHostId(any(Long.class), any(String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_NonVolumeDataObject_DoesNotSetLockHost() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
EndPoint endPoint =
|
||||
Mockito.mock(EndPoint.class);
|
||||
SnapshotInfo snapshotInfo =
|
||||
Mockito.mock(SnapshotInfo.class);
|
||||
ClvmLockManager clvmLockManager =
|
||||
Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
method.invoke(strategy, endPoint, snapshotInfo);
|
||||
|
||||
Mockito.verify(clvmLockManager, never()).setClvmLockHostId(any(Long.class), any(Long.class));
|
||||
Mockito.verify(clvmLockManager, never()).getClvmLockHostId(any(Long.class), any(String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateLockHostForVolume_NullPool_DoesNotSetLockHost() throws Exception {
|
||||
Method method = AncientDataMotionStrategy.class.getDeclaredMethod(
|
||||
"updateLockHostForVolume",
|
||||
EndPoint.class,
|
||||
DataObject.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
EndPoint endPoint =
|
||||
Mockito.mock(EndPoint.class);
|
||||
VolumeInfo volumeInfo =
|
||||
Mockito.mock(VolumeInfo.class);
|
||||
ClvmLockManager clvmLockManager =
|
||||
Mockito.mock(ClvmLockManager.class);
|
||||
|
||||
Field clvmLockManagerField = AncientDataMotionStrategy.class.getDeclaredField("clvmLockManager");
|
||||
clvmLockManagerField.setAccessible(true);
|
||||
clvmLockManagerField.set(strategy, clvmLockManager);
|
||||
|
||||
method.invoke(strategy, endPoint, volumeInfo);
|
||||
|
||||
Mockito.verify(clvmLockManager, never()).setClvmLockHostId(any(Long.class), any(Long.class));
|
||||
Mockito.verify(clvmLockManager, never()).getClvmLockHostId(any(Long.class), any(String.class));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -582,4 +582,64 @@ public class LibvirtStorageAdaptorTest {
|
|||
throw e.getCause();
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = CloudRuntimeException.class)
|
||||
public void testGetPhysicalDiskViaDirectBlockDevice_VolumeNotFound() throws Throwable {
|
||||
String volumeUuid = UUID.randomUUID().toString();
|
||||
String vgName = "testvg";
|
||||
|
||||
Mockito.when(mockPool.getLocalPath()).thenReturn(vgName);
|
||||
|
||||
mockScriptConstruction = Mockito.mockConstruction(Script.class,
|
||||
(mock, context) -> {
|
||||
when(mock.execute()).thenReturn(" Volume not found");
|
||||
});
|
||||
|
||||
Method method = LibvirtStorageAdaptor.class.getDeclaredMethod(
|
||||
"getPhysicalDiskViaDirectBlockDevice",
|
||||
String.class, KVMStoragePool.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
try {
|
||||
method.invoke(libvirtStorageAdaptor, volumeUuid, mockPool);
|
||||
} catch (java.lang.reflect.InvocationTargetException e) {
|
||||
throw e.getCause();
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = CloudRuntimeException.class)
|
||||
public void testGetPhysicalDiskViaDirectBlockDevice_NullPoolPath() throws Throwable {
|
||||
String volumeUuid = UUID.randomUUID().toString();
|
||||
|
||||
Mockito.when(mockPool.getLocalPath()).thenReturn(null);
|
||||
|
||||
Method method = LibvirtStorageAdaptor.class.getDeclaredMethod(
|
||||
"getPhysicalDiskViaDirectBlockDevice",
|
||||
String.class, KVMStoragePool.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
try {
|
||||
method.invoke(libvirtStorageAdaptor, volumeUuid, mockPool);
|
||||
} catch (java.lang.reflect.InvocationTargetException e) {
|
||||
throw e.getCause();
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = CloudRuntimeException.class)
|
||||
public void testGetPhysicalDiskViaDirectBlockDevice_EmptyPoolPath() throws Throwable {
|
||||
String volumeUuid = UUID.randomUUID().toString();
|
||||
|
||||
Mockito.when(mockPool.getLocalPath()).thenReturn("");
|
||||
|
||||
Method method = LibvirtStorageAdaptor.class.getDeclaredMethod(
|
||||
"getPhysicalDiskViaDirectBlockDevice",
|
||||
String.class, KVMStoragePool.class);
|
||||
method.setAccessible(true);
|
||||
|
||||
try {
|
||||
method.invoke(libvirtStorageAdaptor, volumeUuid, mockPool);
|
||||
} catch (java.lang.reflect.InvocationTargetException e) {
|
||||
throw e.getCause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue