|
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