Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,7 @@
<bean id="volumeDaoImpl" class="com.cloud.storage.dao.VolumeDaoImpl" />
<bean id="reservationDao" class="org.apache.cloudstack.reservation.dao.ReservationDaoImpl" />
<bean id="backupOfferingDaoImpl" class="org.apache.cloudstack.backup.dao.BackupOfferingDaoImpl" />
<bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" />
<bean id="vpcOfferingDetailsDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDetailsDaoImpl"/>
<bean id="backupOfferingDetailsDaoImpl" class="org.apache.cloudstack.backup.dao.BackupOfferingDetailsDaoImpl" />
</beans>
Original file line number Diff line number Diff line change
Expand Up @@ -236,13 +236,11 @@
<bean id="volumeStatsDaoImpl" class="com.cloud.storage.dao.VolumeStatsDaoImpl" />
<bean id="vpcDaoImpl" class="com.cloud.network.vpc.dao.VpcDaoImpl" />
<bean id="vpcGatewayDaoImpl" class="com.cloud.network.vpc.dao.VpcGatewayDaoImpl" />
<bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" />
<bean id="vpcOfferingJoinDaoImpl" class="com.cloud.api.query.dao.VpcOfferingJoinDaoImpl" />
<bean id="vpcOfferingServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingServiceMapDaoImpl" />
<bean id="vpcServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcServiceMapDaoImpl" />
<bean id="vpnUserDaoImpl" class="com.cloud.network.dao.VpnUserDaoImpl" />
<bean id="applicationLbRuleDaoImpl" class="org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDaoImpl" />
<bean id="vpcOfferingDetailsDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDetailsDaoImpl"/>
<bean id="networkDetailsDaoImpl" class="com.cloud.network.dao.NetworkDetailsDaoImpl" />
<bean id="tungstenGuestNetworkIpAddressDaoImpl" class="com.cloud.network.dao.TungstenGuestNetworkIpAddressDaoImpl"/>
<bean id="tungstenSecurityGroupRuleDaoImpl" class="com.cloud.network.security.dao.TungstenSecurityGroupRuleDaoImpl"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,12 @@
import com.cloud.dc.ClusterDetailsDao;
import com.cloud.dc.ClusterDetailsVO;
import com.cloud.host.HostTagVO;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.vpc.VpcOfferingVO;
import com.cloud.network.vpc.VpcVO;
import javax.inject.Inject;

import com.cloud.hypervisor.Hypervisor;
import com.cloud.storage.StoragePoolTagVO;
import org.apache.cloudstack.acl.RoleVO;
import org.apache.cloudstack.acl.dao.RoleDao;
Expand Down Expand Up @@ -66,6 +67,7 @@
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.host.dao.HostTagsDao;
import com.cloud.network.vpc.dao.VpcOfferingDao;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.server.ResourceTag;
Expand Down Expand Up @@ -191,6 +193,9 @@ public class PresetVariableHelper {
@Inject
ClusterDetailsDao clusterDetailsDao;

@Inject
VpcOfferingDao vpcOfferingDao;

protected boolean backupSnapshotAfterTakingSnapshot = SnapshotInfo.BackupSnapshotAfterTakingSnapshot.value();

private List<Integer> runningAndAllocatedVmUsageTypes = Arrays.asList(UsageTypes.RUNNING_VM, UsageTypes.ALLOCATED_VM);
Expand Down Expand Up @@ -778,6 +783,19 @@ protected void loadPresetVariableValueForNetwork(UsageVO usageRecord, Value valu
value.setId(network.getUuid());
value.setName(network.getName());
value.setState(usageRecord.getState());

value.setNetworkOffering(getPresetVariableValueNetworkOffering(network.getNetworkOfferingId()));
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new networkOffering field is being set in loadPresetVariableValueForNetwork, but there are no tests verifying this integration. Similar methods like loadPresetVariableValueForVolume and loadPresetVariableValueForBackup have comprehensive tests that verify all fields are properly set. Consider adding a test similar to loadPresetVariableValueForBackupTestRecordIsBackupSetAllFields that verifies the networkOffering field is correctly populated.

Copilot uses AI. Check for mistakes.
}

protected GenericPresetVariable getPresetVariableValueNetworkOffering(Long networkOfferingId) {
NetworkOfferingVO networkOfferingVo = networkOfferingDao.findByIdIncludingRemoved(networkOfferingId);
validateIfObjectIsNull(networkOfferingVo, networkOfferingId, "network offering");

GenericPresetVariable networkOffering = new GenericPresetVariable();
networkOffering.setId(networkOfferingVo.getUuid());
networkOffering.setName(networkOfferingVo.getName());

return networkOffering;
}

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

value.setId(vpc.getUuid());
value.setName(vpc.getName());
value.setVpcOffering(getPresetVariableValueVpcOffering(vpc.getVpcOfferingId()));
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new vpcOffering field is being set in loadPresetVariableValueForVpc, but there are no tests verifying this integration. Similar methods like loadPresetVariableValueForVolume and loadPresetVariableValueForBackup have comprehensive tests that verify all fields are properly set. Consider adding a test similar to loadPresetVariableValueForBackupTestRecordIsBackupSetAllFields that verifies the vpcOffering field is correctly populated.

Copilot uses AI. Check for mistakes.
}

