Skip to content

Commit 9962bab

Browse files
committed
more tests
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent edb3846 commit 9962bab

File tree

2 files changed

+150
-15
lines changed

2 files changed

+150
-15
lines changed

engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41700to41710.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,46 +99,58 @@ public void updateSystemVmTemplates(Connection conn) {
9999
}
100100
}
101101

102+
protected PrimaryDataStoreDao getStorageDao() {
103+
if (storageDao == null) {
104+
storageDao = new PrimaryDataStoreDaoImpl();
105+
}
106+
return storageDao;
107+
}
108+
109+
protected VolumeDao getVolumeDao() {
110+
if (volumeDao == null) {
111+
volumeDao = new VolumeDaoImpl();
112+
}
113+
return volumeDao;
114+
}
115+
102116
/*
103117
GenericDao.customSearch using GenericSearchBuilder and GenericDao.update using
104118
GenericDao.createSearchBuilder used here to prevent any future issues when new fields
105119
are added to StoragePoolVO or VolumeVO and this upgrade path starts to fail.
106120
*/
107-
private void updateStorPoolStorageType() {
108-
storageDao = new PrimaryDataStoreDaoImpl();
109-
StoragePoolVO pool = storageDao.createForUpdate();
121+
protected void updateStorPoolStorageType() {
122+
StoragePoolVO pool = getStorageDao().createForUpdate();
110123
pool.setPoolType(StoragePoolType.StorPool);
111-
SearchBuilder<StoragePoolVO> sb = storageDao.createSearchBuilder();
124+
SearchBuilder<StoragePoolVO> sb = getStorageDao().createSearchBuilder();
112125
sb.and("provider", sb.entity().getStorageProviderName(), SearchCriteria.Op.EQ);
113126
sb.and("type", sb.entity().getPoolType(), SearchCriteria.Op.EQ);
114127
sb.done();
115128
SearchCriteria<StoragePoolVO> sc = sb.create();
116129
sc.setParameters("provider", StoragePoolType.StorPool.name());
117130
sc.setParameters("type", StoragePoolType.SharedMountPoint.name());
118-
storageDao.update(pool, sc);
131+
getStorageDao().update(pool, sc);
119132

120-
GenericSearchBuilder<StoragePoolVO, Long> gSb = storageDao.createSearchBuilder(Long.class);
133+
GenericSearchBuilder<StoragePoolVO, Long> gSb = getStorageDao().createSearchBuilder(Long.class);
121134
gSb.selectFields(gSb.entity().getId());
122135
gSb.and("provider", gSb.entity().getStorageProviderName(), SearchCriteria.Op.EQ);
123136
gSb.done();
124137
SearchCriteria<Long> gSc = gSb.create();
125138
gSc.setParameters("provider", StoragePoolType.StorPool.name());
126-
List<Long> poolIds = storageDao.customSearch(gSc, null);
127-
if (CollectionUtils.isEmpty(poolIds)) {
128-
return;
129-
}
139+
List<Long> poolIds = getStorageDao().customSearch(gSc, null);
130140
updateStorageTypeForStorPoolVolumes(poolIds);
131141
}
132142

133-
private void updateStorageTypeForStorPoolVolumes(List<Long> storagePoolIds) {
134-
volumeDao = new VolumeDaoImpl();
135-
VolumeVO volume = volumeDao.createForUpdate();
143+
protected void updateStorageTypeForStorPoolVolumes(List<Long> storagePoolIds) {
144+
if (CollectionUtils.isEmpty(storagePoolIds)) {
145+
return;
146+
}
147+
VolumeVO volume = getVolumeDao().createForUpdate();
136148
volume.setPoolType(StoragePoolType.StorPool);
137-
SearchBuilder<VolumeVO> sb = volumeDao.createSearchBuilder();
149+
SearchBuilder<VolumeVO> sb = getVolumeDao().createSearchBuilder();
138150
sb.and("poolId", sb.entity().getPoolId(), SearchCriteria.Op.IN);
139151
sb.done();
140152
SearchCriteria<VolumeVO> sc = sb.create();
141153
sc.setParameters("poolId", storagePoolIds.toArray());
142-
volumeDao.update(volume, sc);
154+
getVolumeDao().update(volume, sc);
143155
}
144156
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
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 com.cloud.upgrade.dao;
18+
19+
import java.util.Collections;
20+
import java.util.List;
21+
22+
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
23+
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
24+
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
25+
import org.junit.Assert;
26+
import org.junit.Test;
27+
import org.junit.runner.RunWith;
28+
import org.mockito.Mockito;
29+
import org.mockito.Spy;
30+
import org.mockito.junit.MockitoJUnitRunner;
31+
32+
import com.cloud.storage.Storage;
33+
import com.cloud.storage.VolumeVO;
34+
import com.cloud.storage.dao.VolumeDao;
35+
import com.cloud.storage.dao.VolumeDaoImpl;
36+
import com.cloud.utils.db.GenericSearchBuilder;
37+
import com.cloud.utils.db.SearchBuilder;
38+
import com.cloud.utils.db.SearchCriteria;
39+
40+
@RunWith(MockitoJUnitRunner.class)
41+
public class Upgrade41700to41710Test {
42+
@Spy
43+
Upgrade41700to41710 upgrade41700to41710;
44+
45+
@Test
46+
public void testGetStorageDao_FirstInvocationCreatesInstance() {
47+
PrimaryDataStoreDao dao1 = upgrade41700to41710.getStorageDao();
48+
Assert.assertNotNull(dao1);
49+
Assert.assertTrue(dao1 instanceof PrimaryDataStoreDaoImpl);
50+
}
51+
52+
@Test
53+
public void testGetStorageDao_SubsequentInvocationReturnsSameInstance() {
54+
PrimaryDataStoreDao dao1 = upgrade41700to41710.getStorageDao();
55+
PrimaryDataStoreDao dao2 = upgrade41700to41710.getStorageDao();
56+
Assert.assertSame(dao1, dao2);
57+
}
58+
59+
@Test
60+
public void testGetVolumeDao_FirstInvocationCreatesInstance() {
61+
VolumeDao dao1 = upgrade41700to41710.getVolumeDao();
62+
Assert.assertNotNull(dao1);
63+
Assert.assertTrue(dao1 instanceof VolumeDaoImpl);
64+
}
65+
66+
@Test
67+
public void testGetVolumeDao_SubsequentInvocationReturnsSameInstance() {
68+
VolumeDao dao1 = upgrade41700to41710.getVolumeDao();
69+
VolumeDao dao2 = upgrade41700to41710.getVolumeDao();
70+
Assert.assertSame(dao1, dao2);
71+
}
72+
73+
@Test
74+
public void testUpdateStorPoolStorageType_WithPoolIds() {
75+
PrimaryDataStoreDao storageDao = Mockito.mock(PrimaryDataStoreDao.class);
76+
Mockito.doReturn(storageDao).when(upgrade41700to41710).getStorageDao();
77+
StoragePoolVO pool = Mockito.mock(StoragePoolVO.class);
78+
SearchBuilder<StoragePoolVO> searchBuilder = Mockito.mock(SearchBuilder.class);
79+
Mockito.when(storageDao.createSearchBuilder()).thenReturn(searchBuilder);
80+
Mockito.when(searchBuilder.entity()).thenReturn(pool);
81+
Mockito.when(searchBuilder.create()).thenReturn(Mockito.mock(SearchCriteria.class));
82+
GenericSearchBuilder<StoragePoolVO, Long> gSb = Mockito.mock(GenericSearchBuilder.class);
83+
Mockito.doReturn(gSb).when(storageDao).createSearchBuilder(Mockito.any());
84+
Mockito.when(gSb.create()).thenReturn(Mockito.mock(SearchCriteria.class));
85+
Mockito.when(gSb.entity()).thenReturn(pool);
86+
Mockito.when(storageDao.createForUpdate()).thenReturn(pool);
87+
Mockito.doNothing().when(upgrade41700to41710).updateStorageTypeForStorPoolVolumes(Mockito.any());
88+
89+
Mockito.when(storageDao.update(Mockito.any(StoragePoolVO.class), Mockito.any())).thenReturn(2);
90+
Mockito.when(storageDao.customSearch(Mockito.any(), Mockito.any())).thenReturn(List.of(1L, 2L));
91+
upgrade41700to41710.updateStorPoolStorageType();
92+
Mockito.verify(storageDao, Mockito.times(1)).update(Mockito.any(StoragePoolVO.class), Mockito.any());
93+
Mockito.verify(upgrade41700to41710, Mockito.times(1)).updateStorageTypeForStorPoolVolumes(Mockito.any());
94+
}
95+
96+
@Test
97+
public void testUpdateStorageTypeForStorPoolVolumes_EmptyPoolIds() {
98+
VolumeDao volumeDao = Mockito.mock(VolumeDao.class);
99+
List<Long> storagePoolIds = Collections.emptyList();
100+
upgrade41700to41710.updateStorageTypeForStorPoolVolumes(storagePoolIds);
101+
Mockito.verify(volumeDao, Mockito.never()).update(Mockito.any(VolumeVO.class), Mockito.any());
102+
}
103+
104+
@Test
105+
public void testUpdateStorageTypeForStorPoolVolumes_WithPoolIds() {
106+
VolumeDao volumeDao = Mockito.mock(VolumeDao.class);
107+
List<Long> storagePoolIds = List.of(1L, 2L, 3L);
108+
VolumeVO volume = Mockito.mock(VolumeVO.class);
109+
SearchBuilder<VolumeVO> searchBuilder = Mockito.mock(SearchBuilder.class);
110+
SearchCriteria<VolumeVO> searchCriteria = Mockito.mock(SearchCriteria.class);
111+
Mockito.when(volumeDao.createForUpdate()).thenReturn(volume);
112+
Mockito.when(volumeDao.createSearchBuilder()).thenReturn(searchBuilder);
113+
Mockito.when(searchBuilder.entity()).thenReturn(volume);
114+
Mockito.when(searchBuilder.create()).thenReturn(searchCriteria);
115+
Mockito.when(volumeDao.update(Mockito.any(VolumeVO.class), Mockito.any())).thenReturn(3);
116+
Mockito.doReturn(volumeDao).when(upgrade41700to41710).getVolumeDao();
117+
upgrade41700to41710.updateStorageTypeForStorPoolVolumes(storagePoolIds);
118+
Mockito.verify(volumeDao).createForUpdate();
119+
Mockito.verify(volume).setPoolType(Storage.StoragePoolType.StorPool);
120+
Mockito.verify(volumeDao).update(Mockito.eq(volume), Mockito.eq(searchCriteria));
121+
Mockito.verify(searchCriteria).setParameters("poolId", storagePoolIds.toArray());
122+
}
123+
}

0 commit comments

Comments
 (0)