Skip to content

Commit 4ba339f

Browse files
committed
add unit tests
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent 7c82efb commit 4ba339f

File tree

2 files changed

+93
-31
lines changed

2 files changed

+93
-31
lines changed

engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,6 @@
4949
import javax.naming.ConfigurationException;
5050
import javax.persistence.EntityExistsException;
5151

52-
import com.cloud.configuration.Resource;
53-
import com.cloud.domain.Domain;
54-
import com.cloud.domain.dao.DomainDao;
55-
import com.cloud.exception.ResourceAllocationException;
56-
import com.cloud.network.vpc.VpcVO;
57-
import com.cloud.network.vpc.dao.VpcDao;
58-
import com.cloud.user.dao.AccountDao;
59-
import com.cloud.event.ActionEventUtils;
60-
import com.google.gson.Gson;
6152
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
6253
import org.apache.cloudstack.annotation.AnnotationService;
6354
import org.apache.cloudstack.annotation.dao.AnnotationDao;
@@ -158,6 +149,7 @@
158149
import com.cloud.api.query.vo.DomainRouterJoinVO;
159150
import com.cloud.api.query.vo.UserVmJoinVO;
160151
import com.cloud.capacity.CapacityManager;
152+
import com.cloud.configuration.Resource;
161153
import com.cloud.dc.ClusterDetailsDao;
162154
import com.cloud.dc.ClusterDetailsVO;
163155
import com.cloud.dc.ClusterVO;
@@ -176,6 +168,9 @@
176168
import com.cloud.deploy.DeploymentPlanningManager;
177169
import com.cloud.deploy.DeploymentPlanningManagerImpl;
178170
import com.cloud.deployasis.dao.UserVmDeployAsIsDetailsDao;
171+
import com.cloud.domain.Domain;
172+
import com.cloud.domain.dao.DomainDao;
173+
import com.cloud.event.ActionEventUtils;
179174
import com.cloud.event.EventTypes;
180175
import com.cloud.event.UsageEventUtils;
181176
import com.cloud.event.UsageEventVO;
@@ -187,6 +182,7 @@
187182
import com.cloud.exception.InsufficientServerCapacityException;
188183
import com.cloud.exception.InvalidParameterValueException;
189184
import com.cloud.exception.OperationTimedoutException;
185+
import com.cloud.exception.ResourceAllocationException;
190186
import com.cloud.exception.ResourceUnavailableException;
191187
import com.cloud.exception.StorageAccessException;
192188
import com.cloud.exception.StorageUnavailableException;
@@ -209,6 +205,8 @@
209205
import com.cloud.network.dao.NetworkVO;
210206
import com.cloud.network.router.VirtualRouter;
211207
import com.cloud.network.security.SecurityGroupManager;
208+
import com.cloud.network.vpc.VpcVO;
209+
import com.cloud.network.vpc.dao.VpcDao;
212210
import com.cloud.offering.DiskOffering;
213211
import com.cloud.offering.DiskOfferingInfo;
214212
import com.cloud.offering.NetworkOffering;
@@ -244,6 +242,7 @@
244242
import com.cloud.user.Account;
245243
import com.cloud.user.ResourceLimitService;
246244
import com.cloud.user.User;
245+
import com.cloud.user.dao.AccountDao;
247246
import com.cloud.uservm.UserVm;
248247
import com.cloud.utils.DateUtil;
249248
import com.cloud.utils.Journal;
@@ -279,6 +278,7 @@
279278
import com.cloud.vm.snapshot.VMSnapshotManager;
280279
import com.cloud.vm.snapshot.VMSnapshotVO;
281280
import com.cloud.vm.snapshot.dao.VMSnapshotDao;
281+
import com.google.gson.Gson;
282282

