|
27 | 27 | import com.cloud.org.Grouping; |
28 | 28 | import com.cloud.storage.DataStoreRole; |
29 | 29 | import com.cloud.storage.Snapshot; |
| 30 | +import com.cloud.storage.SnapshotPolicyVO; |
30 | 31 | import com.cloud.storage.SnapshotVO; |
31 | 32 | import com.cloud.storage.VolumeVO; |
32 | 33 | import com.cloud.storage.dao.SnapshotDao; |
| 34 | +import com.cloud.storage.dao.SnapshotPolicyDao; |
33 | 35 | import com.cloud.storage.dao.SnapshotZoneDao; |
34 | 36 | import com.cloud.storage.dao.VolumeDao; |
35 | 37 | import com.cloud.user.Account; |
36 | 38 | import com.cloud.user.AccountManager; |
37 | 39 | import com.cloud.user.AccountVO; |
38 | 40 | import com.cloud.user.ResourceLimitService; |
| 41 | +import com.cloud.user.User; |
39 | 42 | import com.cloud.user.dao.AccountDao; |
40 | 43 | import com.cloud.utils.Pair; |
41 | 44 |
|
| 45 | +import com.cloud.utils.db.SearchBuilder; |
| 46 | +import com.cloud.utils.db.SearchCriteria; |
| 47 | +import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd; |
| 48 | +import org.apache.cloudstack.context.CallContext; |
42 | 49 | import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; |
43 | 50 | import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; |
44 | 51 | import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; |
|
51 | 58 | import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO; |
52 | 59 |
|
53 | 60 | import org.junit.Assert; |
| 61 | +import org.junit.After; |
| 62 | +import org.junit.Before; |
54 | 63 | import org.junit.Test; |
55 | 64 | import org.junit.runner.RunWith; |
56 | 65 |
|
@@ -89,9 +98,21 @@ public class SnapshotManagerImplTest { |
89 | 98 | SnapshotZoneDao snapshotZoneDao; |
90 | 99 | @Mock |
91 | 100 | VolumeDao volumeDao; |
| 101 | + @Mock |
| 102 | + SnapshotPolicyDao snapshotPolicyDao; |
92 | 103 | @InjectMocks |
93 | 104 | SnapshotManagerImpl snapshotManager = new SnapshotManagerImpl(); |
94 | 105 |
|
| 106 | + @Before |
| 107 | + public void setUp() { |
| 108 | + snapshotManager._snapshotPolicyDao = snapshotPolicyDao; |
| 109 | + } |
| 110 | + |
| 111 | + @After |
| 112 | + public void tearDown() { |
| 113 | + CallContext.unregister(); |
| 114 | + } |
| 115 | + |
95 | 116 | @Test |
96 | 117 | public void testGetSnapshotZoneImageStoreValid() { |
97 | 118 | final long snapshotId = 1L; |
@@ -395,4 +416,103 @@ public void testGetCheckedDestinationZoneForSnapshotCopy() { |
395 | 416 | Mockito.when(dataCenterDao.findById(zoneId)).thenReturn(dataCenterVO); |
396 | 417 | Assert.assertNotNull(snapshotManager.getCheckedDestinationZoneForSnapshotCopy(zoneId, false)); |
397 | 418 | } |
| 419 | + |
| 420 | + @Test |
| 421 | + public void testListSnapshotPolicies() { |
| 422 | + long volumeId = 42L; |
| 423 | + ListSnapshotPoliciesCmd cmd = Mockito.mock(ListSnapshotPoliciesCmd.class); |
| 424 | + Mockito.when(cmd.getVolumeId()).thenReturn(volumeId); |
| 425 | + Mockito.when(cmd.getId()).thenReturn(null); |
| 426 | + Mockito.when(cmd.getStartIndex()).thenReturn(0L); |
| 427 | + Mockito.when(cmd.getPageSizeVal()).thenReturn(10L); |
| 428 | + |
| 429 | + Account caller = Mockito.mock(Account.class); |
| 430 | + Mockito.when(caller.getId()).thenReturn(1L); |
| 431 | + CallContext.register(Mockito.mock(User.class), caller); |
| 432 | + |
| 433 | + Mockito.when(accountManager.isRootAdmin(1L)).thenReturn(true); |
| 434 | + |
| 435 | + SnapshotPolicyVO policy1 = Mockito.mock(SnapshotPolicyVO.class); |
| 436 | + SnapshotPolicyVO policy2 = Mockito.mock(SnapshotPolicyVO.class); |
| 437 | + List<SnapshotPolicyVO> mockPolicies = List.of(policy1, policy2); |
| 438 | + |
| 439 | + SearchBuilder<SnapshotPolicyVO> mockSearchBuilder = Mockito.mock(SearchBuilder.class); |
| 440 | + SearchCriteria<SnapshotPolicyVO> mockSearchCriteria = Mockito.mock(SearchCriteria.class); |
| 441 | + |
| 442 | + Mockito.when(snapshotPolicyDao.createSearchBuilder()).thenReturn(mockSearchBuilder); |
| 443 | + Mockito.when(mockSearchBuilder.entity()).thenReturn(Mockito.mock(SnapshotPolicyVO.class)); |
| 444 | + Mockito.when(mockSearchBuilder.create()).thenReturn(mockSearchCriteria); |
| 445 | + Mockito.when(snapshotPolicyDao.searchAndCount(Mockito.any(), Mockito.any())).thenReturn(new Pair<>(mockPolicies, 2)); |
| 446 | + |
| 447 | + Pair<List<? extends SnapshotPolicy>, Integer> result = snapshotManager.listSnapshotPolicies(cmd); |
| 448 | + |
| 449 | + Assert.assertNotNull(result); |
| 450 | + Assert.assertEquals(2, result.first().size()); |
| 451 | + Assert.assertEquals(Integer.valueOf(2), result.second()); |
| 452 | + Assert.assertEquals(mockPolicies, result.first()); |
| 453 | + } |
| 454 | + |
| 455 | + @Test |
| 456 | + public void testListSnapshotPolicies_NonRootAdmin() { |
| 457 | + ListSnapshotPoliciesCmd cmd = Mockito.mock(ListSnapshotPoliciesCmd.class); |
| 458 | + Mockito.when(cmd.getVolumeId()).thenReturn(1L); |
| 459 | + Mockito.when(cmd.getId()).thenReturn(null); |
| 460 | + Mockito.when(cmd.getStartIndex()).thenReturn(0L); |
| 461 | + Mockito.when(cmd.getPageSizeVal()).thenReturn(10L); |
| 462 | + |
| 463 | + Account caller = Mockito.mock(Account.class); |
| 464 | + Mockito.when(caller.getId()).thenReturn(2L); |
| 465 | + CallContext.register(Mockito.mock(User.class), caller); |
| 466 | + |
| 467 | + Mockito.when(accountManager.isRootAdmin(2L)).thenReturn(false); |
| 468 | + |
| 469 | + SnapshotPolicyVO policy1 = Mockito.mock(SnapshotPolicyVO.class); |
| 470 | + SnapshotPolicyVO policy2 = Mockito.mock(SnapshotPolicyVO.class); |
| 471 | + List<SnapshotPolicyVO> mockPolicies = List.of(policy1, policy2); |
| 472 | + |
| 473 | + SearchBuilder<SnapshotPolicyVO> mockSearchBuilder = Mockito.mock(SearchBuilder.class); |
| 474 | + SearchCriteria<SnapshotPolicyVO> mockSearchCriteria = Mockito.mock(SearchCriteria.class); |
| 475 | + |
| 476 | + Mockito.when(snapshotPolicyDao.createSearchBuilder()).thenReturn(mockSearchBuilder); |
| 477 | + Mockito.when(mockSearchBuilder.entity()).thenReturn(Mockito.mock(SnapshotPolicyVO.class)); |
| 478 | + Mockito.when(mockSearchBuilder.create()).thenReturn(mockSearchCriteria); |
| 479 | + Mockito.when(snapshotPolicyDao.searchAndCount(Mockito.any(), Mockito.any())).thenReturn(new Pair<>(mockPolicies, 2)); |
| 480 | + |
| 481 | + Pair<List<? extends SnapshotPolicy>, Integer> result = snapshotManager.listSnapshotPolicies(cmd); |
| 482 | + |
| 483 | + Assert.assertNotNull(result); |
| 484 | + Assert.assertEquals(2, result.first().size()); |
| 485 | + Assert.assertEquals(Integer.valueOf(2), result.second()); |
| 486 | + Assert.assertEquals(mockPolicies, result.first()); |
| 487 | + } |
| 488 | + |
| 489 | + @Test |
| 490 | + public void testListSnapshotPolicies_RootAdmin() { |
| 491 | + ListSnapshotPoliciesCmd cmd = Mockito.mock(ListSnapshotPoliciesCmd.class); |
| 492 | + Mockito.when(cmd.getVolumeId()).thenReturn(1L); |
| 493 | + Mockito.when(cmd.getId()).thenReturn(null); |
| 494 | + Mockito.when(cmd.getStartIndex()).thenReturn(0L); |
| 495 | + Mockito.when(cmd.getPageSizeVal()).thenReturn(10L); |
| 496 | + |
| 497 | + Account caller = Mockito.mock(Account.class); |
| 498 | + Mockito.when(caller.getId()).thenReturn(1L); |
| 499 | + CallContext.register(Mockito.mock(User.class), caller); |
| 500 | + |
| 501 | + Mockito.when(accountManager.isRootAdmin(1L)).thenReturn(true); |
| 502 | + |
| 503 | + SnapshotPolicyVO policy = Mockito.mock(SnapshotPolicyVO.class); |
| 504 | + SearchBuilder<SnapshotPolicyVO> mockSearchBuilder = Mockito.mock(SearchBuilder.class); |
| 505 | + SearchCriteria<SnapshotPolicyVO> mockSearchCriteria = Mockito.mock(SearchCriteria.class); |
| 506 | + |
| 507 | + Mockito.when(snapshotPolicyDao.createSearchBuilder()).thenReturn(mockSearchBuilder); |
| 508 | + Mockito.when(mockSearchBuilder.entity()).thenReturn(Mockito.mock(SnapshotPolicyVO.class)); |
| 509 | + Mockito.when(mockSearchBuilder.create()).thenReturn(mockSearchCriteria); |
| 510 | + Mockito.when(snapshotPolicyDao.searchAndCount(Mockito.any(), Mockito.any())).thenReturn(new Pair<>(List.of(policy), 1)); |
| 511 | + |
| 512 | + Pair<List<? extends SnapshotPolicy>, Integer> result = snapshotManager.listSnapshotPolicies(cmd); |
| 513 | + |
| 514 | + Assert.assertNotNull(result); |
| 515 | + Assert.assertEquals(1, result.first().size()); |
| 516 | + Assert.assertEquals(Integer.valueOf(1), result.second()); |
| 517 | + } |
398 | 518 | } |
0 commit comments