|
60 | 60 | import java.util.UUID; |
61 | 61 |
|
62 | 62 | import com.cloud.storage.dao.SnapshotPolicyDao; |
| 63 | +import com.cloud.utils.fsm.NoTransitionException; |
63 | 64 | import org.apache.cloudstack.acl.ControlledEntity; |
64 | 65 | import org.apache.cloudstack.acl.SecurityChecker; |
65 | 66 | import org.apache.cloudstack.api.ApiCommandResourceType; |
@@ -4177,4 +4178,55 @@ public void testUnmanageUserVMSuccess() { |
4177 | 4178 | verify(userVmDao, times(1)).releaseFromLockTable(vmId); |
4178 | 4179 | } |
4179 | 4180 |
|
| 4181 | + @Test |
| 4182 | + public void testTransitionExpungingToErrorVmInExpungingState() throws Exception { |
| 4183 | + UserVmVO vm = mock(UserVmVO.class); |
| 4184 | + when(vm.getState()).thenReturn(VirtualMachine.State.Expunging); |
| 4185 | + when(vm.getUuid()).thenReturn("test-uuid"); |
| 4186 | + when(userVmDao.findById(vmId)).thenReturn(vm); |
| 4187 | + when(virtualMachineManager.stateTransitTo(eq(vm), eq(VirtualMachine.Event.OperationFailedToError), eq(null))).thenReturn(true); |
| 4188 | + |
| 4189 | + java.lang.reflect.Method method = UserVmManagerImpl.class.getDeclaredMethod("transitionExpungingToError", long.class); |
| 4190 | + method.setAccessible(true); |
| 4191 | + method.invoke(userVmManagerImpl, vmId); |
| 4192 | + |
| 4193 | + Mockito.verify(virtualMachineManager).stateTransitTo(vm, VirtualMachine.Event.OperationFailedToError, null); |
| 4194 | + } |
| 4195 | + |
| 4196 | + @Test |
| 4197 | + public void testTransitionExpungingToErrorVmNotInExpungingState() throws Exception { |
| 4198 | + UserVmVO vm = mock(UserVmVO.class); |
| 4199 | + when(vm.getState()).thenReturn(VirtualMachine.State.Stopped); |
| 4200 | + when(userVmDao.findById(vmId)).thenReturn(vm); |
| 4201 | + |
| 4202 | + java.lang.reflect.Method method = UserVmManagerImpl.class.getDeclaredMethod("transitionExpungingToError", long.class); |
| 4203 | + method.setAccessible(true); |
| 4204 | + method.invoke(userVmManagerImpl, vmId); |
| 4205 | + |
| 4206 | + Mockito.verify(virtualMachineManager, Mockito.never()).stateTransitTo(any(VirtualMachine.class), any(VirtualMachine.Event.class), any()); |
| 4207 | + } |
| 4208 | + |
| 4209 | + @Test |
| 4210 | + public void testTransitionExpungingToErrorVmNotFound() throws Exception { |
| 4211 | + when(userVmDao.findById(vmId)).thenReturn(null); |
| 4212 | + |
| 4213 | + java.lang.reflect.Method method = UserVmManagerImpl.class.getDeclaredMethod("transitionExpungingToError", long.class); |
| 4214 | + method.setAccessible(true); |
| 4215 | + method.invoke(userVmManagerImpl, vmId); |
| 4216 | + |
| 4217 | + Mockito.verify(virtualMachineManager, Mockito.never()).stateTransitTo(any(VirtualMachine.class), any(VirtualMachine.Event.class), any()); |
| 4218 | + } |
| 4219 | + |
| 4220 | + @Test |
| 4221 | + public void testTransitionExpungingToErrorHandlesNoTransitionException() throws Exception { |
| 4222 | + UserVmVO vm = mock(UserVmVO.class); |
| 4223 | + when(vm.getState()).thenReturn(VirtualMachine.State.Expunging); |
| 4224 | + when(userVmDao.findById(vmId)).thenReturn(vm); |
| 4225 | + when(virtualMachineManager.stateTransitTo(eq(vm), eq(VirtualMachine.Event.OperationFailedToError), eq(null))) |
| 4226 | + .thenThrow(new NoTransitionException("no transition")); |
| 4227 | + |
| 4228 | + java.lang.reflect.Method method = UserVmManagerImpl.class.getDeclaredMethod("transitionExpungingToError", long.class); |
| 4229 | + method.setAccessible(true); |
| 4230 | + method.invoke(userVmManagerImpl, vmId); |
| 4231 | + } |
4180 | 4232 | } |
0 commit comments