Make displayText in createNetwork optional (#7112)

Co-authored-by: Rahul Agarwal <rahul.agarwal@shapeblue.com>
Co-authored-by: Stephan Krug <stekrug@icloud.com>
Co-authored-by: dahn <daan.hoogland@gmail.com>
This commit is contained in:
Rahul Agarwal 2023-02-08 13:41:59 +00:00 committed by GitHub
parent e32016d4a1
commit 0efa4f6e51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 92 additions and 6 deletions

View File

@ -46,6 +46,7 @@ import com.cloud.network.Network;
import com.cloud.network.Network.GuestType; import com.cloud.network.Network.GuestType;
import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering;
import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.NetUtils;
import org.apache.commons.lang3.StringUtils;
@APICommand(name = "createNetwork", description = "Creates a network", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted, entityType = {Network.class}, @APICommand(name = "createNetwork", description = "Creates a network", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted, entityType = {Network.class},
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
@ -61,7 +62,7 @@ public class CreateNetworkCmd extends BaseCmd implements UserCmd {
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the network") @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the network")
private String name; private String name;
@Parameter(name = ApiConstants.DISPLAY_TEXT, type = CommandType.STRING, required = true, description = "the display text of the network") @Parameter(name = ApiConstants.DISPLAY_TEXT, type = CommandType.STRING, description = "the display text of the network")
private String displayText; private String displayText;
@Parameter(name = ApiConstants.NETWORK_OFFERING_ID, @Parameter(name = ApiConstants.NETWORK_OFFERING_ID,
@ -221,7 +222,7 @@ public class CreateNetworkCmd extends BaseCmd implements UserCmd {
} }
public String getDisplayText() { public String getDisplayText() {
return displayText; return StringUtils.isEmpty(displayText) ? name : displayText;
} }
public String getNetworkDomain() { public String getNetworkDomain() {

View File

@ -100,12 +100,19 @@ public class CreateNetworkCmdTest extends TestCase {
Assert.assertEquals(cmd.getNetworkName(), netName); Assert.assertEquals(cmd.getNetworkName(), netName);
} }
public void testGetDisplayText() { public void testGetDisplayTextWhenNotEmpty() {
String description = "Isolated Network"; String description = "Isolated Network";
ReflectionTestUtils.setField(cmd, "displayText", description); ReflectionTestUtils.setField(cmd, "displayText", description);
Assert.assertEquals(cmd.getDisplayText(), description); Assert.assertEquals(cmd.getDisplayText(), description);
} }
public void testGetDisplayTextWhenEmpty() {
String description = null;
String netName = "net-isolated";
ReflectionTestUtils.setField(cmd, "name", netName);
Assert.assertEquals(cmd.getDisplayText(), netName);
}
public void testGetNetworkDomain() { public void testGetNetworkDomain() {
String netDomain = "cs1cloud.internal"; String netDomain = "cs1cloud.internal";
ReflectionTestUtils.setField(cmd, "networkDomain", netDomain); ReflectionTestUtils.setField(cmd, "networkDomain", netDomain);

View File

@ -289,3 +289,84 @@ class TestNetworkManagement(cloudstackTestCase):
) )
self.cleanup.append(self.network_offering) self.cleanup.append(self.network_offering)
@attr(tags=["adeancedsg", "Simulator"], required_hardware="false")
def test_03_create_network_with_empty_displayText(self):
"""Create Shared network with empty displayText
and verify value of displayText after network
is being created.
"""
# Update the global setting to true
Configurations.update(self.apiclient,
name="allow.duplicate.networkname",
value="true"
)
# Create network offering
self.network_offering = NetworkOffering.create(
self.apiclient,
self.testdata["network_offering_shared"]
)
self.cleanup.append( self.network_offering)
NetworkOffering.update(
self.network_offering,
self.apiclient,
id=self.network_offering.id,
state="enabled"
)
physical_network, vlan = get_free_vlan(self.apiclient, self.zone.id)
self.testdata["shared_network_sg"]["physicalnetworkid"] = physical_network.id
random_subnet_number = random.randrange(100, 199)
self.testdata["shared_network_sg"]["specifyVlan"] = 'True'
self.testdata["shared_network_sg"]["specifyIpRanges"] = 'True'
self.testdata["shared_network_sg"]["name"] = "Shared-Network-SG-Test-vlan-1"
self.testdata["shared_network_sg"]["displayText"] = ''
self.testdata["shared_network_sg"]["vlan"] = "vlan://" + str(random_subnet_number)
self.testdata["shared_network_sg"]["startip"] = "192.168." + str(random_subnet_number) + ".1"
self.testdata["shared_network_sg"]["endip"] = "192.168." + str(random_subnet_number) + ".10"
self.testdata["shared_network_sg"]["gateway"] = "192.168." + str(random_subnet_number) + ".254"
self.testdata["shared_network_sg"]["netmask"] = "255.255.255.0"
self.testdata["shared_network_sg"]["acltype"] = "account"
# Create the first network with empty displayText
network1 = Network.create(
self.apiclient,
self.testdata["shared_network_sg"],
networkofferingid=self.network_offering.id,
zoneid=self.zone.id,
accountid=self.account.name,
domainid=self.account.domainid
)
self.cleanup.append(network1)
self.assertEqual(
network1.displayText,
self.testdata["shared_network_sg"]["name"],
msg="displayText does not match name"
)
self.testdata["shared_network_sg"]["displayText"] = 'test'
#Create the second network with non-empty displayText
network2 = Network.create(
self.apiclient,
self.testdata["shared_network_sg"],
networkofferingid=self.network_offering.id,
zoneid=self.zone.id,
accountid=self.account.name,
domainid=self.account.domainid
)
self.cleanup.append(network2)
self.assertNotEqual(
network2.displayText,
self.testdata["shared_network_sg"]["name"],
msg="displayText and name are equal"
)
return

View File

@ -394,7 +394,6 @@ export default {
this.form = reactive({}) this.form = reactive({})
this.rules = reactive({ this.rules = reactive({
name: [{ required: true, message: this.$t('message.error.name') }], name: [{ required: true, message: this.$t('message.error.name') }],
displaytext: [{ required: true, message: this.$t('message.error.display.text') }],
zoneid: [{ type: 'number', required: true, message: this.$t('message.error.select') }], zoneid: [{ type: 'number', required: true, message: this.$t('message.error.select') }],
networkofferingid: [{ type: 'number', required: true, message: this.$t('message.error.select') }], networkofferingid: [{ type: 'number', required: true, message: this.$t('message.error.select') }],
vpcid: [{ required: true, message: this.$t('message.error.select') }] vpcid: [{ required: true, message: this.$t('message.error.select') }]

View File

@ -266,7 +266,6 @@ export default {
}) })
this.rules = reactive({ this.rules = reactive({
name: [{ required: true, message: this.$t('message.error.name') }], name: [{ required: true, message: this.$t('message.error.name') }],
displaytext: [{ required: true, message: this.$t('message.error.display.text') }],
zoneid: [{ required: true, message: this.$t('message.error.select') }], zoneid: [{ required: true, message: this.$t('message.error.select') }],
networkofferingid: [{ required: true, message: this.$t('message.error.select') }], networkofferingid: [{ required: true, message: this.$t('message.error.select') }],
vlanid: [{ required: true, message: this.$t('message.please.enter.value') }] vlanid: [{ required: true, message: this.$t('message.please.enter.value') }]

View File

@ -590,7 +590,6 @@ export default {
}) })
this.rules = reactive({ this.rules = reactive({
name: [{ required: true, message: this.$t('message.error.name') }], name: [{ required: true, message: this.$t('message.error.name') }],
displaytext: [{ required: true, message: this.$t('message.error.display.text') }],
zoneid: [{ type: 'number', required: true, message: this.$t('message.error.select') }], zoneid: [{ type: 'number', required: true, message: this.$t('message.error.select') }],
vlan: [{ required: true, message: this.$t('message.please.enter.value') }], vlan: [{ required: true, message: this.$t('message.please.enter.value') }],
networkofferingid: [{ type: 'number', required: true, message: this.$t('message.error.select') }], networkofferingid: [{ type: 'number', required: true, message: this.$t('message.error.select') }],