protected GenericPresetVariable getPresetVariableValueVpcOffering(long vpcOfferingId) {
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parameter type should be Long instead of long to maintain consistency with similar methods in this class. Other methods like getPresetVariableValueNetworkOffering, getPresetVariableZone, and getPresetVariableValueTemplate all use Long as the parameter type.

Suggested change
protected GenericPresetVariable getPresetVariableValueVpcOffering(long vpcOfferingId) {
protected GenericPresetVariable getPresetVariableValueVpcOffering(Long vpcOfferingId) {

Copilot uses AI. Check for mistakes.
VpcOfferingVO vpcOfferingVo = vpcOfferingDao.findByIdIncludingRemoved(vpcOfferingId);
validateIfObjectIsNull(vpcOfferingVo, vpcOfferingId, "vpc offering");

GenericPresetVariable vpcOffering = new GenericPresetVariable();
vpcOffering.setId(vpcOfferingVo.getUuid());
vpcOffering.setName(vpcOfferingVo.getName());

return vpcOffering;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,12 @@ public class Value extends GenericPresetVariable {

private String state;

@PresetVariableDefinition(description = "Network offering of the network.", supportedTypes = {QuotaTypes.NETWORK})
private GenericPresetVariable networkOffering;

@PresetVariableDefinition(description = "VPC offering of the VPC.", supportedTypes = {QuotaTypes.VPC})
private GenericPresetVariable vpcOffering;

public Host getHost() {
return host;
}
Expand Down Expand Up @@ -279,4 +285,22 @@ public void setState(String state) {
this.state = state;
fieldNamesToIncludeInToString.add("state");
}

public GenericPresetVariable getNetworkOffering() {
return networkOffering;
}

public void setNetworkOffering(GenericPresetVariable networkOffering) {
this.networkOffering = networkOffering;
fieldNamesToIncludeInToString.add("networkOffering");
}

public GenericPresetVariable getVpcOffering() {
return vpcOffering;
}

public void setVpcOffering(GenericPresetVariable vpcOffering) {
this.vpcOffering = vpcOffering;
fieldNamesToIncludeInToString.add("vpcOffering");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
import com.cloud.dc.ClusterDetailsVO;
import com.cloud.host.HostTagVO;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.network.vpc.VpcOfferingVO;
import com.cloud.network.vpc.dao.VpcOfferingDao;
import com.cloud.storage.StoragePoolTagVO;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.acl.RoleVO;
Expand Down Expand Up @@ -188,6 +190,9 @@ public class PresetVariableHelperTest {
@Mock
BackupOfferingDao backupOfferingDaoMock;

@Mock
VpcOfferingDao vpcOfferingDao;

List<Integer> runningAndAllocatedVmUsageTypes = Arrays.asList(UsageTypes.RUNNING_VM, UsageTypes.ALLOCATED_VM);
List<Integer> templateAndIsoUsageTypes = Arrays.asList(UsageTypes.TEMPLATE, UsageTypes.ISO);

Expand Down Expand Up @@ -1339,4 +1344,36 @@ public void testGetSnapshotImageStoreRefNotNull() {
Mockito.when(imageStoreDaoMock.findById(1L)).thenReturn(store);
Assert.assertNotNull(presetVariableHelperSpy.getSnapshotImageStoreRef(1L, 1L));
}

@Test
public void getPresetVariableValueNetworkOfferingTestSetValuesAndReturnObject() {
NetworkOfferingVO networkOfferingVoMock = Mockito.mock(NetworkOfferingVO.class);
Mockito.doReturn(networkOfferingVoMock).when(networkOfferingDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
mockMethodValidateIfObjectIsNull();

GenericPresetVariable expected = getGenericPresetVariableForTests();
Mockito.doReturn(expected.getId()).when(networkOfferingVoMock).getUuid();
Mockito.doReturn(expected.getName()).when(networkOfferingVoMock).getName();

GenericPresetVariable result = presetVariableHelperSpy.getPresetVariableValueNetworkOffering(1L);

assertPresetVariableIdAndName(expected, result);
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), result);
}

@Test
public void getPresetVariableValueVpcOfferingTestSetValuesAndReturnObject() {
VpcOfferingVO vpcOfferingVoMock = Mockito.mock(VpcOfferingVO.class);
Mockito.doReturn(vpcOfferingVoMock).when(vpcOfferingDao).findByIdIncludingRemoved(Mockito.anyLong());
mockMethodValidateIfObjectIsNull();

GenericPresetVariable expected = getGenericPresetVariableForTests();
Mockito.doReturn(expected.getId()).when(vpcOfferingVoMock).getUuid();
Mockito.doReturn(expected.getName()).when(vpcOfferingVoMock).getName();

GenericPresetVariable result = presetVariableHelperSpy.getPresetVariableValueVpcOffering(1L);

assertPresetVariableIdAndName(expected, result);
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), result);
}
}
Loading