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 <abhishek.mrt22@gmail.com>
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 38001ce..55af69e 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 @@
  * </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 e870dad..3ff602c 100644
--- a/test/integration/smoke/test_metrics_api.py
+++ b/test/integration/smoke/test_metrics_api.py
@@ -58,16 +58,28 @@
             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 @@
 
         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 @@
         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 @@
             return True
         except ValueError:
             return False
-