This is an automated email from the ASF dual-hosted git repository.
pearl11594 pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.20 by this push:
new 34896a1ada1 Address `assignVm` regression (#10875)
34896a1ada1 is described below
commit 34896a1ada1dc43a4366eb63e3867ca37fa92fb4
Author: Fabricio Duarte <[email protected]>
AuthorDate: Wed May 21 00:51:41 2025 -0300
Address `assignVm` regression (#10875)
* Address assignVm regression
---
.../main/java/com/cloud/vm/UserVmManagerImpl.java | 146 ++++++++++++++-------
.../java/com/cloud/vm/UserVmManagerImplTest.java | 113 ++++++++--------
2 files changed, 156 insertions(+), 103 deletions(-)
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 69d64a4153c..0abab9b149d 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -54,6 +54,7 @@ import javax.naming.ConfigurationException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
+import com.cloud.network.NetworkService;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -605,6 +606,9 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
@Inject
NsxProviderDao nsxProviderDao;
+ @Inject
+ NetworkService networkService;
+
private ScheduledExecutorService _executor = null;
private ScheduledExecutorService _vmIpFetchExecutor = null;
@@ -7445,12 +7449,21 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
logger.trace("Verifying if the new account [{}] has access to the
specified domain [{}].", newAccount, domain);
_accountMgr.checkAccess(newAccount, domain);
- Transaction.execute(new TransactionCallbackNoReturn() {
- @Override
- public void doInTransactionWithoutResult(TransactionStatus status)
{
- executeStepsToChangeOwnershipOfVm(cmd, caller, oldAccount,
newAccount, vm, offering, volumes, template, domainId);
+ Network newNetwork = ensureDestinationNetwork(cmd, vm, newAccount);
+ try {
+ Transaction.execute(new TransactionCallbackNoReturn() {
+ @Override
+ public void doInTransactionWithoutResult(TransactionStatus
status) {
+ executeStepsToChangeOwnershipOfVm(cmd, caller, oldAccount,
newAccount, vm, offering, volumes, template, domainId);
+ }
+ });
+ } catch (Exception e) {
+ if (newNetwork != null) {
+ logger.debug("Cleaning up the created network.");
+ networkService.deleteNetwork(newNetwork.getId(), false);
}
- });
+ throw e;
+ }
logger.info("VM [{}] now belongs to account [{}].",
vm.getInstanceName(), newAccountName);
return vm;
@@ -7556,6 +7569,67 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
}
}
+ /**
+ * This method will create an isolated network for the new account to
allocate the virtual machine if:
+ * <ul>
+ * <li>no networks were specified to the command, AND</li>
+ * <li>the zone uses advanced networks without security groups, AND</li>
+ * <li>the VM does not belong to any shared or L2 network that the new
owner can access, AND</li>
+ * <li>the new owner does not have any isolated networks</li>
+ * </ul>
+ * @return the created isolated network, or null if it was not created.
+ */
+ protected Network ensureDestinationNetwork(AssignVMCmd cmd, UserVmVO vm,
Account newAccount) throws InsufficientCapacityException,
ResourceAllocationException {
+ DataCenterVO zone = _dcDao.findById(vm.getDataCenterId());
+ if (zone.getNetworkType() == NetworkType.Basic) {
+ logger.debug("No need to ensure an isolated network for the VM
because the zone uses basic networks.");
+ return null;
+ }
+
+ List<Long> networkIdList = cmd.getNetworkIds();
+ List<Long> securityGroupIdList = cmd.getSecurityGroupIdList();
+ if (_networkModel.checkSecurityGroupSupportForNetwork(newAccount,
zone, networkIdList, securityGroupIdList)) {
+ logger.debug("No need to ensure an isolated network for the VM
because security groups is enabled for this zone.");
+ return null;
+ }
+ if (CollectionUtils.isNotEmpty(securityGroupIdList)) {
+ throw new InvalidParameterValueException("Cannot move VM with
security groups; security group feature is not enabled in this zone.");
+ }
+
+ LinkedHashSet<NetworkVO> applicableNetworks = new LinkedHashSet<>();
+ addNetworksToNetworkIdList(vm, newAccount, networkIdList,
applicableNetworks, new HashMap<>(), new HashMap<>());
+ if (!applicableNetworks.isEmpty()) {
+ logger.debug("No need to create an isolated network for the VM
because there are other applicable networks.");
+ return null;
+ }
+
+ List<? extends Network> virtualNetworks =
_networkModel.listNetworksForAccount(newAccount.getId(), zone.getId(),
Network.GuestType.Isolated);
+ if (!virtualNetworks.isEmpty()) {
+ logger.debug("No need create a new isolated network for the VM
because the owner already has existing isolated networks.");
+ return null;
+ }
+
+ return createApplicableNetworkToCreateVm(newAccount, zone);
+ }
+
+ /**
+ * @return a network offering with required availability that will be used
to create a new isolated network for the VM
+ * assignment process.
+ */
+ protected NetworkOfferingVO
getOfferingWithRequiredAvailabilityForNetworkCreation() {
+ List<NetworkOfferingVO> requiredOfferings =
_networkOfferingDao.listByAvailability(Availability.Required, false);
+ if (CollectionUtils.isEmpty(requiredOfferings)) {
+ throw new InvalidParameterValueException(String.format("Unable to
find network offering with availability [%s] to automatically create the
network as a part of VM "
+ + "creation.", Availability.Required));
+ }
+ NetworkOfferingVO firstRequiredOffering = requiredOfferings.get(0);
+ if (firstRequiredOffering.getState() != NetworkOffering.State.Enabled)
{
+ throw new InvalidParameterValueException(String.format("Required
network offering ID [%s] is not in [%s] state.", firstRequiredOffering.getId(),
+ NetworkOffering.State.Enabled));
+ }
+ return firstRequiredOffering;
+ }
+
/**
* Executes all ownership steps necessary to assign a VM to another user:
* generating a destroy VM event ({@link EventTypes}),
@@ -7649,9 +7723,9 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
/**
* Updates the network for a VM being assigned to a new account.
* If the network type for the zone is basic, calls
- * {@link #updateBasicTypeNetworkForVm(AssignVMCmd, UserVmVO, Account,
VirtualMachineTemplate, VirtualMachineProfileImpl, DataCenterVO, List, List)}.
+ * {@link #updateBasicTypeNetworkForVm(UserVmVO, Account,
VirtualMachineTemplate, VirtualMachineProfileImpl, DataCenterVO, List, List)}.
* If the network type for the zone is advanced, calls
- * {@link #updateAdvancedTypeNetworkForVm(AssignVMCmd, Account, UserVmVO,
Account, VirtualMachineTemplate, VirtualMachineProfileImpl, DataCenterVO, List,
List)}.
+ * {@link #updateAdvancedTypeNetworkForVm(Account, UserVmVO, Account,
VirtualMachineTemplate, VirtualMachineProfileImpl, DataCenterVO, List, List)}.
* @param cmd The assignVMCmd.
* @param caller The account calling the assignVMCmd.
* @param vm The VM to be assigned to another user, which has to have
networks updated.
@@ -7674,11 +7748,11 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
List<Long> securityGroupIdList = cmd.getSecurityGroupIdList();
if (zone.getNetworkType() == NetworkType.Basic) {
- updateBasicTypeNetworkForVm(cmd, vm, newAccount, template,
vmOldProfile, zone, networkIdList, securityGroupIdList);
+ updateBasicTypeNetworkForVm(vm, newAccount, template,
vmOldProfile, zone, networkIdList, securityGroupIdList);
return;
}
- updateAdvancedTypeNetworkForVm(cmd, caller, vm, newAccount, template,
vmOldProfile, zone, networkIdList, securityGroupIdList);
+ updateAdvancedTypeNetworkForVm(caller, vm, newAccount, template,
vmOldProfile, zone, networkIdList, securityGroupIdList);
}
/**
@@ -7731,7 +7805,6 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* allocating all networks ({@link #allocateNetworksForVm(UserVmVO,
LinkedHashMap)}),
* and adding security groups to the VM ({@link
#addSecurityGroupsToVm(Account, UserVmVO, VirtualMachineTemplate, List,
Network)}).
* If the network has network IDs, throws a {@link
InvalidParameterValueException}.
- * @param cmd The assignVMCmd which attempts to update a basic network.
* @param vm The VM for which the networks are allocated.
* @param newAccount The new account to which the VM will be assigned to.
* @param template The template of the VM.
@@ -7741,7 +7814,7 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* @param securityGroupIdList The list of security groups provided to the
assignVMCmd.
* @throws InsufficientCapacityException
*/
- protected void updateBasicTypeNetworkForVm(AssignVMCmd cmd, UserVmVO vm,
Account newAccount, VirtualMachineTemplate template, VirtualMachineProfileImpl
vmOldProfile,
+ protected void updateBasicTypeNetworkForVm(UserVmVO vm, Account
newAccount, VirtualMachineTemplate template, VirtualMachineProfileImpl
vmOldProfile,
DataCenterVO zone, List<Long>
networkIdList, List<Long> securityGroupIdList) throws
InsufficientCapacityException {
if (networkIdList != null && !networkIdList.isEmpty()) {
@@ -7771,11 +7844,10 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* Updates an advanced type network by:
* adding NICs to the networks ({@link
#addNicsToApplicableNetworksAndReturnDefaultNetwork(LinkedHashSet, Map, Map,
LinkedHashMap)}),
* allocating - if security groups are enabled ({@link
#allocateNetworksForVm(UserVmVO, LinkedHashMap)}) -
- * or selecting applicable networks otherwise ({@link
#selectApplicableNetworkToCreateVm(Account, Account, DataCenterVO, Set)}),
+ * or selecting applicable networks otherwise ({@link
#selectApplicableNetworkToCreateVm(Account, DataCenterVO, Set)}),
* and adding security groups to the VM ({@link
#addSecurityGroupsToVm(Account, UserVmVO, VirtualMachineTemplate, List,
Network)}) - if enabled in the zone.
* If no applicable network is provided and the zone has security groups
enabled, throws a {@link InvalidParameterValueException}.
* If security groups are not enabled, but security groups have been
provided, throws a {@link InvalidParameterValueException}.
- * @param cmd The assignVMCmd which attempts to update an advanced network.
* @param caller The caller of the assignVMCmd.
* @param vm The VM for which the networks are allocated or selected.
* @param newAccount The new account to which the VM will be assigned to.
@@ -7788,7 +7860,7 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* @throws ResourceAllocationException
* @throws InvalidParameterValueException
*/
- protected void updateAdvancedTypeNetworkForVm(AssignVMCmd cmd, Account
caller, UserVmVO vm, Account newAccount, VirtualMachineTemplate template,
+ protected void updateAdvancedTypeNetworkForVm(Account caller, UserVmVO vm,
Account newAccount, VirtualMachineTemplate template,
VirtualMachineProfileImpl
vmOldProfile, DataCenterVO zone, List<Long> networkIdList, List<Long>
securityGroupIdList)
throws InsufficientCapacityException, ResourceAllocationException,
InvalidParameterValueException {
@@ -7801,7 +7873,8 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
logger.debug("Cleanup of old security groups for VM [{}]. They
will be recreated for the new account once the VM is started.", vm);
_securityGroupMgr.removeInstanceFromGroups(vm);
- addNetworksToNetworkIdList(vm, newAccount, vmOldProfile,
networkIdList, applicableNetworks, requestedIPv4ForNics, requestedIPv6ForNics);
+ addNetworksToNetworkIdList(vm, newAccount, networkIdList,
applicableNetworks, requestedIPv4ForNics, requestedIPv6ForNics);
+ cleanupOfOldOwnerNicsForNetwork(vmOldProfile);
NetworkVO defaultNetwork =
addNicsToApplicableNetworksAndReturnDefaultNetwork(applicableNetworks,
requestedIPv4ForNics, requestedIPv6ForNics, networks);
@@ -7819,10 +7892,11 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
throw new InvalidParameterValueException("Cannot move VM with
security groups; security group feature is not enabled in this zone.");
}
- addNetworksToNetworkIdList(vm, newAccount, vmOldProfile,
networkIdList, applicableNetworks, requestedIPv4ForNics, requestedIPv6ForNics);
+ addNetworksToNetworkIdList(vm, newAccount, networkIdList,
applicableNetworks, requestedIPv4ForNics, requestedIPv6ForNics);
+ cleanupOfOldOwnerNicsForNetwork(vmOldProfile);
if (applicableNetworks.isEmpty()) {
- selectApplicableNetworkToCreateVm(caller, newAccount, zone,
applicableNetworks);
+ selectApplicableNetworkToCreateVm(newAccount, zone,
applicableNetworks);
}
addNicsToApplicableNetworksAndReturnDefaultNetwork(applicableNetworks,
requestedIPv4ForNics, requestedIPv6ForNics, networks);
@@ -7878,16 +7952,14 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* Adds all networks to the list of network IDs by:
* attempting to keep the shared network for the VM ({@link
#keepOldSharedNetworkForVm(UserVmVO, Account, List, Set, Map, Map)}),
* adding any additional applicable networks to the VM ({@link
#addAdditionalNetworksToVm(UserVmVO, Account, List, Set, Map, Map)}),
- * and cleaning up the network associated to the old owner ({@link
#cleanupOfOldOwnerNicsForNetwork(VirtualMachineProfileImpl)}).
* @param vm The VM to add the networks to.
* @param newAccount The account to access the networks.
- * @param vmOldProfile The old profile of the VM.
* @param networkIdList The network IDs which have to be added to the VM.
* @param applicableNetworks The applicable networks which have to be
added to the VM.
* @param requestedIPv4ForNics All requested IPv4 for NICs.
* @param requestedIPv6ForNics All requested IPv6 for NICs.
*/
- protected void addNetworksToNetworkIdList(UserVmVO vm, Account newAccount,
VirtualMachineProfileImpl vmOldProfile, List<Long> networkIdList,
Set<NetworkVO> applicableNetworks,
+ protected void addNetworksToNetworkIdList(UserVmVO vm, Account newAccount,
List<Long> networkIdList, Set<NetworkVO> applicableNetworks,
Map<Long, String>
requestedIPv4ForNics, Map<Long, String> requestedIPv6ForNics) {
logger.trace("Adding networks to network list.");
@@ -7895,8 +7967,6 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
keepOldSharedNetworkForVm(vm, newAccount, networkIdList,
applicableNetworks, requestedIPv4ForNics, requestedIPv6ForNics);
addAdditionalNetworksToVm(vm, newAccount, networkIdList,
applicableNetworks, requestedIPv4ForNics, requestedIPv6ForNics);
-
- cleanupOfOldOwnerNicsForNetwork(vmOldProfile);
}
/**
@@ -7937,34 +8007,21 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* If the network offering applicable is not enabled, throws a {@link
InvalidParameterValueException}.
* If more than one default isolated network is related to the account,
throws a {@link InvalidParameterValueException}, since the ID of the network to
be used has to be
* specified.
- * @param caller The account which calls to select the applicable network.
* @param newAccount The new account associated to the selected network.
* @param zone The zone where the network is selected.
* @param applicableNetworks The applicable networks to which the selected
network has to be added to.
* @throws InsufficientCapacityException
* @throws ResourceAllocationException
*/
- protected void selectApplicableNetworkToCreateVm(Account caller, Account
newAccount, DataCenterVO zone, Set<NetworkVO> applicableNetworks)
+ protected void selectApplicableNetworkToCreateVm(Account newAccount,
DataCenterVO zone, Set<NetworkVO> applicableNetworks)
throws InsufficientCapacityException, ResourceAllocationException {
logger.trace("Selecting the applicable network to create the VM.");
- List<NetworkOfferingVO> requiredOfferings =
_networkOfferingDao.listByAvailability(Availability.Required, false);
- if (CollectionUtils.isEmpty(requiredOfferings)) {
- throw new InvalidParameterValueException(String.format("Unable to
find network offering with availability [%s] to automatically create the
network as a part of VM "
- + "creation.", Availability.Required));
- }
-
- NetworkOfferingVO firstRequiredOffering = requiredOfferings.get(0);
- if (firstRequiredOffering.getState() != NetworkOffering.State.Enabled)
{
- throw new InvalidParameterValueException(String.format("Required
network offering ID [%s] is not in [%s] state.", firstRequiredOffering.getId(),
- NetworkOffering.State.Enabled));
- }
-
NetworkVO defaultNetwork;
List<? extends Network> virtualNetworks =
_networkModel.listNetworksForAccount(newAccount.getId(), zone.getId(),
Network.GuestType.Isolated);
if (virtualNetworks.isEmpty()) {
- defaultNetwork = createApplicableNetworkToCreateVm(caller,
newAccount, zone, firstRequiredOffering);
+ throw new CloudRuntimeException(String.format("Could not find an
applicable network to create virtual machine for account [%s].", newAccount));
} else if (virtualNetworks.size() > 1) {
throw new InvalidParameterValueException(String.format("More than
one default isolated network has been found for account [%s]; please specify
networkIDs.",
newAccount));
@@ -8096,13 +8153,15 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
* @throws InsufficientCapacityException
* @throws ResourceAllocationException
*/
- protected NetworkVO createApplicableNetworkToCreateVm(Account caller,
Account newAccount, DataCenterVO zone, NetworkOfferingVO requiredOffering)
+ protected NetworkVO createApplicableNetworkToCreateVm(Account newAccount,
DataCenterVO zone)
throws InsufficientCapacityException, ResourceAllocationException {
logger.trace("Creating an applicable network to create the VM.");
NetworkVO defaultNetwork;
Long zoneId = zone.getId();
+ Account caller = CallContext.current().getCallingAccount();
+ NetworkOfferingVO requiredOffering =
getOfferingWithRequiredAvailabilityForNetworkCreation();
String requiredOfferingTags = requiredOffering.getTags();
long physicalNetworkId = _networkModel.findPhysicalNetworkId(zoneId,
requiredOfferingTags, requiredOffering.getTrafficType());
@@ -8112,14 +8171,13 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
throw new InvalidParameterValueException(String.format("Unable to
find physical network with ID [%s] and tag [%s].", physicalNetworkId,
requiredOfferingTags));
}
- Long requiredOfferingId = requiredOffering.getId();
+ long requiredOfferingId = requiredOffering.getId();
logger.debug("Creating network for account [{}] from the network
offering [{}] as a part of VM deployment process.", newAccount,
requiredOfferingId);
- String newAccountName = newAccount.getAccountName();
- Network newNetwork =
_networkMgr.createGuestNetwork(requiredOfferingId, newAccountName + "-network",
- newAccountName + "-network", null, null, null, false, null,
newAccount,
- null, physicalNetwork, zoneId, ACLType.Account, null, null,
- null, null, true, null, null, null, null, null, null, null,
null, null, null, null);
+ String networkName = String.format("%s-network",
newAccount.getAccountName());
+ Network newNetwork =
_networkMgr.createGuestNetwork(requiredOfferingId, networkName, networkName,
null, null, null,
+ false, null, newAccount, null, physicalNetwork, zoneId,
ACLType.Account, null, null, null, null, true, null,
+ null, null, null, null, null, null, null, null, null, null);
if (requiredOffering.isPersistent()) {
newNetwork = implementNetwork(caller, zone, newNetwork);
diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
index f07d2af21af..ac1ecaa456b 100644
--- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
+++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
@@ -40,6 +40,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.cloud.network.NetworkService;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.api.BaseCmd.HTTPMethod;
@@ -365,6 +366,9 @@ public class UserVmManagerImplTest {
@Mock
private VMInstanceVO vmInstanceMock;
+ @Mock
+ NetworkService networkServiceMock;
+
private static final long vmId = 1l;
private static final long zoneId = 2L;
private static final long accountId = 3L;
@@ -1970,12 +1974,12 @@ public class UserVmManagerImplTest {
public void
updateVmNetworkTestCallsUpdateBasicTypeNetworkForVmIfBasicTypeZone() throws
InsufficientCapacityException, ResourceAllocationException {
Mockito.doReturn(_dcMock).when(_dcDao).findById(Mockito.anyLong());
Mockito.doReturn(DataCenter.NetworkType.Basic).when(_dcMock).getNetworkType();
-
Mockito.doNothing().when(userVmManagerImpl).updateBasicTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
+
Mockito.doNothing().when(userVmManagerImpl).updateBasicTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any());
userVmManagerImpl.updateVmNetwork(assignVmCmdMock, callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock);
-
Mockito.verify(userVmManagerImpl).updateBasicTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
+
Mockito.verify(userVmManagerImpl).updateBasicTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any());
}
@@ -1983,12 +1987,12 @@ public class UserVmManagerImplTest {
public void
updateVmNetworkTestCallsUpdateAdvancedTypeNetworkForVmIfNotBasicTypeZone()
throws InsufficientCapacityException, ResourceAllocationException {
Mockito.doReturn(_dcMock).when(_dcDao).findById(Mockito.anyLong());
Mockito.doReturn(DataCenter.NetworkType.Advanced).when(_dcMock).getNetworkType();
-
Mockito.doNothing().when(userVmManagerImpl).updateAdvancedTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
+
Mockito.doNothing().when(userVmManagerImpl).updateAdvancedTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
userVmManagerImpl.updateVmNetwork(assignVmCmdMock, callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock);
-
Mockito.verify(userVmManagerImpl).updateAdvancedTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
+
Mockito.verify(userVmManagerImpl).updateAdvancedTypeNetworkForVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
}
@@ -2058,40 +2062,37 @@ public class UserVmManagerImplTest {
}
@Test
- public void
addNetworksToNetworkIdListTestCallsKeepOldSharedNetworkForVmAddAdditionalNetworksToVmAndCleanupOfOldOwnerNicsForNetwork()
{
+ public void
addNetworksToNetworkIdListTestCallsKeepOldSharedNetworkForVmAndAddAdditionalNetworksToVm()
{
LinkedList<Long> networkIdList = new LinkedList<Long>();
HashSet<NetworkVO> applicableNetworks = new HashSet<NetworkVO>();
HashMap<Long, String> requestedIPv4ForNics = new HashMap<Long,
String>();
HashMap<Long, String> requestedIPv6ForNics = new HashMap<Long,
String>();
- userVmManagerImpl.addNetworksToNetworkIdList(userVmVoMock,
accountMock, virtualMachineProfileMock, networkIdList, applicableNetworks,
requestedIPv4ForNics,
+ userVmManagerImpl.addNetworksToNetworkIdList(userVmVoMock,
accountMock, networkIdList, applicableNetworks, requestedIPv4ForNics,
requestedIPv6ForNics);
Mockito.verify(userVmManagerImpl).keepOldSharedNetworkForVm(userVmVoMock,
accountMock, networkIdList, applicableNetworks, requestedIPv4ForNics,
requestedIPv6ForNics);
Mockito.verify(userVmManagerImpl).addAdditionalNetworksToVm(userVmVoMock,
accountMock, networkIdList, applicableNetworks, requestedIPv4ForNics,
requestedIPv6ForNics);
-
Mockito.verify(userVmManagerImpl).cleanupOfOldOwnerNicsForNetwork(virtualMachineProfileMock);
}
@Test
- public void
selectApplicableNetworkToCreateVmTestRequiredOfferingsListHasNoOfferingsThrowsInvalidParameterValueException()
{
+ public void
getOfferingWithRequiredAvailabilityForNetworkCreationTestRequiredOfferingsListHasNoOfferingsThrowsInvalidParameterValueException()
{
String expectedMessage = String.format("Unable to find network
offering with availability [%s] to automatically create the network as a part
of VM creation.",
NetworkOffering.Availability.Required);
- HashSet<NetworkVO> applicableNetworks = new HashSet<NetworkVO>();
- LinkedList<NetworkOfferingVO> requiredOfferings = new
LinkedList<NetworkOfferingVO>();
+ LinkedList<NetworkOfferingVO> requiredOfferings = new LinkedList<>();
Mockito.doReturn(requiredOfferings).when(networkOfferingDaoMock).listByAvailability(NetworkOffering.Availability.Required,
false);
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.selectApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, applicableNetworks);
+
userVmManagerImpl.getOfferingWithRequiredAvailabilityForNetworkCreation();
});
Assert.assertEquals(expectedMessage, assertThrows.getMessage());
}
@Test
- public void
selectApplicableNetworkToCreateVmTestFirstOfferingIsNotEnabledThrowsInvalidParameterValueException()
{
+ public void
getOfferingWithRequiredAvailabilityForNetworkCreationTestFirstOfferingIsNotEnabledThrowsInvalidParameterValueException()
{
String expectedMessage = String.format("Required network offering ID
[%s] is not in [%s] state.", 1l, NetworkOffering.State.Enabled);
- HashSet<NetworkVO> applicableNetworks = new HashSet<NetworkVO>();
Mockito.doReturn(networkOfferingVoListMock).when(networkOfferingDaoMock).listByAvailability(NetworkOffering.Availability.Required,
false);
Mockito.doReturn(networkOfferingVoMock).when(networkOfferingVoListMock).get(0);
@@ -2101,30 +2102,22 @@ public class UserVmManagerImplTest {
Mockito.doReturn(1l).when(networkOfferingVoMock).getId();
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.selectApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, applicableNetworks);
+
userVmManagerImpl.getOfferingWithRequiredAvailabilityForNetworkCreation();
});
Assert.assertEquals(expectedMessage, assertThrows.getMessage());
}
- @Test
- public void
selectApplicableNetworkToCreateVmTestVirtualNetworkIsEmptyCallsCreateApplicableNetworkToCreateVm()
throws InsufficientCapacityException,
+ @Test(expected = CloudRuntimeException.class)
+ public void
selectApplicableNetworkToCreateVmTestVirtualNetworkIsEmptyThrowsException()
throws InsufficientCapacityException,
ResourceAllocationException {
- HashSet<NetworkVO> applicableNetworks = new HashSet<NetworkVO>();
+ HashSet<NetworkVO> applicableNetworks = new HashSet<>();
LinkedList<? extends Network> virtualNetworks = new LinkedList<>();
-
Mockito.doReturn(networkOfferingVoListMock).when(networkOfferingDaoMock).listByAvailability(NetworkOffering.Availability.Required,
false);
-
Mockito.doReturn(networkOfferingVoMock).when(networkOfferingVoListMock).get(0);
-
Mockito.doReturn(virtualNetworks).when(networkModel).listNetworksForAccount(Mockito.anyLong(),
Mockito.anyLong(), Mockito.any());
-
Mockito.doReturn(NetworkOffering.State.Enabled).when(networkOfferingVoMock).getState();
-
-
Mockito.doReturn(networkMock).when(userVmManagerImpl).createApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
-
- userVmManagerImpl.selectApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, applicableNetworks);
-
Mockito.verify(userVmManagerImpl).createApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, networkOfferingVoMock);
+ userVmManagerImpl.selectApplicableNetworkToCreateVm(accountMock,
_dcMock, applicableNetworks);
}
@Test
@@ -2133,17 +2126,13 @@ public class UserVmManagerImplTest {
HashSet<NetworkVO> applicableNetworks = new HashSet<NetworkVO>();
LinkedList<NetworkVO> virtualNetworks = new LinkedList<NetworkVO>();
-
Mockito.doReturn(networkOfferingVoListMock).when(networkOfferingDaoMock).listByAvailability(NetworkOffering.Availability.Required,
false);
-
Mockito.doReturn(networkOfferingVoMock).when(networkOfferingVoListMock).get(0);
-
Mockito.doReturn(virtualNetworks).when(networkModel).listNetworksForAccount(Mockito.anyLong(),
Mockito.anyLong(), Mockito.any());
-
Mockito.doReturn(NetworkOffering.State.Enabled).when(networkOfferingVoMock).getState();
virtualNetworks.add(networkMock);
virtualNetworks.add(networkMock);
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.selectApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, applicableNetworks);
+ userVmManagerImpl.selectApplicableNetworkToCreateVm(accountMock,
_dcMock, applicableNetworks);
});
Assert.assertEquals(expectedMessage, assertThrows.getMessage());
@@ -2153,17 +2142,13 @@ public class UserVmManagerImplTest {
public void
selectApplicableNetworkToCreateVmTestVirtualNetworkHasOneNetworkCallsNetworkDaoFindById()
throws InsufficientCapacityException, ResourceAllocationException {
HashSet<NetworkVO> applicableNetworks = new HashSet<NetworkVO>();
-
Mockito.doReturn(networkOfferingVoListMock).when(networkOfferingDaoMock).listByAvailability(NetworkOffering.Availability.Required,
false);
-
Mockito.doReturn(networkOfferingVoMock).when(networkOfferingVoListMock).get(0);
-
Mockito.doReturn(networkVoListMock).when(networkModel).listNetworksForAccount(Mockito.anyLong(),
Mockito.anyLong(), Mockito.any());
-
Mockito.doReturn(NetworkOffering.State.Enabled).when(networkOfferingVoMock).getState();
Mockito.doReturn(false).when(networkVoListMock).isEmpty();
Mockito.doReturn(1).when(networkVoListMock).size();
Mockito.doReturn(networkMock).when(networkVoListMock).get(0);
- userVmManagerImpl.selectApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, applicableNetworks);
+ userVmManagerImpl.selectApplicableNetworkToCreateVm(accountMock,
_dcMock, applicableNetworks);
Mockito.verify(_networkDao).findById(Mockito.anyLong());
}
@@ -2452,9 +2437,11 @@ public class UserVmManagerImplTest {
@Test
public void
createApplicableNetworkToCreateVmTestPhysicalNetworkIsNullThrowsInvalidParameterValueException()
{
+
Mockito.doReturn(networkOfferingVoMock).when(userVmManagerImpl).getOfferingWithRequiredAvailabilityForNetworkCreation();
+
String expectedMessage = String.format("Unable to find physical
network with ID [%s] and tag [%s].", 0l, null);
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.createApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, networkOfferingVoMock);
+ userVmManagerImpl.createApplicableNetworkToCreateVm(accountMock,
_dcMock);
});
Assert.assertEquals(expectedMessage, assertThrows.getMessage());
@@ -2466,11 +2453,17 @@ public class UserVmManagerImplTest {
Mockito.doReturn(physicalNetworkVo).when(physicalNetworkDaoMock).findById(Mockito.anyLong());
Mockito.doReturn(true).when(networkOfferingVoMock).isPersistent();
+
Mockito.doReturn(networkOfferingVoMock).when(userVmManagerImpl).getOfferingWithRequiredAvailabilityForNetworkCreation();
Mockito.doReturn(networkMock).when(userVmManagerImpl).implementNetwork(Mockito.any(),
Mockito.any(), Mockito.any());
+
Mockito.doReturn(networkMock).when(_networkMgr).createGuestNetwork(Mockito.anyLong(),
Mockito.anyString(),
+ Mockito.anyString(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.anyBoolean(), Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.anyLong(), Mockito.any(), Mockito.any(), Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.anyBoolean(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
- userVmManagerImpl.createApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, networkOfferingVoMock);
+ userVmManagerImpl.createApplicableNetworkToCreateVm(accountMock,
_dcMock);
- Mockito.verify(userVmManagerImpl).implementNetwork(callerAccount,
_dcMock, null);
+ Mockito.verify(userVmManagerImpl).implementNetwork(callerAccount,
_dcMock, networkMock);
}
@Test
@@ -2480,16 +2473,16 @@ public class UserVmManagerImplTest {
PhysicalNetworkVO physicalNetworkVo = new PhysicalNetworkVO();
Mockito.doReturn(physicalNetworkVo).when(physicalNetworkDaoMock).findById(Mockito.anyLong());
- Mockito.doReturn(false).when(networkOfferingVoMock).isPersistent();
-
Mockito.doReturn(networkMock).when(_networkMgr).createGuestNetwork(Mockito.anyLong(),
Mockito.anyString(), Mockito.anyString(),
- Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.anyBoolean(), Mockito.any(), Mockito.any(), Mockito.any(),
- Mockito.any(), Mockito.anyLong(), Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
- Mockito.anyBoolean(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
- Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any());
+
Mockito.doReturn(networkMock).when(_networkMgr).createGuestNetwork(Mockito.anyLong(),
Mockito.anyString(),
+ Mockito.anyString(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.anyBoolean(), Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.anyLong(), Mockito.any(), Mockito.any(), Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.anyBoolean(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
+
Mockito.doReturn(networkOfferingVoMock).when(userVmManagerImpl).getOfferingWithRequiredAvailabilityForNetworkCreation();
Mockito.doReturn(1l).when(networkMock).getId();
Mockito.doReturn(networkMock).when(_networkDao).findById(Mockito.anyLong());
- userVmManagerImpl.createApplicableNetworkToCreateVm(callerAccount,
accountMock, _dcMock, networkOfferingVoMock);
+ userVmManagerImpl.createApplicableNetworkToCreateVm(accountMock,
_dcMock);
Mockito.verify(userVmManagerImpl,
Mockito.never()).implementNetwork(Mockito.any(), Mockito.any(), Mockito.any());
}
@@ -2674,7 +2667,7 @@ public class UserVmManagerImplTest {
networkIdList.add(1l);
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.updateBasicTypeNetworkForVm(assignVmCmdMock,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock, networkIdList,
+ userVmManagerImpl.updateBasicTypeNetworkForVm(userVmVoMock,
accountMock, virtualMachineTemplateMock, virtualMachineProfileMock, _dcMock,
networkIdList,
securityGroupIdList);
});
@@ -2689,7 +2682,7 @@ public class UserVmManagerImplTest {
Mockito.doReturn(networkMock).when(networkModel).getExclusiveGuestNetwork(Mockito.anyLong());
- userVmManagerImpl.updateBasicTypeNetworkForVm(assignVmCmdMock,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock, null,
+ userVmManagerImpl.updateBasicTypeNetworkForVm(userVmVoMock,
accountMock, virtualMachineTemplateMock, virtualMachineProfileMock, _dcMock,
null,
securityGroupIdList);
Mockito.verify(userVmManagerImpl).cleanupOfOldOwnerNicsForNetwork(virtualMachineProfileMock);
@@ -2707,7 +2700,7 @@ public class UserVmManagerImplTest {
Mockito.doReturn(networkMock).when(networkModel).getExclusiveGuestNetwork(Mockito.anyLong());
- userVmManagerImpl.updateBasicTypeNetworkForVm(assignVmCmdMock,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock, networkIdList,
+ userVmManagerImpl.updateBasicTypeNetworkForVm(userVmVoMock,
accountMock, virtualMachineTemplateMock, virtualMachineProfileMock, _dcMock,
networkIdList,
securityGroupIdList);
Mockito.verify(userVmManagerImpl).cleanupOfOldOwnerNicsForNetwork(virtualMachineProfileMock);
@@ -2725,7 +2718,7 @@ public class UserVmManagerImplTest {
Mockito.doReturn(true).when(networkModel).checkSecurityGroupSupportForNetwork(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.updateAdvancedTypeNetworkForVm(assignVmCmdMock,
callerAccount, userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock,
+ userVmManagerImpl.updateAdvancedTypeNetworkForVm(callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock,
_dcMock, networkIdList, securityGroupIdList);
});
@@ -2746,7 +2739,7 @@ public class UserVmManagerImplTest {
Mockito.doReturn(true).when(networkModel).checkSecurityGroupSupportForNetwork(accountMock,
_dcMock, networkIdList, securityGroupIdList);
- userVmManagerImpl.updateAdvancedTypeNetworkForVm(assignVmCmdMock,
callerAccount, userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock,
+ userVmManagerImpl.updateAdvancedTypeNetworkForVm(callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock,
networkIdList, securityGroupIdList);
Mockito.verify(securityGroupManagerMock).removeInstanceFromGroups(Mockito.any());
@@ -2765,7 +2758,7 @@ public class UserVmManagerImplTest {
Mockito.doReturn(false).when(networkModel).checkSecurityGroupSupportForNetwork(accountMock,
_dcMock, networkIdList, securityGroupIdList);
InvalidParameterValueException assertThrows =
Assert.assertThrows(expectedInvalidParameterValueException, () -> {
- userVmManagerImpl.updateAdvancedTypeNetworkForVm(assignVmCmdMock,
callerAccount, userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock,
+ userVmManagerImpl.updateAdvancedTypeNetworkForVm(callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock,
_dcMock, networkIdList, securityGroupIdList);
});
@@ -2780,16 +2773,17 @@ public class UserVmManagerImplTest {
LinkedList<Long> networkIdList = new LinkedList<Long>();
Mockito.doReturn(networkMock).when(userVmManagerImpl).addNicsToApplicableNetworksAndReturnDefaultNetwork(Mockito.any(),
Mockito.anyMap(), Mockito.anyMap(), Mockito.any());
-
Mockito.doNothing().when(userVmManagerImpl).selectApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
+
Mockito.doNothing().when(userVmManagerImpl).selectApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any());
Mockito.doReturn(false).when(networkModel).checkSecurityGroupSupportForNetwork(accountMock,
_dcMock, networkIdList, securityGroupIdList);
Mockito.doReturn(true).when(securityGroupIdList).isEmpty();
- userVmManagerImpl.updateAdvancedTypeNetworkForVm(assignVmCmdMock,
callerAccount, userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock,
+ userVmManagerImpl.updateAdvancedTypeNetworkForVm(callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock,
networkIdList, securityGroupIdList);
-
Mockito.verify(userVmManagerImpl).addNetworksToNetworkIdList(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyMap(),
Mockito.anyMap());
-
Mockito.verify(userVmManagerImpl).selectApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
+
Mockito.verify(userVmManagerImpl).addNetworksToNetworkIdList(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyMap(),
Mockito.anyMap());
+
Mockito.verify(userVmManagerImpl).cleanupOfOldOwnerNicsForNetwork(Mockito.any());
+
Mockito.verify(userVmManagerImpl).selectApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any());
Mockito.verify(userVmManagerImpl).addNicsToApplicableNetworksAndReturnDefaultNetwork(Mockito.any(),
Mockito.anyMap(), Mockito.anyMap(), Mockito.any());
Mockito.verify(userVmManagerImpl).allocateNetworksForVm(Mockito.any(),
Mockito.any());
}
@@ -2808,11 +2802,12 @@ public class UserVmManagerImplTest {
Mockito.doReturn(networkMock).when(_networkDao).findById(Mockito.anyLong());
Mockito.doReturn(true).when(userVmManagerImpl).canAccountUseNetwork(accountMock,
networkMock);
- userVmManagerImpl.updateAdvancedTypeNetworkForVm(assignVmCmdMock,
callerAccount, userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock,
+ userVmManagerImpl.updateAdvancedTypeNetworkForVm(callerAccount,
userVmVoMock, accountMock, virtualMachineTemplateMock,
virtualMachineProfileMock, _dcMock,
networkIdList, securityGroupIdList);
-
Mockito.verify(userVmManagerImpl).addNetworksToNetworkIdList(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyMap(),
Mockito.anyMap());
- Mockito.verify(userVmManagerImpl,
Mockito.never()).selectApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any());
+
Mockito.verify(userVmManagerImpl).addNetworksToNetworkIdList(Mockito.any(),
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyMap(),
Mockito.anyMap());
+
Mockito.verify(userVmManagerImpl).cleanupOfOldOwnerNicsForNetwork(Mockito.any());
+ Mockito.verify(userVmManagerImpl,
Mockito.never()).selectApplicableNetworkToCreateVm(Mockito.any(),
Mockito.any(), Mockito.any());
Mockito.verify(userVmManagerImpl).addNicsToApplicableNetworksAndReturnDefaultNetwork(Mockito.any(),
Mockito.anyMap(), Mockito.anyMap(), Mockito.any());
Mockito.verify(userVmManagerImpl).allocateNetworksForVm(Mockito.any(),
Mockito.any());
}