Skip to content

Commit 6f4445c

Browse files
hsato03Copilotwinterhazel
authored
Add offering preset variables for Network and VPC Quota tariffs (#11810)
* Add offering preset variable to Network and VPC tariffs * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Fabricio Duarte <fabricio.duarte.jr@gmail.com> * Add tests --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Fabricio Duarte <fabricio.duarte.jr@gmail.com>
1 parent 856d83a commit 6f4445c

5 files changed

Lines changed: 182 additions & 3 deletions

File tree

engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-common-daos-between-management-and-usage-context.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,7 @@
7373
<bean id="volumeDaoImpl" class="com.cloud.storage.dao.VolumeDaoImpl" />
7474
<bean id="reservationDao" class="org.apache.cloudstack.reservation.dao.ReservationDaoImpl" />
7575
<bean id="backupOfferingDaoImpl" class="org.apache.cloudstack.backup.dao.BackupOfferingDaoImpl" />
76+
<bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" />
77+
<bean id="vpcOfferingDetailsDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDetailsDaoImpl"/>
7678
<bean id="backupOfferingDetailsDaoImpl" class="org.apache.cloudstack.backup.dao.BackupOfferingDetailsDaoImpl" />
7779
</beans>

engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,11 @@
236236
<bean id="volumeStatsDaoImpl" class="com.cloud.storage.dao.VolumeStatsDaoImpl" />
237237
<bean id="vpcDaoImpl" class="com.cloud.network.vpc.dao.VpcDaoImpl" />
238238
<bean id="vpcGatewayDaoImpl" class="com.cloud.network.vpc.dao.VpcGatewayDaoImpl" />
239-
<bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" />
240239
<bean id="vpcOfferingJoinDaoImpl" class="com.cloud.api.query.dao.VpcOfferingJoinDaoImpl" />
241240
<bean id="vpcOfferingServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingServiceMapDaoImpl" />
242241
<bean id="vpcServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcServiceMapDaoImpl" />
243242
<bean id="vpnUserDaoImpl" class="com.cloud.network.dao.VpnUserDaoImpl" />
244243
<bean id="applicationLbRuleDaoImpl" class="org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDaoImpl" />
245-
<bean id="vpcOfferingDetailsDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDetailsDaoImpl"/>
246244
<bean id="networkDetailsDaoImpl" class="com.cloud.network.dao.NetworkDetailsDaoImpl" />
247245
<bean id="tungstenGuestNetworkIpAddressDaoImpl" class="com.cloud.network.dao.TungstenGuestNetworkIpAddressDaoImpl"/>
248246
<bean id="tungstenSecurityGroupRuleDaoImpl" class="com.cloud.network.security.dao.TungstenSecurityGroupRuleDaoImpl"/>

framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelper.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@
2828
import com.cloud.dc.ClusterDetailsDao;
2929
import com.cloud.dc.ClusterDetailsVO;
3030
import com.cloud.host.HostTagVO;
31+
import com.cloud.hypervisor.Hypervisor;
3132
import com.cloud.network.dao.NetworkVO;
33+
import com.cloud.network.vpc.VpcOfferingVO;
3234
import com.cloud.network.vpc.VpcVO;
3335
import javax.inject.Inject;
3436

35-
import com.cloud.hypervisor.Hypervisor;
3637
import com.cloud.storage.StoragePoolTagVO;
3738
import org.apache.cloudstack.acl.RoleVO;
3839
import org.apache.cloudstack.acl.dao.RoleDao;
@@ -66,6 +67,7 @@
6667
import com.cloud.host.HostVO;
6768
import com.cloud.host.dao.HostDao;
6869
import com.cloud.host.dao.HostTagsDao;
70+
import com.cloud.network.vpc.dao.VpcOfferingDao;
6971
import com.cloud.offerings.NetworkOfferingVO;
7072
import com.cloud.offerings.dao.NetworkOfferingDao;
7173
import com.cloud.server.ResourceTag;
@@ -191,6 +193,9 @@ public class PresetVariableHelper {
191193
@Inject
192194
ClusterDetailsDao clusterDetailsDao;
193195

196+
@Inject
197+
VpcOfferingDao vpcOfferingDao;
198+
194199
protected boolean backupSnapshotAfterTakingSnapshot = SnapshotInfo.BackupSnapshotAfterTakingSnapshot.value();
195200

196201
private List<Integer> runningAndAllocatedVmUsageTypes = Arrays.asList(UsageTypes.RUNNING_VM, UsageTypes.ALLOCATED_VM);
@@ -778,6 +783,19 @@ protected void loadPresetVariableValueForNetwork(UsageVO usageRecord, Value valu
778783
value.setId(network.getUuid());
779784
value.setName(network.getName());
780785
value.setState(usageRecord.getState());
786+
787+
value.setNetworkOffering(getPresetVariableValueNetworkOffering(network.getNetworkOfferingId()));
788+
}
789+
790+
protected GenericPresetVariable getPresetVariableValueNetworkOffering(Long networkOfferingId) {
791+
NetworkOfferingVO networkOfferingVo = networkOfferingDao.findByIdIncludingRemoved(networkOfferingId);
792+
validateIfObjectIsNull(networkOfferingVo, networkOfferingId, "network offering");
793+
794+
GenericPresetVariable networkOffering = new GenericPresetVariable();
795+
networkOffering.setId(networkOfferingVo.getUuid());
796+
networkOffering.setName(networkOfferingVo.getName());
797+
798+
return networkOffering;
781799
}
782800

783801
protected void loadPresetVariableValueForVpc(UsageVO usageRecord, Value value) {
@@ -793,6 +811,18 @@ protected void loadPresetVariableValueForVpc(UsageVO usageRecord, Value value) {
793811

794812
value.setId(vpc.getUuid());
795813
value.setName(vpc.getName());
814+
value.setVpcOffering(getPresetVariableValueVpcOffering(vpc.getVpcOfferingId()));
815+
}
816+
817+
protected GenericPresetVariable getPresetVariableValueVpcOffering(Long vpcOfferingId) {
818+
VpcOfferingVO vpcOfferingVo = vpcOfferingDao.findByIdIncludingRemoved(vpcOfferingId);
819+
validateIfObjectIsNull(vpcOfferingVo, vpcOfferingId, "vpc offering");
820+
821+
GenericPresetVariable vpcOffering = new GenericPresetVariable();
822+
vpcOffering.setId(vpcOfferingVo.getUuid());
823+
vpcOffering.setName(vpcOfferingVo.getName());
824+
825+
return vpcOffering;
796826
}
797827

798828
/**

framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Value.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ public class Value extends GenericPresetVariable {
9696

9797
private String state;
9898

99+
@PresetVariableDefinition(description = "Network offering of the network.", supportedTypes = {QuotaTypes.NETWORK})
100+
private GenericPresetVariable networkOffering;
101+
102+
@PresetVariableDefinition(description = "VPC offering of the VPC.", supportedTypes = {QuotaTypes.VPC})
103+
private GenericPresetVariable vpcOffering;
104+
99105
public Host getHost() {
100106
return host;
101107
}
@@ -255,4 +261,20 @@ public String getState() {
255261
public void setState(String state) {
256262
this.state = state;
257263
}
264+
265+
public GenericPresetVariable getNetworkOffering() {
266+
return networkOffering;
267+
}
268+
269+
public void setNetworkOffering(GenericPresetVariable networkOffering) {
270+
this.networkOffering = networkOffering;
271+
}
272+
273+
public GenericPresetVariable getVpcOffering() {
274+
return vpcOffering;
275+
}
276+
277+
public void setVpcOffering(GenericPresetVariable vpcOffering) {
278+
this.vpcOffering = vpcOffering;
279+
}
258280
}

framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelperTest.java

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,20 @@
3131
import com.cloud.dc.ClusterDetailsVO;
3232
import com.cloud.host.HostTagVO;
3333
import com.cloud.hypervisor.Hypervisor;
34+
import com.cloud.network.dao.NetworkVO;
35+
import com.cloud.network.vpc.VpcOfferingVO;
36+
import com.cloud.network.vpc.VpcVO;
37+
import com.cloud.network.vpc.dao.VpcOfferingDao;
3438
import com.cloud.storage.StoragePoolTagVO;
3539
import org.apache.cloudstack.acl.RoleType;
3640
import org.apache.cloudstack.acl.RoleVO;
3741
import org.apache.cloudstack.acl.dao.RoleDao;
3842
import org.apache.cloudstack.backup.BackupOfferingVO;
3943
import org.apache.cloudstack.backup.dao.BackupOfferingDao;
4044
import org.apache.cloudstack.quota.constant.QuotaTypes;
45+
import org.apache.cloudstack.quota.dao.NetworkDao;
4146
import org.apache.cloudstack.quota.dao.VmTemplateDao;
47+
import org.apache.cloudstack.quota.dao.VpcDao;
4248
import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
4349
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
4450
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
@@ -188,6 +194,15 @@ public class PresetVariableHelperTest {
188194
@Mock
189195
BackupOfferingDao backupOfferingDaoMock;
190196

197+
@Mock
198+
NetworkDao networkDaoMock;
199+
200+
@Mock
201+
VpcDao vpcDaoMock;
202+
203+
@Mock
204+
VpcOfferingDao vpcOfferingDaoMock;
205+
191206
List<Integer> runningAndAllocatedVmUsageTypes = Arrays.asList(UsageTypes.RUNNING_VM, UsageTypes.ALLOCATED_VM);
192207
List<Integer> templateAndIsoUsageTypes = Arrays.asList(UsageTypes.TEMPLATE, UsageTypes.ISO);
193208

@@ -223,6 +238,8 @@ private Value getValueForTests() {
223238
value.setVmSnapshotType(VMSnapshot.Type.Disk.toString());
224239
value.setComputingResources(getComputingResourcesForTests());
225240
value.setVolumeType(Volume.Type.DATADISK.toString());
241+
value.setNetworkOffering(getNetworkOfferingForTests());
242+
value.setVpcOffering(getVpcOfferingForTests());
226243
return value;
227244
}
228245

@@ -324,6 +341,20 @@ private DiskOfferingPresetVariables getDiskOfferingForTests() {
324341
return diskOffering;
325342
}
326343

344+
private GenericPresetVariable getNetworkOfferingForTests() {
345+
GenericPresetVariable networkOffering = new GenericPresetVariable();
346+
networkOffering.setId("network_offering_id");
347+
networkOffering.setName("network_offering_name");
348+
return networkOffering;
349+
}
350+
351+
private GenericPresetVariable getVpcOfferingForTests() {
352+
GenericPresetVariable vpcOffering = new GenericPresetVariable();
353+
vpcOffering.setId("vpc_offering_id");
354+
vpcOffering.setName("vpc_offering_name");
355+
return vpcOffering;
356+
}
357+
327358
private void mockMethodValidateIfObjectIsNull() {
328359
Mockito.doNothing().when(presetVariableHelperSpy).validateIfObjectIsNull(Mockito.any(), Mockito.anyLong(), Mockito.anyString());
329360
}
@@ -1289,4 +1320,100 @@ public void testGetSnapshotImageStoreRefNotNull() {
12891320
Mockito.when(imageStoreDaoMock.findById(1L)).thenReturn(store);
12901321
Assert.assertNotNull(presetVariableHelperSpy.getSnapshotImageStoreRef(1L, 1L));
12911322
}
1323+
1324+
@Test
1325+
public void loadPresetVariableValueForNetworkTestRecordIsNotANetworkDoNothing() {
1326+
getQuotaTypesForTests(UsageTypes.NETWORK).forEach(type -> {
1327+
Mockito.doReturn(type.getKey()).when(usageVoMock).getUsageType();
1328+
presetVariableHelperSpy.loadPresetVariableValueForNetwork(usageVoMock, null);
1329+
});
1330+
1331+
Mockito.verifyNoInteractions(networkDaoMock);
1332+
}
1333+
1334+
@Test
1335+
public void loadPresetVariableValueForNetworkTestRecordIsNetworkSetFields() {
1336+
Value expected = getValueForTests();
1337+
1338+
NetworkVO networkVoMock = Mockito.mock(NetworkVO.class);
1339+
Mockito.doReturn(networkVoMock).when(networkDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
1340+
1341+
mockMethodValidateIfObjectIsNull();
1342+
1343+
Mockito.doReturn(expected.getId()).when(networkVoMock).getUuid();
1344+
Mockito.doReturn(expected.getName()).when(networkVoMock).getName();
1345+
Mockito.doReturn(expected.getState()).when(usageVoMock).getState();
1346+
Mockito.doReturn(expected.getNetworkOffering()).when(presetVariableHelperSpy).getPresetVariableValueNetworkOffering(Mockito.anyLong());
1347+
1348+
Mockito.doReturn(UsageTypes.NETWORK).when(usageVoMock).getUsageType();
1349+
1350+
Value result = new Value();
1351+
presetVariableHelperSpy.loadPresetVariableValueForNetwork(usageVoMock, result);
1352+
1353+
assertPresetVariableIdAndName(expected, result);
1354+
Assert.assertEquals(expected.getState(), result.getState());
1355+
Assert.assertEquals(expected.getNetworkOffering(), result.getNetworkOffering());
1356+
}
1357+
1358+
@Test
1359+
public void loadPresetVariableValueForVpcTestRecordIsNotAVpcDoNothing() {
1360+
getQuotaTypesForTests(UsageTypes.VPC).forEach(type -> {
1361+
Mockito.doReturn(type.getKey()).when(usageVoMock).getUsageType();
1362+
presetVariableHelperSpy.loadPresetVariableValueForVpc(usageVoMock, null);
1363+
});
1364+
1365+
Mockito.verifyNoInteractions(networkDaoMock);
1366+
}
1367+
1368+
@Test
1369+
public void loadPresetVariableValueForVpcTestRecordIsVpcSetFields() {
1370+
Value expected = getValueForTests();
1371+
1372+
VpcVO networkVoMock = Mockito.mock(VpcVO.class);
1373+
Mockito.doReturn(networkVoMock).when(vpcDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
1374+
1375+
mockMethodValidateIfObjectIsNull();
1376+
1377+
Mockito.doReturn(expected.getId()).when(networkVoMock).getUuid();
1378+
Mockito.doReturn(expected.getName()).when(networkVoMock).getName();
1379+
Mockito.doReturn(expected.getVpcOffering()).when(presetVariableHelperSpy).getPresetVariableValueVpcOffering(Mockito.anyLong());
1380+
1381+
Mockito.doReturn(UsageTypes.VPC).when(usageVoMock).getUsageType();
1382+
1383+
Value result = new Value();
1384+
presetVariableHelperSpy.loadPresetVariableValueForVpc(usageVoMock, result);
1385+
1386+
assertPresetVariableIdAndName(expected, result);
1387+
Assert.assertEquals(expected.getVpcOffering(), result.getVpcOffering());
1388+
}
1389+
1390+
@Test
1391+
public void getPresetVariableValueNetworkOfferingTestSetValuesAndReturnObject() {
1392+
NetworkOfferingVO networkOfferingVoMock = Mockito.mock(NetworkOfferingVO.class);
1393+
Mockito.doReturn(networkOfferingVoMock).when(networkOfferingDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
1394+
mockMethodValidateIfObjectIsNull();
1395+
1396+
GenericPresetVariable expected = getGenericPresetVariableForTests();
1397+
Mockito.doReturn(expected.getId()).when(networkOfferingVoMock).getUuid();
1398+
Mockito.doReturn(expected.getName()).when(networkOfferingVoMock).getName();
1399+
1400+
GenericPresetVariable result = presetVariableHelperSpy.getPresetVariableValueNetworkOffering(1L);
1401+
1402+
assertPresetVariableIdAndName(expected, result);
1403+
}
1404+
1405+
@Test
1406+
public void getPresetVariableValueVpcOfferingTestSetValuesAndReturnObject() {
1407+
VpcOfferingVO vpcOfferingVoMock = Mockito.mock(VpcOfferingVO.class);
1408+
Mockito.doReturn(vpcOfferingVoMock).when(vpcOfferingDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
1409+
mockMethodValidateIfObjectIsNull();
1410+
1411+
GenericPresetVariable expected = getGenericPresetVariableForTests();
1412+
Mockito.doReturn(expected.getId()).when(vpcOfferingVoMock).getUuid();
1413+
Mockito.doReturn(expected.getName()).when(vpcOfferingVoMock).getName();
1414+
1415+
GenericPresetVariable result = presetVariableHelperSpy.getPresetVariableValueVpcOffering(1L);
1416+
1417+
assertPresetVariableIdAndName(expected, result);
1418+
}
12921419
}

0 commit comments

Comments
 (0)