Skip to content

Commit 0a6ac67

Browse files
committed
add tests for snapshot policy listing
1 parent 619f01e commit 0a6ac67

File tree

2 files changed

+199
-0
lines changed

2 files changed

+199
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
package org.apache.cloudstack.api.command.user.snapshot;
18+
19+
import com.cloud.storage.snapshot.SnapshotApiService;
20+
import com.cloud.storage.snapshot.SnapshotPolicy;
21+
import com.cloud.utils.Pair;
22+
import org.apache.cloudstack.api.ResponseGenerator;
23+
import org.apache.cloudstack.api.response.ListResponse;
24+
import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
25+
import org.junit.Assert;
26+
import org.junit.Before;
27+
import org.junit.Test;
28+
import org.mockito.Mockito;
29+
30+
import java.util.ArrayList;
31+
import java.util.List;
32+
33+
public class ListSnapshotPoliciesCmdTest {
34+
private ListSnapshotPoliciesCmd cmd;
35+
private SnapshotApiService snapshotService;
36+
private ResponseGenerator responseGenerator;
37+
38+
@Before
39+
public void setUp() {
40+
cmd = new ListSnapshotPoliciesCmd();
41+
snapshotService = Mockito.mock(SnapshotApiService.class);
42+
responseGenerator = Mockito.mock(ResponseGenerator.class);
43+
44+
cmd._snapshotService = snapshotService;
45+
cmd._responseGenerator = responseGenerator;
46+
}
47+
48+
@Test
49+
public void testExecuteWithPolicies() {
50+
SnapshotPolicy policy = Mockito.mock(SnapshotPolicy.class);
51+
SnapshotPolicyResponse policyResponse = Mockito.mock(SnapshotPolicyResponse.class);
52+
List<SnapshotPolicy> policies = new ArrayList<>();
53+
policies.add(policy);
54+
55+
Mockito.when(snapshotService.listSnapshotPolicies(cmd))
56+
.thenReturn(new Pair<>(policies, 1));
57+
Mockito.when(responseGenerator.createSnapshotPolicyResponse(policy))
58+
.thenReturn(policyResponse);
59+
60+
cmd.execute();
61+
62+
ListResponse<?> response = (ListResponse<?>) cmd.getResponseObject();
63+
Assert.assertNotNull(response);
64+
Assert.assertEquals(1, response.getResponses().size());
65+
Assert.assertEquals(policyResponse, response.getResponses().get(0));
66+
}
67+
68+
@Test
69+
public void testExecuteWithNoPolicies() {
70+
Mockito.when(snapshotService.listSnapshotPolicies(cmd))
71+
.thenReturn(new Pair<>(new ArrayList<>(), 0));
72+
73+
cmd.execute();
74+
75+
ListResponse<?> response = (ListResponse<?>) cmd.getResponseObject();
76+
Assert.assertNotNull(response);
77+
Assert.assertTrue(response.getResponses().isEmpty());
78+
}
79+
}

server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerImplTest.java

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,25 @@
2727
import com.cloud.org.Grouping;
2828
import com.cloud.storage.DataStoreRole;
2929
import com.cloud.storage.Snapshot;
30+
import com.cloud.storage.SnapshotPolicyVO;
3031
import com.cloud.storage.SnapshotVO;
3132
import com.cloud.storage.VolumeVO;
3233
import com.cloud.storage.dao.SnapshotDao;
34+
import com.cloud.storage.dao.SnapshotPolicyDao;
3335
import com.cloud.storage.dao.SnapshotZoneDao;
3436
import com.cloud.storage.dao.VolumeDao;
3537
import com.cloud.user.Account;
3638
import com.cloud.user.AccountManager;
3739
import com.cloud.user.AccountVO;
3840
import com.cloud.user.ResourceLimitService;
41+
import com.cloud.user.User;
3942
import com.cloud.user.dao.AccountDao;
4043
import com.cloud.utils.Pair;
4144

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;
4249
import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
4350
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
4451
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -51,6 +58,8 @@
5158
import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
5259

5360
import org.junit.Assert;
61+
import org.junit.After;
62+
import org.junit.Before;
5463
import org.junit.Test;
5564
import org.junit.runner.RunWith;
5665

@@ -89,9 +98,21 @@ public class SnapshotManagerImplTest {
8998
SnapshotZoneDao snapshotZoneDao;
9099
@Mock
91100
VolumeDao volumeDao;
101+
@Mock
102+
SnapshotPolicyDao snapshotPolicyDao;
92103
@InjectMocks
93104
SnapshotManagerImpl snapshotManager = new SnapshotManagerImpl();
94105

106+
@Before
107+
public void setUp() {
108+
snapshotManager._snapshotPolicyDao = snapshotPolicyDao;
109+
}
110+
111+
@After
112+
public void tearDown() {
113+
CallContext.unregister();
114+
}
115+
95116
@Test
96117
public void testGetSnapshotZoneImageStoreValid() {
97118
final long snapshotId = 1L;
@@ -395,4 +416,103 @@ public void testGetCheckedDestinationZoneForSnapshotCopy() {
395416
Mockito.when(dataCenterDao.findById(zoneId)).thenReturn(dataCenterVO);
396417
Assert.assertNotNull(snapshotManager.getCheckedDestinationZoneForSnapshotCopy(zoneId, false));
397418
}
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+
}
398518
}

0 commit comments

Comments
 (0)