Skip to content

Commit 2149e82

Browse files
committed
Merge release branch 4.17 to main
2 parents 0efa4f6 + 147ea06 commit 2149e82

File tree

6 files changed

+62
-7
lines changed

6 files changed

+62
-7
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3771,6 +3771,10 @@ public void checkIfCanUpgrade(final VirtualMachine vmInstance, final ServiceOffe
37713771
throw new InvalidParameterValueException("Invalid parameter, newServiceOffering can't be null");
37723772
}
37733773

3774+
if (ServiceOffering.State.Inactive.equals(newServiceOffering.getState())) {
3775+
throw new InvalidParameterValueException(String.format("New service offering is inactive: [%s].", newServiceOffering.getUuid()));
3776+
}
3777+
37743778
if (!(vmInstance.getState().equals(State.Stopped) || vmInstance.getState().equals(State.Running))) {
37753779
s_logger.warn("Unable to upgrade virtual machine " + vmInstance.toString() + " in state " + vmInstance.getState());
37763780
throw new InvalidParameterValueException("Unable to upgrade virtual machine " + vmInstance.toString() + " " + " in state " + vmInstance.getState() +

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,13 @@ public void testCheckIfCanUpgrade() throws Exception {
318318
virtualMachineManagerImpl.checkIfCanUpgrade(vmInstanceMock, serviceOfferingMock);
319319
}
320320

321+
@Test(expected = InvalidParameterValueException.class)
322+
public void testCheckIfCanUpgradeFail() {
323+
when(serviceOfferingMock.getState()).thenReturn(ServiceOffering.State.Inactive);
324+
325+
virtualMachineManagerImpl.checkIfCanUpgrade(vmInstanceMock, serviceOfferingMock);
326+
}
327+
321328
@Test
322329
public void isStorageCrossClusterMigrationTestStorageTypeEqualsCluster() {
323330
Mockito.doReturn(2L).when(storagePoolVoMock).getClusterId();

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5781,6 +5781,10 @@ public UserVm createVirtualMachine(DeployVMCmd cmd) throws InsufficientCapacityE
57815781
throw new InvalidParameterValueException("Unable to find service offering: " + serviceOfferingId);
57825782
}
57835783

5784+
if (ServiceOffering.State.Inactive.equals(serviceOffering.getState())) {
5785+
throw new InvalidParameterValueException(String.format("Service offering is inactive: [%s].", serviceOffering.getUuid()));
5786+
}
5787+
57845788
if (serviceOffering.getDiskOfferingStrictness() && overrideDiskOfferingId != null) {
57855789
throw new InvalidParameterValueException(String.format("Cannot override disk offering id %d since provided service offering is strictly mapped to its disk offering", overrideDiskOfferingId));
57865790
}

server/src/main/java/org/apache/cloudstack/network/router/deployment/RouterDeploymentDefinition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ protected void findAccountServiceOfferingId(long accountId) {
407407
private void verifyServiceOfferingByUuid(String offeringUuid) {
408408
logger.debug("Verifying router service offering with uuid : " + offeringUuid);
409409
ServiceOfferingVO serviceOffering = serviceOfferingDao.findByUuid(offeringUuid);
410-
if (serviceOffering != null && serviceOffering.isSystemUse()) {
410+
if (serviceOffering != null && serviceOffering.isSystemUse() && ServiceOffering.State.Active.equals(serviceOffering.getState())) {
411411
DiskOfferingVO diskOffering = diskOfferingDao.findById(serviceOffering.getDiskOfferingId());
412412
boolean isLocalStorage = ConfigurationManagerImpl.SystemVMUseLocalStorage.valueIn(dest.getDataCenter().getId());
413413
if (isLocalStorage == diskOffering.isUseLocalStorage()) {

server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.mockito.ArgumentMatchers.anyLong;
2626
import static org.mockito.ArgumentMatchers.anyMap;
2727
import static org.mockito.ArgumentMatchers.anyString;
28+
import static org.mockito.ArgumentMatchers.eq;
2829
import static org.mockito.ArgumentMatchers.nullable;
2930
import static org.mockito.Mockito.doNothing;
3031
import static org.mockito.Mockito.doReturn;
@@ -44,6 +45,7 @@
4445
import com.cloud.utils.exception.CloudRuntimeException;
4546
import org.apache.cloudstack.api.BaseCmd.HTTPMethod;
4647
import org.apache.cloudstack.api.command.user.vm.ResetVMUserDataCmd;
48+
import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
4749
import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;
4850
import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
4951
import org.apache.cloudstack.context.CallContext;
@@ -59,13 +61,16 @@
5961
import org.mockito.Spy;
6062
import org.mockito.junit.MockitoJUnitRunner;
6163
import org.powermock.core.classloader.annotations.PrepareForTest;
64+
import org.springframework.test.util.ReflectionTestUtils;
6265

6366
import com.cloud.configuration.Resource;
67+
import com.cloud.dc.DataCenter;
6468
import com.cloud.dc.DataCenterVO;
6569
import com.cloud.dc.dao.DataCenterDao;
6670
import com.cloud.exception.InsufficientAddressCapacityException;
6771
import com.cloud.exception.InsufficientCapacityException;
6872
import com.cloud.exception.InvalidParameterValueException;
73+
import com.cloud.exception.ResourceAllocationException;
6974
import com.cloud.exception.ResourceUnavailableException;
7075
import com.cloud.hypervisor.Hypervisor;
7176
import com.cloud.network.NetworkModel;
@@ -84,11 +89,13 @@
8489
import com.cloud.storage.dao.VMTemplateDao;
8590
import com.cloud.user.Account;
8691
import com.cloud.user.AccountManager;
92+
import com.cloud.user.AccountService;
8793
import com.cloud.user.AccountVO;
8894
import com.cloud.user.ResourceLimitService;
8995
import com.cloud.user.UserVO;
9096
import com.cloud.user.dao.AccountDao;
9197
import com.cloud.uservm.UserVm;
98+
import com.cloud.utils.db.EntityManager;
9299
import com.cloud.vm.dao.NicDao;
93100
import com.cloud.vm.dao.UserVmDao;
94101
import com.cloud.vm.dao.UserVmDetailsDao;
@@ -135,6 +142,12 @@ public class UserVmManagerImplTest {
135142
@Mock
136143
private AccountManager accountManager;
137144

145+
@Mock
146+
private AccountService accountService;
147+
148+
@Mock
149+
private EntityManager entityManager;
150+
138151
@Mock
139152
private UserVmDetailsDao userVmDetailVO;
140153

@@ -174,7 +187,16 @@ public class UserVmManagerImplTest {
174187
@Mock
175188
private VolumeDao volumeDaoMock;
176189

177-
private long vmId = 1l;
190+
@Mock
191+
AccountVO account;
192+
193+
@Mock
194+
private ServiceOfferingVO serviceOffering;
195+
196+
private static final long vmId = 1l;
197+
private static final long zoneId = 2L;
198+
private static final long accountId = 3L;
199+
private static final long serviceOfferingId = 10L;
178200

179201
private static final long GiB_TO_BYTES = 1024 * 1024 * 1024;
180202

@@ -190,7 +212,7 @@ public void beforeTest() {
190212

191213
when(_dcDao.findById(anyLong())).thenReturn(_dcMock);
192214

193-
Mockito.when(userVmDao.findById(Mockito.eq(vmId))).thenReturn(userVmVoMock);
215+
Mockito.when(userVmDao.findById(vmId)).thenReturn(userVmVoMock);
194216

195217
Mockito.when(callerAccount.getType()).thenReturn(Account.Type.ADMIN);
196218
CallContext.register(callerUser, callerAccount);
@@ -221,14 +243,14 @@ public void validateGuestOsIdForUpdateVirtualMachineCommandTestOsTypeNotFound()
221243
@Test
222244
public void validateGuestOsIdForUpdateVirtualMachineCommandTestOsTypeFound() {
223245
Mockito.when(updateVmCommand.getOsTypeId()).thenReturn(1l);
224-
Mockito.when(guestOSDao.findById(Mockito.eq(1l))).thenReturn(Mockito.mock(GuestOSVO.class));
246+
Mockito.when(guestOSDao.findById(1l)).thenReturn(Mockito.mock(GuestOSVO.class));
225247

226248
userVmManagerImpl.validateGuestOsIdForUpdateVirtualMachineCommand(updateVmCommand);
227249
}
228250

229251
@Test(expected = InvalidParameterValueException.class)
230252
public void validateInputsAndPermissionForUpdateVirtualMachineCommandTestVmNotFound() {
231-
Mockito.when(userVmDao.findById(Mockito.eq(vmId))).thenReturn(null);
253+
Mockito.when(userVmDao.findById(vmId)).thenReturn(null);
232254

233255
userVmManagerImpl.validateInputsAndPermissionForUpdateVirtualMachineCommand(updateVmCommand);
234256
}
@@ -624,6 +646,7 @@ private DiskOfferingVO prepareDiskOffering(long rootSize, long diskOfferingId, l
624646
return newRootDiskOffering;
625647
}
626648

649+
<<<<<<< HEAD
627650
private ServiceOfferingVO prepareOfferingsForEncryptionValidation(long diskOfferingId, boolean encryption) {
628651
ServiceOfferingVO svcOffering = Mockito.mock(ServiceOfferingVO.class);
629652
DiskOfferingVO diskOffering = Mockito.mock(DiskOfferingVO.class);
@@ -874,4 +897,20 @@ public void recoverRootVolumeTestDestroyState() {
874897
Mockito.verify(volumeApiService).recoverVolume(volumeVOMock.getId());
875898
Mockito.verify(volumeDaoMock).attachVolume(volumeVOMock.getId(), vmId, UserVmManagerImpl.ROOT_DEVICE_ID);
876899
}
900+
901+
@Test(expected = InvalidParameterValueException.class)
902+
public void createVirtualMachineWithInactiveServiceOffering() throws ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException {
903+
DeployVMCmd deployVMCmd = new DeployVMCmd();
904+
ReflectionTestUtils.setField(deployVMCmd, "zoneId", zoneId);
905+
ReflectionTestUtils.setField(deployVMCmd, "serviceOfferingId", serviceOfferingId);
906+
deployVMCmd._accountService = accountService;
907+
908+
when(accountService.finalyzeAccountId(nullable(String.class), nullable(Long.class), nullable(Long.class), eq(true))).thenReturn(accountId);
909+
when(accountService.getActiveAccountById(accountId)).thenReturn(account);
910+
when(entityManager.findById(DataCenter.class, zoneId)).thenReturn(_dcMock);
911+
when(entityManager.findById(ServiceOffering.class, serviceOfferingId)).thenReturn(serviceOffering);
912+
when(serviceOffering.getState()).thenReturn(ServiceOffering.State.Inactive);
913+
914+
userVmManagerImpl.createVirtualMachine(deployVMCmd);
915+
}
877916
}

ui/src/views/compute/wizard/SecurityGroupSelection.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,9 @@ export default {
140140
methods: {
141141
fetchData () {
142142
const params = {
143-
domainid: this.$store.getters.userInfo.domainid,
144-
account: this.$store.getters.userInfo.account,
143+
projectid: this.$store.getters.project ? this.$store.getters.project.id : null,
144+
domainid: this.$store.getters.project && this.$store.getters.project.id ? null : this.$store.getters.userInfo.domainid,
145+
account: this.$store.getters.project && this.$store.getters.project.id ? null : this.$store.getters.userInfo.account,
145146
page: this.page,
146147
pageSize: this.pageSize
147148
}

0 commit comments

Comments
 (0)