This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 0efa4f6e51 Make displayText in createNetwork optional (#7112)
0efa4f6e51 is described below
commit 0efa4f6e510f07574cd738cf760ef3431d1621ec
Author: Rahul Agarwal <[email protected]>
AuthorDate: Wed Feb 8 13:41:59 2023 +0000
Make displayText in createNetwork optional (#7112)
Co-authored-by: Rahul Agarwal <[email protected]>
Co-authored-by: Stephan Krug <[email protected]>
Co-authored-by: dahn <[email protected]>
---
.../api/command/user/network/CreateNetworkCmd.java | 5 +-
.../command/user/network/CreateNetworkCmdTest.java | 9 ++-
test/integration/smoke/test_create_network.py | 81 ++++++++++++++++++++++
ui/src/views/network/CreateIsolatedNetworkForm.vue | 1 -
ui/src/views/network/CreateL2NetworkForm.vue | 1 -
ui/src/views/network/CreateSharedNetworkForm.vue | 1 -
6 files changed, 92 insertions(+), 6 deletions(-)
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
index 9054ab4a66..bc26a47ae7 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
@@ -46,6 +46,7 @@ import com.cloud.network.Network;
import com.cloud.network.Network.GuestType;
import com.cloud.offering.NetworkOffering;
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},
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")
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;
@Parameter(name = ApiConstants.NETWORK_OFFERING_ID,
@@ -221,7 +222,7 @@ public class CreateNetworkCmd extends BaseCmd implements
UserCmd {
}
public String getDisplayText() {
- return displayText;
+ return StringUtils.isEmpty(displayText) ? name : displayText;
}
public String getNetworkDomain() {
diff --git
a/api/src/test/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmdTest.java
b/api/src/test/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmdTest.java
index d7810dba28..6a2aadd151 100644
---
a/api/src/test/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmdTest.java
+++
b/api/src/test/java/org/apache/cloudstack/api/command/user/network/CreateNetworkCmdTest.java
@@ -100,12 +100,19 @@ public class CreateNetworkCmdTest extends TestCase {
Assert.assertEquals(cmd.getNetworkName(), netName);
}
- public void testGetDisplayText() {
+ public void testGetDisplayTextWhenNotEmpty() {
String description = "Isolated Network";
ReflectionTestUtils.setField(cmd, "displayText", 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() {
String netDomain = "cs1cloud.internal";
ReflectionTestUtils.setField(cmd, "networkDomain", netDomain);
diff --git a/test/integration/smoke/test_create_network.py
b/test/integration/smoke/test_create_network.py
index c1b7d93d89..4d1760d4c1 100644
--- a/test/integration/smoke/test_create_network.py
+++ b/test/integration/smoke/test_create_network.py
@@ -289,3 +289,84 @@ class TestNetworkManagement(cloudstackTestCase):
)
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
diff --git a/ui/src/views/network/CreateIsolatedNetworkForm.vue
b/ui/src/views/network/CreateIsolatedNetworkForm.vue
index 8c5e7080fa..36d5e7cf51 100644
--- a/ui/src/views/network/CreateIsolatedNetworkForm.vue
+++ b/ui/src/views/network/CreateIsolatedNetworkForm.vue
@@ -394,7 +394,6 @@ export default {
this.form = reactive({})
this.rules = reactive({
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') }],
networkofferingid: [{ type: 'number', required: true, message:
this.$t('message.error.select') }],
vpcid: [{ required: true, message: this.$t('message.error.select') }]
diff --git a/ui/src/views/network/CreateL2NetworkForm.vue
b/ui/src/views/network/CreateL2NetworkForm.vue
index 82a9a0a894..6b9e479df5 100644
--- a/ui/src/views/network/CreateL2NetworkForm.vue
+++ b/ui/src/views/network/CreateL2NetworkForm.vue
@@ -266,7 +266,6 @@ export default {
})
this.rules = reactive({
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') }],
networkofferingid: [{ required: true, message:
this.$t('message.error.select') }],
vlanid: [{ required: true, message:
this.$t('message.please.enter.value') }]
diff --git a/ui/src/views/network/CreateSharedNetworkForm.vue
b/ui/src/views/network/CreateSharedNetworkForm.vue
index 87a3375f3d..380ced770f 100644
--- a/ui/src/views/network/CreateSharedNetworkForm.vue
+++ b/ui/src/views/network/CreateSharedNetworkForm.vue
@@ -590,7 +590,6 @@ export default {
})
this.rules = reactive({
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') }],
vlan: [{ required: true, message:
this.$t('message.please.enter.value') }],
networkofferingid: [{ type: 'number', required: true, message:
this.$t('message.error.select') }],