Skip to content

Commit 738ffd7

Browse files
committed
add unit tests to increase coverage
1 parent 890659a commit 738ffd7

1 file changed

Lines changed: 252 additions & 0 deletions

File tree

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
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.backup.dao;
18+
19+
import java.util.Arrays;
20+
import java.util.Collections;
21+
import java.util.List;
22+
23+
import org.apache.cloudstack.api.ApiConstants;
24+
import org.apache.cloudstack.backup.BackupOfferingDetailsVO;
25+
import org.junit.Assert;
26+
import org.junit.Test;
27+
import org.junit.runner.RunWith;
28+
29+
import org.mockito.InjectMocks;
30+
import org.mockito.Mockito;
31+
import org.mockito.Spy;
32+
import org.mockito.junit.MockitoJUnitRunner;
33+
34+
import com.cloud.utils.db.SearchCriteria;
35+
36+
@RunWith(MockitoJUnitRunner.class)
37+
public class BackupOfferingDetailsDaoImplTest {
38+
39+
@Spy
40+
@InjectMocks
41+
private BackupOfferingDetailsDaoImpl backupOfferingDetailsDao;
42+
43+
private static final long RESOURCE_ID = 1L;
44+
private static final long OFFERING_ID = 100L;
45+
private static final String TEST_KEY = "testKey";
46+
private static final String TEST_VALUE = "testValue";
47+
48+
@Test
49+
public void testAddDetail() {
50+
BackupOfferingDetailsVO detailVO = new BackupOfferingDetailsVO(RESOURCE_ID, TEST_KEY, TEST_VALUE, true);
51+
52+
Assert.assertEquals("Resource ID should match", RESOURCE_ID, detailVO.getResourceId());
53+
Assert.assertEquals("Detail name/key should match", TEST_KEY, detailVO.getName());
54+
Assert.assertEquals("Detail value should match", TEST_VALUE, detailVO.getValue());
55+
Assert.assertTrue("Display flag should be true", detailVO.isDisplay());
56+
57+
BackupOfferingDetailsVO detailVOHidden = new BackupOfferingDetailsVO(RESOURCE_ID, "hiddenKey", "hiddenValue", false);
58+
Assert.assertFalse("Display flag should be false", detailVOHidden.isDisplay());
59+
}
60+
61+
@Test
62+
public void testFindDomainIdsWithMultipleDomains() {
63+
List<BackupOfferingDetailsVO> mockDetails = Arrays.asList(
64+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "1", false),
65+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "2", false),
66+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "3", false)
67+
);
68+
69+
Mockito.doReturn(mockDetails).when(backupOfferingDetailsDao)
70+
.findDetails(RESOURCE_ID, ApiConstants.DOMAIN_ID);
71+
72+
List<Long> domainIds = backupOfferingDetailsDao.findDomainIds(RESOURCE_ID);
73+
74+
Assert.assertNotNull(domainIds);
75+
Assert.assertEquals(3, domainIds.size());
76+
Assert.assertEquals(Arrays.asList(1L, 2L, 3L), domainIds);
77+
}
78+
79+
@Test
80+
public void testFindDomainIdsWithEmptyList() {
81+
Mockito.doReturn(Collections.emptyList()).when(backupOfferingDetailsDao)
82+
.findDetails(RESOURCE_ID, ApiConstants.DOMAIN_ID);
83+
84+
List<Long> domainIds = backupOfferingDetailsDao.findDomainIds(RESOURCE_ID);
85+
86+
Assert.assertNotNull(domainIds);
87+
Assert.assertTrue(domainIds.isEmpty());
88+
}
89+
90+
@Test
91+
public void testFindDomainIdsExcludesZeroOrNegativeValues() {
92+
List<BackupOfferingDetailsVO> mockDetails = Arrays.asList(
93+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "1", false),
94+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "0", false),
95+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "-1", false),
96+
createDetailVO(RESOURCE_ID, ApiConstants.DOMAIN_ID, "2", false)
97+
);
98+
99+
Mockito.doReturn(mockDetails).when(backupOfferingDetailsDao)
100+
.findDetails(RESOURCE_ID, ApiConstants.DOMAIN_ID);
101+
102+
List<Long> domainIds = backupOfferingDetailsDao.findDomainIds(RESOURCE_ID);
103+
104+
Assert.assertNotNull(domainIds);
105+
Assert.assertEquals(2, domainIds.size());
106+
Assert.assertEquals(Arrays.asList(1L, 2L), domainIds);
107+
}
108+
109+
@Test
110+
public void testFindZoneIdsWithMultipleZones() {
111+
List<BackupOfferingDetailsVO> mockDetails = Arrays.asList(
112+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "10", false),
113+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "20", false),
114+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "30", false)
115+
);
116+
117+
Mockito.doReturn(mockDetails).when(backupOfferingDetailsDao)
118+
.findDetails(RESOURCE_ID, ApiConstants.ZONE_ID);
119+
120+
List<Long> zoneIds = backupOfferingDetailsDao.findZoneIds(RESOURCE_ID);
121+
122+
Assert.assertNotNull(zoneIds);
123+
Assert.assertEquals(3, zoneIds.size());
124+
Assert.assertEquals(Arrays.asList(10L, 20L, 30L), zoneIds);
125+
}
126+
127+
@Test
128+
public void testFindZoneIdsWithEmptyList() {
129+
Mockito.doReturn(Collections.emptyList()).when(backupOfferingDetailsDao)
130+
.findDetails(RESOURCE_ID, ApiConstants.ZONE_ID);
131+
132+
List<Long> zoneIds = backupOfferingDetailsDao.findZoneIds(RESOURCE_ID);
133+
134+
Assert.assertNotNull(zoneIds);
135+
Assert.assertTrue(zoneIds.isEmpty());
136+
}
137+
138+
@Test
139+
public void testFindZoneIdsExcludesZeroOrNegativeValues() {
140+
List<BackupOfferingDetailsVO> mockDetails = Arrays.asList(
141+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "10", false),
142+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "0", false),
143+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "-5", false),
144+
createDetailVO(RESOURCE_ID, ApiConstants.ZONE_ID, "20", false)
145+
);
146+
147+
Mockito.doReturn(mockDetails).when(backupOfferingDetailsDao)
148+
.findDetails(RESOURCE_ID, ApiConstants.ZONE_ID);
149+
150+
List<Long> zoneIds = backupOfferingDetailsDao.findZoneIds(RESOURCE_ID);
151+
152+
Assert.assertNotNull(zoneIds);
153+
Assert.assertEquals(2, zoneIds.size());
154+
Assert.assertEquals(Arrays.asList(10L, 20L), zoneIds);
155+
}
156+
157+
@Test
158+
public void testGetDetailWhenDetailExists() {
159+
BackupOfferingDetailsVO mockDetail = createDetailVO(OFFERING_ID, TEST_KEY, TEST_VALUE, true);
160+
161+
Mockito.doReturn(mockDetail).when(backupOfferingDetailsDao)
162+
.findDetail(OFFERING_ID, TEST_KEY);
163+
164+
String detailValue = backupOfferingDetailsDao.getDetail(OFFERING_ID, TEST_KEY);
165+
166+
Assert.assertNotNull(detailValue);
167+
Assert.assertEquals(TEST_VALUE, detailValue);
168+
}
169+
170+
@Test
171+
public void testGetDetailWhenDetailDoesNotExist() {
172+
Mockito.doReturn(null).when(backupOfferingDetailsDao)
173+
.findDetail(OFFERING_ID, TEST_KEY);
174+
175+
String detailValue = backupOfferingDetailsDao.getDetail(OFFERING_ID, TEST_KEY);
176+
177+
Assert.assertNull(detailValue);
178+
}
179+
180+
@Test
181+
public void testFindOfferingIdsByDomainIds() {
182+
List<Long> domainIds = Arrays.asList(1L, 2L, 3L);
183+
List<Long> expectedOfferingIds = Arrays.asList(100L, 101L, 102L);
184+
185+
Mockito.doReturn(expectedOfferingIds).when(backupOfferingDetailsDao)
186+
.findResourceIdsByNameAndValueIn(Mockito.eq("domainid"), Mockito.any(Object[].class));
187+
188+
List<Long> offeringIds = backupOfferingDetailsDao.findOfferingIdsByDomainIds(domainIds);
189+
190+
Assert.assertNotNull(offeringIds);
191+
Assert.assertEquals(expectedOfferingIds, offeringIds);
192+
Mockito.verify(backupOfferingDetailsDao).findResourceIdsByNameAndValueIn(
193+
Mockito.eq("domainid"), Mockito.any(Object[].class));
194+
}
195+
196+
@Test
197+
public void testFindOfferingIdsByDomainIdsWithEmptyList() {
198+
List<Long> domainIds = Collections.emptyList();
199+
List<Long> expectedOfferingIds = Collections.emptyList();
200+
201+
Mockito.doReturn(expectedOfferingIds).when(backupOfferingDetailsDao)
202+
.findResourceIdsByNameAndValueIn(Mockito.eq("domainid"), Mockito.any(Object[].class));
203+
204+
List<Long> offeringIds = backupOfferingDetailsDao.findOfferingIdsByDomainIds(domainIds);
205+
206+
Assert.assertNotNull(offeringIds);
207+
Assert.assertTrue(offeringIds.isEmpty());
208+
}
209+
210+
@Test
211+
@SuppressWarnings("unchecked")
212+
public void testUpdateBackupOfferingDomainIdsDetail() {
213+
List<Long> newDomainIds = Arrays.asList(1L, 2L, 3L);
214+
215+
Mockito.doReturn(0).when(backupOfferingDetailsDao).remove(Mockito.any(SearchCriteria.class));
216+
Mockito.doReturn(null).when(backupOfferingDetailsDao).persist(Mockito.any(BackupOfferingDetailsVO.class));
217+
218+
backupOfferingDetailsDao.updateBackupOfferingDomainIdsDetail(OFFERING_ID, newDomainIds);
219+
220+
Mockito.verify(backupOfferingDetailsDao, Mockito.times(3)).persist(Mockito.any(BackupOfferingDetailsVO.class));
221+
}
222+
223+
@Test
224+
@SuppressWarnings("unchecked")
225+
public void testUpdateBackupOfferingDomainIdsDetailWithEmptyList() {
226+
List<Long> emptyDomainIds = Collections.emptyList();
227+
228+
Mockito.doReturn(0).when(backupOfferingDetailsDao).remove(Mockito.any(SearchCriteria.class));
229+
230+
backupOfferingDetailsDao.updateBackupOfferingDomainIdsDetail(OFFERING_ID, emptyDomainIds);
231+
232+
Mockito.verify(backupOfferingDetailsDao, Mockito.never()).persist(Mockito.any(BackupOfferingDetailsVO.class));
233+
}
234+
235+
@Test
236+
@SuppressWarnings("unchecked")
237+
public void testUpdateBackupOfferingDomainIdsDetailWithSingleDomain() {
238+
List<Long> singleDomainId = Collections.singletonList(5L);
239+
240+
Mockito.doReturn(0).when(backupOfferingDetailsDao).remove(Mockito.any(SearchCriteria.class));
241+
Mockito.doReturn(null).when(backupOfferingDetailsDao).persist(Mockito.any(BackupOfferingDetailsVO.class));
242+
243+
backupOfferingDetailsDao.updateBackupOfferingDomainIdsDetail(OFFERING_ID, singleDomainId);
244+
245+
Mockito.verify(backupOfferingDetailsDao, Mockito.times(1)).persist(Mockito.any(BackupOfferingDetailsVO.class));
246+
}
247+
248+
private BackupOfferingDetailsVO createDetailVO(long resourceId, String name, String value, boolean display) {
249+
return new BackupOfferingDetailsVO(resourceId, name, value, display);
250+
}
251+
}
252+

0 commit comments

Comments
 (0)