|
37 | 37 | import java.util.List;
|
38 | 38 | import java.util.Map;
|
39 | 39 | import java.util.Random;
|
| 40 | +import java.util.UUID; |
40 | 41 | import java.util.stream.Collectors;
|
41 | 42 |
|
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; |
54 | 43 | import org.apache.cloudstack.context.CallContext;
|
55 | 44 | import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
|
56 | 45 | import org.apache.cloudstack.framework.config.ConfigKey;
|
| 46 | +import org.apache.cloudstack.framework.config.ScopedConfigStorage; |
| 47 | +import org.apache.cloudstack.framework.config.impl.ConfigDepotImpl; |
57 | 48 | import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
|
58 | 49 | import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
|
59 | 50 | import org.apache.commons.collections.MapUtils;
|
| 51 | +import org.junit.After; |
60 | 52 | import org.junit.Assert;
|
61 | 53 | import org.junit.Before;
|
62 | 54 | import org.junit.Test;
|
|
76 | 68 | import com.cloud.agent.api.StopAnswer;
|
77 | 69 | import com.cloud.agent.api.StopCommand;
|
78 | 70 | import com.cloud.agent.api.routing.NetworkElementCommand;
|
| 71 | +import com.cloud.agent.api.to.VirtualMachineTO; |
79 | 72 | import com.cloud.api.query.dao.UserVmJoinDao;
|
| 73 | +import com.cloud.api.query.vo.UserVmJoinVO; |
80 | 74 | import com.cloud.dc.ClusterDetailsDao;
|
81 | 75 | import com.cloud.dc.ClusterDetailsVO;
|
82 | 76 | import com.cloud.dc.ClusterVO;
|
| 77 | +import com.cloud.dc.DataCenterVO; |
83 | 78 | import com.cloud.dc.Pod;
|
84 | 79 | import com.cloud.dc.dao.ClusterDao;
|
| 80 | +import com.cloud.dc.dao.DataCenterDao; |
85 | 81 | import com.cloud.deploy.DataCenterDeployment;
|
86 | 82 | import com.cloud.deploy.DeployDestination;
|
87 | 83 | import com.cloud.deploy.DeploymentPlan;
|
88 | 84 | import com.cloud.deploy.DeploymentPlanner;
|
89 | 85 | import com.cloud.deploy.DeploymentPlanner.ExcludeList;
|
90 | 86 | import com.cloud.deploy.DeploymentPlanningManager;
|
| 87 | +import com.cloud.domain.DomainVO; |
| 88 | +import com.cloud.domain.dao.DomainDao; |
91 | 89 | import com.cloud.exception.InvalidParameterValueException;
|
92 | 90 | import com.cloud.host.Host;
|
93 | 91 | import com.cloud.host.HostVO;
|
94 | 92 | import com.cloud.host.dao.HostDao;
|
95 | 93 | import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
96 | 94 | 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; |
97 | 99 | import com.cloud.offering.ServiceOffering;
|
98 | 100 | import com.cloud.org.Cluster;
|
99 | 101 | import com.cloud.service.ServiceOfferingVO;
|
|
115 | 117 | import com.cloud.storage.dao.VolumeDao;
|
116 | 118 | import com.cloud.template.VirtualMachineTemplate;
|
117 | 119 | import com.cloud.user.Account;
|
| 120 | +import com.cloud.user.AccountVO; |
118 | 121 | import com.cloud.user.User;
|
| 122 | +import com.cloud.user.dao.AccountDao; |
119 | 123 | import com.cloud.utils.Journal;
|
120 | 124 | import com.cloud.utils.Pair;
|
121 | 125 | import com.cloud.utils.Ternary;
|
@@ -220,8 +224,12 @@ public class VirtualMachineManagerImplTest {
|
220 | 224 | @Mock
|
221 | 225 | protected StateMachine2<State, VirtualMachine.Event, VirtualMachine> _stateMachine;
|
222 | 226 |
|
| 227 | + private ConfigDepotImpl configDepotImpl; |
| 228 | + private boolean updatedConfigKeyDepot = false; |
| 229 | + |
223 | 230 | @Before
|
224 | 231 | public void setup() {
|
| 232 | + ReflectionTestUtils.getField(VirtualMachineManager.VmMetadataManufacturer, "s_depot"); |
225 | 233 | virtualMachineManagerImpl.setHostAllocators(new ArrayList<>());
|
226 | 234 |
|
227 | 235 | when(vmInstanceMock.getId()).thenReturn(vmInstanceVoMockId);
|
@@ -251,6 +259,13 @@ public void setup() {
|
251 | 259 | virtualMachineManagerImpl.setStoragePoolAllocators(storagePoolAllocators);
|
252 | 260 | }
|
253 | 261 |
|
| 262 | + @After |
| 263 | + public void cleanup() { |
| 264 | + if (updatedConfigKeyDepot) { |
| 265 | + ReflectionTestUtils.setField(VirtualMachineManager.VmMetadataManufacturer, "s_depot", configDepotImpl); |
| 266 | + } |
| 267 | + } |
| 268 | + |
254 | 269 | @Test
|
255 | 270 | public void testaddHostIpToCertDetailsIfConfigAllows() {
|
256 | 271 | Host vmHost = mock(Host.class);
|
@@ -1236,4 +1251,48 @@ public void testGetDiskOfferingSuitabilityForVm() {
|
1236 | 1251 | assertFalse(result.get(1L));
|
1237 | 1252 | assertTrue(result.get(2L));
|
1238 | 1253 | }
|
| 1254 | + |
| 1255 | + private void overrideVmMetadataConfigValue(final String manufacturer, final String product) { |
| 1256 | + ConfigKey configKey = VirtualMachineManager.VmMetadataManufacturer; |
| 1257 | + this.configDepotImpl = (ConfigDepotImpl)ReflectionTestUtils.getField(configKey, "s_depot"); |
| 1258 | + ConfigDepotImpl configDepot = Mockito.mock(ConfigDepotImpl.class); |
| 1259 | + ScopedConfigStorage storage = Mockito.mock(ScopedConfigStorage.class); |
| 1260 | + Mockito.when(storage.getConfigValue(Mockito.anyLong(), Mockito.eq(configKey))).thenReturn(manufacturer); |
| 1261 | + Mockito.when(storage.getConfigValue(Mockito.anyLong(), Mockito.eq(VirtualMachineManager.VmMetadataProductName))) |
| 1262 | + .thenReturn(product); |
| 1263 | + Mockito.when(configDepot.findScopedConfigStorage(configKey)).thenReturn(storage); |
| 1264 | + Mockito.when(configDepot.findScopedConfigStorage(VirtualMachineManager.VmMetadataProductName)).thenReturn(storage); |
| 1265 | + ReflectionTestUtils.setField(configKey, "s_depot", configDepot); |
| 1266 | + updatedConfigKeyDepot = true; |
| 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 | + } |
1239 | 1298 | }
|
0 commit comments