You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2022/12/14 05:18:48 UTC

[cloudstack] branch 4.17 updated: api: fix listVirtuaMachinesMetrics API for user (#6985)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.17
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.17 by this push:
     new 00757176125 api: fix listVirtuaMachinesMetrics API for user (#6985)
00757176125 is described below

commit 0075717612533dae29ceb531741ef93c2131fc67
Author: Abhishek Kumar <ab...@gmail.com>
AuthorDate: Wed Dec 14 10:48:40 2022 +0530

    api: fix listVirtuaMachinesMetrics API for user (#6985)
    
    Fixes #6983
    
    In case of multiple classes for and API class, ApiServer returns an API command class for User role only when ResponseView is set to Restricted in annotation.
    This PR set Restricted ResponseView for ListVMsMetrics class. It also adds a smoke test for User role account for the listVirtualMachinesMetrics API.
    
    Signed-off-by: Abhishek Kumar <ab...@gmail.com>
---
 .../apache/cloudstack/api/ListVMsMetricsCmd.java   |  2 +-
 test/integration/smoke/test_metrics_api.py         | 44 +++++++++++++++-------
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
index 38001cedb09..55af69e623c 100644
--- a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
+++ b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
@@ -43,7 +43,7 @@ import org.apache.cloudstack.response.VmMetricsResponse;
  * </ul>
  */
 @APICommand(name = ListVMsMetricsCmd.APINAME, description = "Lists VM metrics", responseObject = VmMetricsResponse.class,
-        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false,  responseView = ResponseObject.ResponseView.Full,
+        requestHasSensitiveInfo = false, responseHasSensitiveInfo = false,  responseView = ResponseObject.ResponseView.Restricted,
         since = "4.9.3", authorized = {RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User})
 public class ListVMsMetricsCmd extends ListVMsCmd implements UserCmd {
     public static final String APINAME = "listVirtualMachinesMetrics";
diff --git a/test/integration/smoke/test_metrics_api.py b/test/integration/smoke/test_metrics_api.py
index e870dadee83..3ff602c1a71 100644
--- a/test/integration/smoke/test_metrics_api.py
+++ b/test/integration/smoke/test_metrics_api.py
@@ -58,16 +58,28 @@ class TestMetrics(cloudstackTestCase):
             cls.hypervisor
         )
         cls._cleanup.append(cls.service_offering)
+        cls.domain = get_domain(cls.apiclient)
+        cls.account = Account.create(
+            cls.apiclient,
+            cls.services["account"],
+            admin=False,
+            domainid=cls.domain.id
+        )
+        cls._cleanup.append(cls.account)
 
     @classmethod
     def tearDownClass(cls):
         super(TestMetrics, cls).tearDownClass()
 
     def setUp(self):
+        self.userapiclient = self.testClient.getUserApiClient(
+            UserName=self.account.name,
+            DomainName=self.account.domain
+        )
         self.cleanup = []
 
     def tearDown(self):
-        super(TestMetrics, self).tearDown();
+        super(TestMetrics, self).tearDown()
 
     @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false")
     def test_list_hosts_metrics(self):
@@ -117,23 +129,24 @@ class TestMetrics(cloudstackTestCase):
 
         return
 
-    @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false")
-    def test_list_vms_metrics(self):
-        #deploy VM
+    def run_list_vm_metrics_test(self, is_user):
+        apiclient = self.apiclient
+        if is_user:
+            apiclient = self.userapiclient
         self.small_virtual_machine = VirtualMachine.create(
-                                        self.apiclient,
-                                        self.services["virtual_machine"],
-                                        serviceofferingid=self.service_offering.id,
-                                        templateid=self.template.id,
-                                        zoneid=self.zone.id
-                                        )
+            apiclient,
+            self.services["virtual_machine"],
+            serviceofferingid=self.service_offering.id,
+            templateid=self.template.id,
+            zoneid=self.zone.id
+        )
         self.cleanup.append(self.small_virtual_machine)
 
 
         cmd = listVirtualMachinesMetrics.listVirtualMachinesMetricsCmd()
         cmd.id = self.small_virtual_machine.id
 
-        lvmm = self.apiclient.listVirtualMachinesMetrics(cmd)[0]
+        lvmm = apiclient.listVirtualMachinesMetrics(cmd)[0]
 
         self.assertEqual(lvmm.id, self.small_virtual_machine.id)
 
@@ -144,7 +157,13 @@ class TestMetrics(cloudstackTestCase):
         self.assertTrue(hasattr(lvmm, 'networkread'))
         self.assertTrue(hasattr(lvmm, 'networkwrite'))
 
-        return
+    @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false")
+    def test_list_vms_metrics_admin(self):
+        self.run_list_vm_metrics_test(False)
+
+    @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false")
+    def test_list_vms_metrics_user(self):
+        self.run_list_vm_metrics_test(True)
 
     @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false")
     def test_list_pstorage_metrics(self):
@@ -376,4 +395,3 @@ class TestMetrics(cloudstackTestCase):
             return True
         except ValueError:
             return False
-