283283
public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMachineManager, VmWorkJobHandler, Listener, Configurable {
284284

@@ -1092,6 +1092,19 @@ protected void checkAndAttemptMigrateVmAcrossCluster(final VMInstanceVO vm, fina
10921092
markVolumesInPool(vm, answer);
10931093
}
10941094

1095+
protected void updateVmMetadataManufacturerAndProduct(VirtualMachineTO vmTO, VMInstanceVO vm) {
1096+
String metadataManufacturer = VmMetadataManufacturer.valueIn(vm.getDataCenterId());
1097+
if (StringUtils.isBlank(metadataManufacturer)) {
1098+
metadataManufacturer = VmMetadataManufacturer.defaultValue();
1099+
}
1100+
vmTO.setMetadataManufacturer(metadataManufacturer);
1101+
String metadataProduct = VmMetadataProductName.valueIn(vm.getDataCenterId());
1102+
if (StringUtils.isBlank(metadataManufacturer)) {
1103+
metadataProduct = String.format("CloudStack %s Hypervisor", vm.getHypervisorType().toString());
1104+
}
1105+
vmTO.setMetadataProductName(metadataProduct);
1106+
}
1107+
10951108
@Override
10961109
public void orchestrateStart(final String vmUuid, final Map<VirtualMachineProfile.Param, Object> params, final DeploymentPlan planToDeploy, final DeploymentPlanner planner)
10971110
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
@@ -1262,16 +1275,6 @@ public void orchestrateStart(final String vmUuid, final Map<VirtualMachineProfil
12621275
vmGuru.finalizeVirtualMachineProfile(vmProfile, dest, ctx);
12631276

12641277
final VirtualMachineTO vmTO = hvGuru.implement(vmProfile);
1265-
String metadataManufacturer = VmMetadataManufacturer.valueIn(vm.getDataCenterId());
1266-
if (StringUtils.isBlank(metadataManufacturer)) {
1267-
metadataManufacturer = VmMetadataManufacturer.defaultValue();
1268-
}
1269-
vmTO.setMetadataManufacturer(metadataManufacturer);
1270-
String metadataProduct = VmMetadataProductName.valueIn(vm.getDataCenterId());
1271-
if (StringUtils.isBlank(metadataManufacturer)) {
1272-
metadataProduct = String.format("CloudStack %s Hypervisor", vm.getHypervisorType().toString());
1273-
}
1274-
vmTO.setMetadataProductName(metadataProduct);
12751278

12761279
checkAndSetEnterSetupMode(vmTO, params);
12771280

engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java

Lines changed: 71 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,26 +37,18 @@
3737
import java.util.List;
3838
import java.util.Map;
3939
import java.util.Random;
40+
import java.util.UUID;
4041
import java.util.stream.Collectors;
4142

42-
import com.cloud.agent.api.to.VirtualMachineTO;
43-
import com.cloud.api.query.vo.UserVmJoinVO;
44-
import com.cloud.dc.DataCenterVO;
45-
import com.cloud.dc.dao.DataCenterDao;
46-
import com.cloud.domain.DomainVO;
47-
import com.cloud.domain.dao.DomainDao;
48-
import com.cloud.network.dao.NetworkDao;
49-
import com.cloud.network.dao.NetworkVO;
50-
import com.cloud.network.vpc.VpcVO;
51-
import com.cloud.network.vpc.dao.VpcDao;
52-
import com.cloud.user.AccountVO;
53-
import com.cloud.user.dao.AccountDao;
5443
import org.apache.cloudstack.context.CallContext;
5544
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
5645
import org.apache.cloudstack.framework.config.ConfigKey;
46+
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
47+
import org.apache.cloudstack.framework.config.impl.ConfigDepotImpl;
5748
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
5849
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
5950
import org.apache.commons.collections.MapUtils;
51+
import org.junit.After;
6052
import org.junit.Assert;
6153
import org.junit.Before;
6254
import org.junit.Test;
@@ -76,24 +68,34 @@
7668
import com.cloud.agent.api.StopAnswer;
7769
import com.cloud.agent.api.StopCommand;
7870
import com.cloud.agent.api.routing.NetworkElementCommand;
71+
import com.cloud.agent.api.to.VirtualMachineTO;
7972
import com.cloud.api.query.dao.UserVmJoinDao;
73+
import com.cloud.api.query.vo.UserVmJoinVO;
8074
import com.cloud.dc.ClusterDetailsDao;
8175
import com.cloud.dc.ClusterDetailsVO;
8276
import com.cloud.dc.ClusterVO;
77+
import com.cloud.dc.DataCenterVO;
8378
import com.cloud.dc.Pod;
8479
import com.cloud.dc.dao.ClusterDao;
80+
import com.cloud.dc.dao.DataCenterDao;
8581
import com.cloud.deploy.DataCenterDeployment;
8682
import com.cloud.deploy.DeployDestination;
8783
import com.cloud.deploy.DeploymentPlan;
8884
import com.cloud.deploy.DeploymentPlanner;
8985
import com.cloud.deploy.DeploymentPlanner.ExcludeList;
9086
import com.cloud.deploy.DeploymentPlanningManager;
87+
import com.cloud.domain.DomainVO;
88+
import com.cloud.domain.dao.DomainDao;
9189
import com.cloud.exception.InvalidParameterValueException;
9290
import com.cloud.host.Host;
9391
import com.cloud.host.HostVO;
9492
import com.cloud.host.dao.HostDao;
9593
import com.cloud.hypervisor.Hypervisor.HypervisorType;
9694
import com.cloud.hypervisor.HypervisorGuruManager;
95+
import com.cloud.network.dao.NetworkDao;
96+
import com.cloud.network.dao.NetworkVO;
97+
import com.cloud.network.vpc.VpcVO;
98+
import com.cloud.network.vpc.dao.VpcDao;
9799
import com.cloud.offering.ServiceOffering;
98100
import com.cloud.org.Cluster;
99101
import com.cloud.service.ServiceOfferingVO;
@@ -115,7 +117,9 @@
115117
import com.cloud.storage.dao.VolumeDao;
116118
import com.cloud.template.VirtualMachineTemplate;
117119
import com.cloud.user.Account;
120+
import com.cloud.user.AccountVO;
118121
import com.cloud.user.User;
122+
import com.cloud.user.dao.AccountDao;
119123
import com.cloud.utils.Journal;
120124
import com.cloud.utils.Pair;
121125
import com.cloud.utils.Ternary;
@@ -220,8 +224,11 @@ public class VirtualMachineManagerImplTest {
220224
@Mock
221225
protected StateMachine2<State, VirtualMachine.Event, VirtualMachine> _stateMachine;
222226

227+
private ConfigDepotImpl configDepotImpl;
228+
223229
@Before
224230
public void setup() {
231+
ReflectionTestUtils.getField(VirtualMachineManager.VmMetadataManufacturer, "s_depot");
225232
virtualMachineManagerImpl.setHostAllocators(new ArrayList<>());
226233

227234
when(vmInstanceMock.getId()).thenReturn(vmInstanceVoMockId);
@@ -251,6 +258,11 @@ public void setup() {
251258
virtualMachineManagerImpl.setStoragePoolAllocators(storagePoolAllocators);
252259
}
253260

261+
@After
262+
public void cleanup() {
263+
ReflectionTestUtils.setField(VirtualMachineManager.VmMetadataManufacturer, "s_depot", configDepotImpl);
264+
}
265+
254266
@Test
255267
public void testaddHostIpToCertDetailsIfConfigAllows() {
256268
Host vmHost = mock(Host.class);
@@ -1236,4 +1248,51 @@ public void testGetDiskOfferingSuitabilityForVm() {
12361248
assertFalse(result.get(1L));
12371249
assertTrue(result.get(2L));
12381250
}
1251+
1252+
private void overrideVmMetadataConfigValue(final String manufacturer, final String product) {
1253+
ConfigKey configKey = VirtualMachineManager.VmMetadataManufacturer;
1254+
this.configDepotImpl = (ConfigDepotImpl)ReflectionTestUtils.getField(configKey, "s_depot");
1255+
ConfigDepotImpl configDepot = Mockito.mock(ConfigDepotImpl.class);
1256+
ScopedConfigStorage storage = Mockito.mock(ScopedConfigStorage.class);
1257+
Mockito.when(storage.getConfigValue(Mockito.anyLong(), Mockito.eq(configKey))).thenReturn(manufacturer);
1258+
Mockito.when(storage.getConfigValue(Mockito.anyLong(), Mockito.eq(VirtualMachineManager.VmMetadataProductName)))
1259+
.thenReturn(product);
1260+
Mockito.when(configDepot.findScopedConfigStorage(configKey)).thenReturn(storage);
1261+
Mockito.when(configDepot.findScopedConfigStorage(VirtualMachineManager.VmMetadataProductName)).thenReturn(storage);
1262+
ReflectionTestUtils.setField(configKey, "s_depot", configDepot);
1263+
}
1264+
1265+
private void restoreConfigDepot() {
1266+
ReflectionTestUtils.setField(VirtualMachineManager.VmMetadataManufacturer, "s_depot", this.configDepotImpl);
1267+
}
1268+
1269+
private Pair<VirtualMachineTO, VMInstanceVO> getDummyVmTOAndVm() {
1270+
VirtualMachineTO virtualMachineTO = new VirtualMachineTO(1L, "VM", VirtualMachine.Type.User, 1,
1271+
1000, 256, 512, VirtualMachineTemplate.BootloaderType.HVM, "OS",
1272+
false, false, "Pass");
1273+
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);
1274+
Mockito.when(vm.getDataCenterId()).thenReturn(1L);
1275+
return new Pair<>(virtualMachineTO, vm);
1276+
}
1277+
1278+
@Test
1279+
public void testUpdateVmMetadataManufacturerAndProductDefaultManufacturer() {
1280+
overrideVmMetadataConfigValue("", "");
1281+
Pair<VirtualMachineTO, VMInstanceVO> pair = getDummyVmTOAndVm();
1282+
VirtualMachineTO to = pair.first();
1283+
virtualMachineManagerImpl.updateVmMetadataManufacturerAndProduct(to, pair.second());
1284+
Assert.assertEquals(VirtualMachineManager.VmMetadataManufacturer.defaultValue(), to.getMetadataManufacturer());
1285+
}
1286+
1287+
@Test
1288+
public void testUpdateVmMetadataManufacturerAndProductCustomManufacturer() {
1289+
String manufacturer = UUID.randomUUID().toString();
1290+
String product = UUID.randomUUID().toString();
1291+
overrideVmMetadataConfigValue(manufacturer, product);
1292+
Pair<VirtualMachineTO, VMInstanceVO> pair = getDummyVmTOAndVm();
1293+
VirtualMachineTO to = pair.first();
1294+
virtualMachineManagerImpl.updateVmMetadataManufacturerAndProduct(to, pair.second());
1295+
Assert.assertEquals(manufacturer, to.getMetadataManufacturer());
1296+
Assert.assertEquals(product, to.getMetadataProductName());
1297+
}
12391298
}

0 commit comments

Comments
 (0)