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') }],

Reply via email to