|
36 | 36 | import com.cloud.user.dao.AccountDao; |
37 | 37 | import org.mockito.junit.MockitoJUnitRunner; |
38 | 38 |
|
| 39 | + |
| 40 | +import java.util.Date; |
| 41 | + |
| 42 | +import com.cloud.usage.dao.UsageVMInstanceDao; |
| 43 | +import com.cloud.utils.db.SearchCriteria; |
| 44 | + |
| 45 | +import org.springframework.test.util.ReflectionTestUtils; |
| 46 | + |
| 47 | + |
39 | 48 | @RunWith(MockitoJUnitRunner.class) |
40 | 49 | public class UsageManagerImplTest { |
41 | 50 |
|
@@ -243,4 +252,41 @@ public void handleVMSnapshotEventTestEventIsNeitherAddNorRemove() { |
243 | 252 | Mockito.verify(usageManagerImpl, Mockito.never()).createUsageVpnUser(usageEventVOMock,accountMock); |
244 | 253 | Mockito.verify(usageManagerImpl, Mockito.never()).deleteUsageVpnUser(usageEventVOMock, accountMock); |
245 | 254 | } |
| 255 | + |
| 256 | + |
| 257 | + @Test |
| 258 | + public void testDuplicateVmStartDoesNotCreateNewRunningUsage() { |
| 259 | + |
| 260 | + UsageVMInstanceDao usageInstanceDao = Mockito.mock(UsageVMInstanceDao.class); |
| 261 | + ReflectionTestUtils.setField(usageManagerImpl, "_usageInstanceDao", usageInstanceDao); |
| 262 | + |
| 263 | + Mockito.doNothing() |
| 264 | + .when(usageEventDetailsDao) |
| 265 | + .persist(Mockito.any()); |
| 266 | + |
| 267 | + long vmId = 100L; |
| 268 | + |
| 269 | + UsageEventVO event = Mockito.mock(UsageEventVO.class); |
| 270 | + Mockito.when(event.getType()).thenReturn(EventTypes.EVENT_VM_START); |
| 271 | + Mockito.when(event.getResourceId()).thenReturn(vmId); |
| 272 | + Mockito.when(event.getZoneId()).thenReturn(1L); |
| 273 | + Mockito.when(event.getAccountId()).thenReturn(1L); |
| 274 | + Mockito.when(event.getCreateDate()).thenReturn(new Date()); |
| 275 | + |
| 276 | + UsageVMInstanceVO existing = Mockito.mock(UsageVMInstanceVO.class); |
| 277 | + List<UsageVMInstanceVO> existingList = List.of(existing); |
| 278 | + |
| 279 | + SearchCriteria<UsageVMInstanceVO> sc = Mockito.mock(SearchCriteria.class); |
| 280 | + Mockito.when(usageInstanceDao.createSearchCriteria()).thenReturn(sc); |
| 281 | + Mockito.when(usageInstanceDao.search(Mockito.any(), Mockito.isNull())) |
| 282 | + .thenReturn(existingList); |
| 283 | + |
| 284 | + usageManagerImpl.handleEvent(event); |
| 285 | + |
| 286 | + Mockito.verify(usageInstanceDao, Mockito.never()) |
| 287 | + .persist(Mockito.any(UsageVMInstanceVO.class)); |
| 288 | + } |
| 289 | + |
| 290 | + |
| 291 | + |
246 | 292 | } |
0 commit comments