Copilot commented on code in PR #10162:
URL: https://github.com/apache/cloudstack/pull/10162#discussion_r3153271546


##########
plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/SpringBeanIntegrationTest:
##########
@@ -0,0 +1,37 @@
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.Mockito.*;
+
+@SpringBootTest
+class ConfigurationServerTest {
+
+    @Mock
+    private ManagementServerHostPeerDao managementServerHostPeerDao;
+
+    @Mock
+    private ConfigurationDao configurationDao;
+
+    @Mock
+    private ConfigurationServer configurationServer;
+
+    @InjectMocks
+    private SomeService service; // The service you're testing, which 
interacts with the beans
+
+    @Test
+    void testGetConfiguration() {
+        // Arrange (setup mocks)
+        when(configurationDao.getConfiguration()).thenReturn(new 
Configuration());
+
+        // Act (execute method)
+        Configuration result = configurationServer.getConfiguration();
+
+        // Assert (verify results)
+        verify(configurationDao).getConfiguration(); // Verify that the method 
was called
+        assertNotNull(result); // Assert that the result is not null

Review Comment:
   This test file is not a valid/compilable unit test as written: it has no 
package declaration and references undefined symbols 
(`ManagementServerHostPeerDao`, `ConfigurationDao`, `ConfigurationServer`, 
`SomeService`, `Configuration`, and `assertNotNull` is not imported). It also 
introduces `@SpringBootTest` even though the codebase does not appear to use 
Spring Boot tests elsewhere. Please either remove this file or convert it into 
a proper test with correct package/imports and existing project test 
infrastructure.
   ```suggestion
   package com.cloud.hypervisor.vmware;
   
   import org.junit.jupiter.api.Test;
   
   import static org.junit.jupiter.api.Assertions.assertNotNull;
   
   class SpringBeanIntegrationTest {
   
       @Test
       void testClassIsLoadable() {
           assertNotNull(SpringBeanIntegrationTest.class);
   ```



##########
plugins/hypervisors/vmware/pom.xml:
##########
@@ -27,48 +27,24 @@
         <version>4.22.1.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
+
     <dependencies>
+        <!-- Other dependencies can be listed here -->
+
+        <!-- JUnit Dependencies for Testing -->
         <dependency>
-            <groupId>org.apache.cloudstack</groupId>
-            <artifactId>cloud-vmware-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cloudstack</groupId>
-            <artifactId>cloud-secondary-storage</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cloudstack</groupId>
-            <artifactId>cloud-engine-storage</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cloudstack</groupId>
-            <artifactId>cloud-engine-orchestration</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.cloud.com.vmware</groupId>
-            <artifactId>vmware-vim25</artifactId>
-            <version>${cs.vmware.api.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.org.apache.xml.internal</groupId>
-            <artifactId>resolver</artifactId>
-            <version>20050927</version>
-        </dependency>
-        <dependency>
-            <groupId>wsdl4j</groupId>
-            <artifactId>wsdl4j</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <version>5.7.0</version>
+            <scope>test</scope>
         </dependency>
+
         <dependency>
-            <groupId>com.cloud.com.vmware</groupId>
-            <artifactId>vmware-pbm</artifactId>
-            <version>${cs.vmware.api.version}</version>
-            <scope>compile</scope>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.7.0</version>
+            <scope>test</scope>
         </dependency>
+
     </dependencies>

Review Comment:
   This POM change removes all existing compile/runtime dependencies for the 
VMware plugin and replaces them with only JUnit Jupiter test dependencies. The 
module’s main sources reference many CloudStack and VMware classes, so it will 
no longer compile/build. Please restore the original plugin dependencies and, 
if JUnit 5 is required, add it in addition to (not instead of) the existing 
dependencies and align versions with the parent BOM/dependencyManagement.



##########
plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java:
##########
@@ -34,30 +34,22 @@ public class VmwareTrafficLabel implements TrafficLabel {
     VirtualSwitchType _vSwitchType = VirtualSwitchType.StandardVirtualSwitch;
     String _vSwitchName = DEFAULT_VSWITCH_NAME;
     String _vlanId = Vlan.UNTAGGED;
+    boolean _isPrimaryNic = true;  // Flag to identify if this is a primary NIC
+    int _rateLimit = 1000;  // Default rate limit in Mbps
+    int _guaranteedBandwidth = 500;  // Default guaranteed bandwidth in Mbps
 
-    public VmwareTrafficLabel(String networkLabel, TrafficType trafficType, 
VirtualSwitchType defVswitchType) {
+    public VmwareTrafficLabel(String networkLabel, TrafficType trafficType, 
VirtualSwitchType defVswitchType, boolean isPrimaryNic) {
         _trafficType = trafficType;
+        _isPrimaryNic = isPrimaryNic;
         _parseLabel(networkLabel, defVswitchType);
     }
 
-    public VmwareTrafficLabel(String networkLabel, TrafficType trafficType) {
+    public VmwareTrafficLabel(String networkLabel, TrafficType trafficType, 
boolean isPrimaryNic) {
         _trafficType = trafficType;
+        _isPrimaryNic = isPrimaryNic;
         _parseLabel(networkLabel, VirtualSwitchType.StandardVirtualSwitch);
     }

Review Comment:
   The constructors were changed to require an `isPrimaryNic` boolean and 
several existing constructors were removed. This is a breaking API change and 
currently breaks existing callers in this module (e.g., `new 
VmwareTrafficLabel(TrafficType.Guest)` and `new VmwareTrafficLabel(label, 
trafficType, defaultVirtualSwitchType)` in `VmwareServerDiscoverer`, 
`VmwareResource`, etc.). Keep the old constructors (delegating to the new one) 
or update all call sites accordingly.



##########
plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java:
##########
@@ -91,6 +83,20 @@ private void _parseLabel(String networkLabel, 
VirtualSwitchType defVswitchType)
         }
     }
 
+    public void applyTrafficShaping() {
+        // Ensure traffic shaping is applied to secondary NICs
+        if (!_isPrimaryNic) {
+            // Apply lower rate limits or minimum bandwidth guarantees for 
secondary NICs
+            System.out.println("Applying traffic shaping to secondary NIC:");
+            System.out.println("Rate Limit: " + _rateLimit + " Mbps");
+            System.out.println("Guaranteed Bandwidth: " + _guaranteedBandwidth 
+ " Mbps");
+        } else {
+            // For primary NIC, apply normal rate limits
+            System.out.println("Applying traffic shaping to primary NIC:");
+            System.out.println("Rate Limit: " + _rateLimit + " Mbps");
+        }
+    }

Review Comment:
   `applyTrafficShaping()` currently only prints to stdout and uses hard-coded 
defaults (1000/500 Mbps). Production code should not use `System.out.println`; 
use the project logger and implement actual traffic-shaping integration (or 
remove this method if it is only for debugging). If these values are real 
configuration, they should be passed in or loaded from config rather than being 
magic numbers.



##########
utils/src/test/java/org/apache/cloudstack/utils/process/ProcessTest.java:
##########
@@ -39,17 +39,20 @@ public class ProcessTest {
 
     @Test
     public void testProcessRunner() {
-        ProcessResult result = RUNNER.executeCommands(Arrays.asList("sleep", 
"0"));
+        // Replace "sleep" with the cross-platform "timeout" command
+        ProcessResult result = RUNNER.executeCommands(Arrays.asList("timeout", 
"/t", "1"));
         Assert.assertEquals(result.getReturnCode(), 0);
         Assert.assertTrue(StringUtils.isEmpty(result.getStdError()));
     }
 
     @Test
     public void testProcessRunnerWithTimeout() {
-        ProcessResult result = RUNNER.executeCommands(Arrays.asList("sleep", 
"5"), Duration.standardSeconds(1));
+        // Replace "sleep" with the cross-platform "timeout" command
+        ProcessResult result = RUNNER.executeCommands(Arrays.asList("timeout", 
"/t", "5"), Duration.standardSeconds(1));
         Assert.assertNotEquals(result.getReturnCode(), 0);

Review Comment:
   `timeout /t` is Windows-specific and will fail on Linux (GNU `timeout` uses 
different syntax). Since `ProcessRunner` uses `ProcessBuilder` directly, this 
test will become OS-dependent and likely fail in CI/VMware environments. 
Suggest using a POSIX command (`sleep`) on non-Windows, or use a Java-based 
helper process so the command works consistently across platforms, with 
conditional logic if needed.



##########
ui/src/components/view/ObjectStoreBrowser.vue:
##########
@@ -148,6 +148,52 @@
             :placeholder="$t('label.objectstore.search')"
             :loading="loading"
             @search="listObjects()"
+            listObjects () {
+               // Wait if a previous request is still in progress
+               while (this.fetching) {
+                 setTimeout(() => {
+                   console.log('Waiting for previous request to complete...');
+                 }, 500);
+               }
+               this.fetching = true;
+               this.records = [];
+
+               const stream = 
this.client.extensions.listObjectsV2WithMetadata(this.resource.name, 
this.browserPath + this.searchPrefix, false, this.pageStartAfterMap[this.page]);
+
+               stream.on('data', obj => {
+                 this.records.push(obj);
+                 if (this.records.length >= 1000) {
+                   stream.destroy();  // Stop when reaching 1000 records
+                 }
+               });
+
+               stream.on('end', () => {
+                 let total = 0;
+                 if (this.records.length > 0) {
+                   if (this.records.length >= 1000) {
+                     total = (this.page + 1) * 1000;
+                     if (total > this.total) {
+                       this.total = total;
+                     }
+                   } else {
+                     total = (this.page - 1) * 1000 + this.records.length;
+                   }
+                   this.pageStartAfterMap[this.page + 1] = 
this.records[this.records.length - 1].name;
+                 }
+                 if (total > this.total) {
+                   this.total = total;
+                 }
+                 this.loading = false;
+                 this.fetching = false;  // Allow next request to start
+               });
+
+               stream.on('error', (err) => {
+                 console.error(err);
+                 this.loading = false;
+                 this.fetching = false;
+               });
+            }
+

Review Comment:
   `listObjects () { ... }` was inserted inside the `<a-input-search>` tag in 
the template (between attributes), which is invalid Vue template syntax and 
will break compilation/rendering. This logic should remain in the component 
`methods` section only; remove these lines from the template and keep the 
`@search="listObjects()"` handler.
   ```suggestion
   
   ```



##########
plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java:
##########
@@ -15,503 +15,245 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package com.cloud.hypervisor.vmware;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.api.query.dao.TemplateJoinDao;
-import com.cloud.cluster.ClusterManager;
-import com.cloud.cluster.dao.ManagementServerHostPeerDao;
-import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterDetailsVO;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.VmwareDatacenterVO;
-import com.cloud.dc.dao.ClusterDao;
-import com.cloud.dc.dao.ClusterVSMMapDao;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.HostPodDao;
-import com.cloud.dc.dao.VsphereStoragePolicyDao;
-import com.cloud.event.dao.EventDao;
-import com.cloud.exception.DiscoveryException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.hypervisor.HypervisorGuruManager;
-import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
-import com.cloud.hypervisor.vmware.dao.LegacyZoneDao;
-import com.cloud.dc.dao.VmwareDatacenterDao;
-import com.cloud.hypervisor.vmware.dao.VmwareDatacenterZoneMapDao;
-import com.cloud.hypervisor.vmware.manager.VmwareManagerImpl;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
-import com.cloud.org.Cluster.ClusterType;
-import com.cloud.org.Managed.ManagedState;
-import com.cloud.secstorage.CommandExecLogDao;
-import com.cloud.server.ConfigurationServer;
-import com.cloud.storage.ImageStoreDetailsUtil;
-import com.cloud.storage.StorageManager;
-import com.cloud.storage.dao.VMTemplatePoolDao;
-import com.cloud.template.TemplateManager;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountService;
-import com.cloud.user.AccountVO;
-import com.cloud.user.User;
-import com.cloud.user.UserVO;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.dao.UserVmCloneSettingDao;
-import com.cloud.vm.dao.UserVmDao;
-import com.cloud.vm.dao.VMInstanceDao;
-import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
-import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
-import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.test.utils.SpringUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.springframework.context.annotation.Bean;
+import org.springframework.beans.factory.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.ComponentScan.Filter;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.FilterType;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.core.type.filter.TypeFilter;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
-public class VmwareDatacenterApiUnitTest {
-
-    @Inject
-    VmwareDatacenterService _vmwareDatacenterService;
-
-    @Inject
-    DataCenterDao _dcDao;
-
-    @Inject
-    HostPodDao _podDao;
-
-    @Inject
-    VmwareDatacenterDao _vmwareDcDao;
-
-    @Inject
-    VmwareDatacenterZoneMapDao _vmwareDcZoneMapDao;
-
-    @Inject
-    ClusterDao _clusterDao;
-
-    @Inject
-    ClusterDetailsDao _clusterDetailsDao;
-
-    @Inject
-    ConfigurationDao _configDao;
-
-    @Inject
-    AccountDao _accountDao;
-
-    @Inject
-    AccountManager _acctMgr;
-
-    long zoneId;
-    long podId;
-    long clusterId;
-    long vmwareDcId;
-    private static long domainId = 5L;
-    private static String vmwareDcName = "dc";
-    private static String clusterName = "cluster";
-    private static String vCenterHost = "10.1.1.100";
-    private static String url = "http://"; + vCenterHost + "/" + vmwareDcName + 
"/" + clusterName;
-    private static String user = "administrator";
-    private static String password = "password";
-    private static String guid = vmwareDcName + "@" + vCenterHost;
-
-    private static VmwareDatacenterVO dc;
-    private static List<VmwareDatacenterVO> vmwareDcs;
-    private static ClusterVO cluster;
-    private static VmwareDatacenterZoneMapVO dcZoneMap;
-    private static List<ClusterVO> clusterList;
-    private static ClusterDetailsVO clusterDetails;
-
-    @Mock
-    private static AddVmwareDcCmd addCmd;
-    @Mock
-    private static RemoveVmwareDcCmd removeCmd;
-
-    AutoCloseable closeable;
+import org.springframework.context.annotation.Filter;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.Test;
+import static org.junit.Assert.*;
 
-    @Before
-    public void testSetUp() {
-        Mockito.when(_configDao.isPremium()).thenReturn(true);
-        ComponentContext.initComponentsLifeCycle();
-        closeable = MockitoAnnotations.openMocks(this);
-
-        DataCenterVO zone =
-            new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", 
null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, 
null, true,
-                true, null, null);
-        zoneId = 1L;
-
-        HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), zoneId, 
"192.168.56.1", "192.168.56.0/24", 8, "test");
-        podId = 1L;
-
-        AccountVO acct = new AccountVO(200L);
-        acct.setType(Account.Type.ADMIN);
-        acct.setAccountName("admin");
-        acct.setDomainId(domainId);
-
-        UserVO user1 = new UserVO(1, "testuser", "password", "firstname", 
"lastName", "email", "timezone", UUID.randomUUID().toString(), 
User.Source.UNKNOWN);
-
-        CallContext.register(user1, acct);
-
-        when(_accountDao.findByIdIncludingRemoved(0L)).thenReturn(acct);
-
-        dc = new VmwareDatacenterVO(guid, vmwareDcName, vCenterHost, user, 
password);
-        vmwareDcs = new ArrayList<VmwareDatacenterVO>();
-        vmwareDcs.add(dc);
-        vmwareDcId = dc.getId();
-
-        cluster = new ClusterVO(zone.getId(), pod.getId(), "vmwarecluster");
-        cluster.setHypervisorType(HypervisorType.VMware.toString());
-        cluster.setClusterType(ClusterType.ExternalManaged);
-        cluster.setManagedState(ManagedState.Managed);
-        clusterId = 1L;
-        clusterList = new ArrayList<ClusterVO>();
-        clusterList.add(cluster);
-
-        clusterDetails = new ClusterDetailsVO(clusterId, "url", url);
-
-        dcZoneMap = new VmwareDatacenterZoneMapVO(zoneId, vmwareDcId);
-
-        Mockito.when(_dcDao.persist(any(DataCenterVO.class))).thenReturn(zone);
-        Mockito.when(_dcDao.findById(1L)).thenReturn(zone);
-        Mockito.when(_podDao.persist(any(HostPodVO.class))).thenReturn(pod);
-        Mockito.when(_podDao.findById(1L)).thenReturn(pod);
-        
Mockito.when(_clusterDao.persist(any(ClusterVO.class))).thenReturn(cluster);
-        Mockito.when(_clusterDao.findById(1L)).thenReturn(cluster);
-        Mockito.when(_clusterDao.listByZoneId(1L)).thenReturn(null);
-        Mockito.when(_clusterDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_clusterDetailsDao.persist(any(ClusterDetailsVO.class))).thenReturn(clusterDetails);
-        Mockito.when(_clusterDetailsDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_vmwareDcDao.persist(any(VmwareDatacenterVO.class))).thenReturn(dc);
-        Mockito.when(_vmwareDcDao.findById(1L)).thenReturn(null);
-        Mockito.when(_vmwareDcDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_vmwareDcDao.getVmwareDatacenterByNameAndVcenter(vmwareDcName, 
vCenterHost)).thenReturn(null);
-        
Mockito.when(_vmwareDcZoneMapDao.persist(any(VmwareDatacenterZoneMapVO.class))).thenReturn(dcZoneMap);
-        Mockito.when(_vmwareDcZoneMapDao.findByZoneId(1L)).thenReturn(null);
-        Mockito.when(_vmwareDcZoneMapDao.expunge(1L)).thenReturn(true);
-        Mockito.when(addCmd.getZoneId()).thenReturn(1L);
-        Mockito.when(addCmd.getVcenter()).thenReturn(vCenterHost);
-        Mockito.when(addCmd.getUsername()).thenReturn(user);
-        Mockito.when(addCmd.getPassword()).thenReturn(password);
-        Mockito.when(addCmd.getName()).thenReturn(vmwareDcName);
-        Mockito.when(removeCmd.getZoneId()).thenReturn(1L);
-    }
+@Configuration
+@ComponentScan(basePackageClasses = {VmwareManagerImpl.class},
+        includeFilters = {@Filter(value = TestConfiguration.Library.class, 
type = FilterType.CUSTOM)},
+        useDefaultFilters = false)

Review Comment:
   `includeFilters` references `TestConfiguration.Library.class`, but there is 
no `TestConfiguration` type in this file anymore. This will not compile; either 
reintroduce `TestConfiguration` (as before) or update the filter to reference 
the correct `Library` type (and ensure required SpringUtils/TypeFilter imports 
are present).



##########
plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java:
##########
@@ -15,503 +15,245 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package com.cloud.hypervisor.vmware;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.api.query.dao.TemplateJoinDao;
-import com.cloud.cluster.ClusterManager;
-import com.cloud.cluster.dao.ManagementServerHostPeerDao;
-import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterDetailsVO;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.VmwareDatacenterVO;
-import com.cloud.dc.dao.ClusterDao;
-import com.cloud.dc.dao.ClusterVSMMapDao;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.HostPodDao;
-import com.cloud.dc.dao.VsphereStoragePolicyDao;
-import com.cloud.event.dao.EventDao;
-import com.cloud.exception.DiscoveryException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.hypervisor.HypervisorGuruManager;
-import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
-import com.cloud.hypervisor.vmware.dao.LegacyZoneDao;
-import com.cloud.dc.dao.VmwareDatacenterDao;
-import com.cloud.hypervisor.vmware.dao.VmwareDatacenterZoneMapDao;
-import com.cloud.hypervisor.vmware.manager.VmwareManagerImpl;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
-import com.cloud.org.Cluster.ClusterType;
-import com.cloud.org.Managed.ManagedState;
-import com.cloud.secstorage.CommandExecLogDao;
-import com.cloud.server.ConfigurationServer;
-import com.cloud.storage.ImageStoreDetailsUtil;
-import com.cloud.storage.StorageManager;
-import com.cloud.storage.dao.VMTemplatePoolDao;
-import com.cloud.template.TemplateManager;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountService;
-import com.cloud.user.AccountVO;
-import com.cloud.user.User;
-import com.cloud.user.UserVO;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.dao.UserVmCloneSettingDao;
-import com.cloud.vm.dao.UserVmDao;
-import com.cloud.vm.dao.VMInstanceDao;
-import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
-import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
-import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.test.utils.SpringUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.springframework.context.annotation.Bean;
+import org.springframework.beans.factory.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.ComponentScan.Filter;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.FilterType;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.core.type.filter.TypeFilter;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
-public class VmwareDatacenterApiUnitTest {
-
-    @Inject
-    VmwareDatacenterService _vmwareDatacenterService;
-
-    @Inject
-    DataCenterDao _dcDao;
-
-    @Inject
-    HostPodDao _podDao;
-
-    @Inject
-    VmwareDatacenterDao _vmwareDcDao;
-
-    @Inject
-    VmwareDatacenterZoneMapDao _vmwareDcZoneMapDao;
-
-    @Inject
-    ClusterDao _clusterDao;
-
-    @Inject
-    ClusterDetailsDao _clusterDetailsDao;
-
-    @Inject
-    ConfigurationDao _configDao;
-
-    @Inject
-    AccountDao _accountDao;
-
-    @Inject
-    AccountManager _acctMgr;
-
-    long zoneId;
-    long podId;
-    long clusterId;
-    long vmwareDcId;
-    private static long domainId = 5L;
-    private static String vmwareDcName = "dc";
-    private static String clusterName = "cluster";
-    private static String vCenterHost = "10.1.1.100";
-    private static String url = "http://"; + vCenterHost + "/" + vmwareDcName + 
"/" + clusterName;
-    private static String user = "administrator";
-    private static String password = "password";
-    private static String guid = vmwareDcName + "@" + vCenterHost;
-
-    private static VmwareDatacenterVO dc;
-    private static List<VmwareDatacenterVO> vmwareDcs;
-    private static ClusterVO cluster;
-    private static VmwareDatacenterZoneMapVO dcZoneMap;
-    private static List<ClusterVO> clusterList;
-    private static ClusterDetailsVO clusterDetails;
-
-    @Mock
-    private static AddVmwareDcCmd addCmd;
-    @Mock
-    private static RemoveVmwareDcCmd removeCmd;
-
-    AutoCloseable closeable;
+import org.springframework.context.annotation.Filter;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.Test;
+import static org.junit.Assert.*;
 
-    @Before
-    public void testSetUp() {
-        Mockito.when(_configDao.isPremium()).thenReturn(true);
-        ComponentContext.initComponentsLifeCycle();
-        closeable = MockitoAnnotations.openMocks(this);
-
-        DataCenterVO zone =
-            new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", 
null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, 
null, true,
-                true, null, null);
-        zoneId = 1L;
-
-        HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), zoneId, 
"192.168.56.1", "192.168.56.0/24", 8, "test");
-        podId = 1L;
-
-        AccountVO acct = new AccountVO(200L);
-        acct.setType(Account.Type.ADMIN);
-        acct.setAccountName("admin");
-        acct.setDomainId(domainId);
-
-        UserVO user1 = new UserVO(1, "testuser", "password", "firstname", 
"lastName", "email", "timezone", UUID.randomUUID().toString(), 
User.Source.UNKNOWN);
-
-        CallContext.register(user1, acct);
-
-        when(_accountDao.findByIdIncludingRemoved(0L)).thenReturn(acct);
-
-        dc = new VmwareDatacenterVO(guid, vmwareDcName, vCenterHost, user, 
password);
-        vmwareDcs = new ArrayList<VmwareDatacenterVO>();
-        vmwareDcs.add(dc);
-        vmwareDcId = dc.getId();
-
-        cluster = new ClusterVO(zone.getId(), pod.getId(), "vmwarecluster");
-        cluster.setHypervisorType(HypervisorType.VMware.toString());
-        cluster.setClusterType(ClusterType.ExternalManaged);
-        cluster.setManagedState(ManagedState.Managed);
-        clusterId = 1L;
-        clusterList = new ArrayList<ClusterVO>();
-        clusterList.add(cluster);
-
-        clusterDetails = new ClusterDetailsVO(clusterId, "url", url);
-
-        dcZoneMap = new VmwareDatacenterZoneMapVO(zoneId, vmwareDcId);
-
-        Mockito.when(_dcDao.persist(any(DataCenterVO.class))).thenReturn(zone);
-        Mockito.when(_dcDao.findById(1L)).thenReturn(zone);
-        Mockito.when(_podDao.persist(any(HostPodVO.class))).thenReturn(pod);
-        Mockito.when(_podDao.findById(1L)).thenReturn(pod);
-        
Mockito.when(_clusterDao.persist(any(ClusterVO.class))).thenReturn(cluster);
-        Mockito.when(_clusterDao.findById(1L)).thenReturn(cluster);
-        Mockito.when(_clusterDao.listByZoneId(1L)).thenReturn(null);
-        Mockito.when(_clusterDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_clusterDetailsDao.persist(any(ClusterDetailsVO.class))).thenReturn(clusterDetails);
-        Mockito.when(_clusterDetailsDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_vmwareDcDao.persist(any(VmwareDatacenterVO.class))).thenReturn(dc);
-        Mockito.when(_vmwareDcDao.findById(1L)).thenReturn(null);
-        Mockito.when(_vmwareDcDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_vmwareDcDao.getVmwareDatacenterByNameAndVcenter(vmwareDcName, 
vCenterHost)).thenReturn(null);
-        
Mockito.when(_vmwareDcZoneMapDao.persist(any(VmwareDatacenterZoneMapVO.class))).thenReturn(dcZoneMap);
-        Mockito.when(_vmwareDcZoneMapDao.findByZoneId(1L)).thenReturn(null);
-        Mockito.when(_vmwareDcZoneMapDao.expunge(1L)).thenReturn(true);
-        Mockito.when(addCmd.getZoneId()).thenReturn(1L);
-        Mockito.when(addCmd.getVcenter()).thenReturn(vCenterHost);
-        Mockito.when(addCmd.getUsername()).thenReturn(user);
-        Mockito.when(addCmd.getPassword()).thenReturn(password);
-        Mockito.when(addCmd.getName()).thenReturn(vmwareDcName);
-        Mockito.when(removeCmd.getZoneId()).thenReturn(1L);
-    }
+@Configuration
+@ComponentScan(basePackageClasses = {VmwareManagerImpl.class},
+        includeFilters = {@Filter(value = TestConfiguration.Library.class, 
type = FilterType.CUSTOM)},
+        useDefaultFilters = false)
+public class VmwareDatacenterTest {
 
-    @After
-    public void tearDown() throws Exception {
-        CallContext.unregister();
-        closeable.close();
+    @Bean
+    public AccountDao accountDao() {
+        return Mockito.mock(AccountDao.class);
     }
 
-    //@Test(expected = InvalidParameterValueException.class)
-    public void testAddVmwareDcToInvalidZone() throws ResourceInUseException, 
IllegalArgumentException, DiscoveryException, Exception {
-        Mockito.when(addCmd.getZoneId()).thenReturn(2L);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public AccountService accountService() {
+        return Mockito.mock(AccountService.class);
     }
 
-    //@Test(expected = ResourceInUseException.class)
-    public void testAddVmwareDcToZoneWithClusters() throws 
ResourceInUseException, IllegalArgumentException, DiscoveryException, Exception 
{
-        Mockito.when(_clusterDao.listByZoneId(1L)).thenReturn(clusterList);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public DataCenterDao dataCenterDao() {
+        return Mockito.mock(DataCenterDao.class);
     }
 
-    @Test(expected = InvalidParameterValueException.class)
-    public void testRemoveVmwareDcToInvalidZone() throws 
ResourceInUseException, IllegalArgumentException, DiscoveryException, Exception 
{
-        Mockito.when(removeCmd.getZoneId()).thenReturn(2L);
-        _vmwareDatacenterService.removeVmwareDatacenter(removeCmd);
+    @Bean
+    public HostPodDao hostPodDao() {
+        return Mockito.mock(HostPodDao.class);
     }
 
-    @Test(expected = ResourceInUseException.class)
-    public void testRemoveVmwareDcToZoneWithClusters() throws 
ResourceInUseException, IllegalArgumentException, DiscoveryException, Exception 
{
-        Mockito.when(_clusterDao.listByZoneId(1L)).thenReturn(clusterList);
-        _vmwareDatacenterService.removeVmwareDatacenter(removeCmd);
+    @Bean
+    public ClusterDao clusterDao() {
+        return Mockito.mock(ClusterDao.class);
     }
 
-    //@Test(expected = ResourceInUseException.class)
-    public void testAddVmwareDcToZoneWithVmwareDc() throws 
ResourceInUseException, IllegalArgumentException, DiscoveryException, Exception 
{
-        
Mockito.when(_vmwareDcDao.getVmwareDatacenterByNameAndVcenter(vmwareDcName, 
vCenterHost)).thenReturn(vmwareDcs);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public ClusterDetailsDao clusterDetailsDao() {
+        return Mockito.mock(ClusterDetailsDao.class);
     }
 
-    //@Test(expected = InvalidParameterValueException.class)
-    public void testAddVmwareDcWithNullUser() throws ResourceInUseException, 
IllegalArgumentException, DiscoveryException, Exception {
-        Mockito.when(addCmd.getUsername()).thenReturn(null);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public VmwareDatacenterDao vmwareDatacenterDao() {
+        return Mockito.mock(VmwareDatacenterDao.class);
     }
 
-    //@Test(expected = InvalidParameterValueException.class)
-    public void testAddVmwareDcWithNullPassword() throws 
ResourceInUseException, IllegalArgumentException, DiscoveryException, Exception 
{
-        Mockito.when(addCmd.getPassword()).thenReturn(null);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public VmwareDatacenterZoneMapDao vmwareDatacenterZoneMapDao() {
+        return Mockito.mock(VmwareDatacenterZoneMapDao.class);
     }
 
-    //@Test(expected = InvalidParameterValueException.class)
-    public void testAddVmwareDcWithNullUrl() throws ResourceInUseException, 
IllegalArgumentException, DiscoveryException, Exception {
-        Mockito.when(addCmd.getVcenter()).thenReturn(null);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public AgentManager agentManager() {
+        return Mockito.mock(AgentManager.class);
     }
 
-    //@Test(expected = InvalidParameterValueException.class)
-    public void testAddVmwareDcWithNullDcName() throws ResourceInUseException, 
IllegalArgumentException, DiscoveryException, Exception {
-        Mockito.when(addCmd.getName()).thenReturn(null);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public HostDao hostDao() {
+        return Mockito.mock(HostDao.class);
     }
 
-    //@Test(expected = CloudRuntimeException.class)
-    public void testReAddVmwareDc() throws ResourceInUseException, 
IllegalArgumentException, DiscoveryException, Exception {
-        
Mockito.when(_vmwareDcZoneMapDao.findByZoneId(1L)).thenReturn(dcZoneMap);
-        _vmwareDatacenterService.addVmwareDatacenter(addCmd);
+    @Bean
+    public HostDetailsDao hostDetailsDao() {
+        return Mockito.mock(HostDetailsDao.class);
     }
 
-    @Test(expected = CloudRuntimeException.class)
-    public void testRemoveNonexistingVmwareDc() throws ResourceInUseException, 
IllegalArgumentException, DiscoveryException, Exception {
-        Mockito.when(_vmwareDcZoneMapDao.findByZoneId(1L)).thenReturn(null);
-        _vmwareDatacenterService.removeVmwareDatacenter(removeCmd);
+    @Bean
+    public NetworkModel networkModel() {
+        return Mockito.mock(NetworkModel.class);
     }
 
-    @Configuration
-    @ComponentScan(basePackageClasses = {VmwareManagerImpl.class},
-                   includeFilters = {@Filter(value = 
TestConfiguration.Library.class, type = FilterType.CUSTOM)},
-                   useDefaultFilters = false)
-    public static class TestConfiguration extends 
SpringUtils.CloudStackTestConfiguration {
-
-        @Bean
-        public AccountDao accountDao() {
-            return Mockito.mock(AccountDao.class);
-        }
-
-        @Bean
-        public AccountService accountService() {
-            return Mockito.mock(AccountService.class);
-        }
-
-        @Bean
-        public DataCenterDao dataCenterDao() {
-            return Mockito.mock(DataCenterDao.class);
-        }
-
-        @Bean
-        public HostPodDao hostPodDao() {
-            return Mockito.mock(HostPodDao.class);
-        }
-
-        @Bean
-        public ClusterDao clusterDao() {
-            return Mockito.mock(ClusterDao.class);
-        }
-
-        @Bean
-        public ClusterDetailsDao clusterDetailsDao() {
-            return Mockito.mock(ClusterDetailsDao.class);
-        }
-
-        @Bean
-        public VmwareDatacenterDao vmwareDatacenterDao() {
-            return Mockito.mock(VmwareDatacenterDao.class);
-        }
-
-        @Bean
-        public VmwareDatacenterZoneMapDao vmwareDatacenterZoneMapDao() {
-            return Mockito.mock(VmwareDatacenterZoneMapDao.class);
-        }
-
-        @Bean
-        public AgentManager agentManager() {
-            return Mockito.mock(AgentManager.class);
-        }
+    @Bean
+    public ClusterManager clusterManager() {
+        return Mockito.mock(ClusterManager.class);
+    }
 
-        @Bean
-        public HostDao hostDao() {
-            return Mockito.mock(HostDao.class);
-        }
+    @Bean
+    public CommandExecLogDao commandExecLogDao() {
+        return Mockito.mock(CommandExecLogDao.class);
+    }
 
-        @Bean
-        public HostDetailsDao hostDetailsDao() {
-            return Mockito.mock(HostDetailsDao.class);
-        }
+    @Bean
+    public CiscoNexusVSMDeviceDao ciscoNexusVSMDeviceDao() {
+        return Mockito.mock(CiscoNexusVSMDeviceDao.class);
+    }
 
-        @Bean
-        public NetworkModel networkModel() {
-            return Mockito.mock(NetworkModel.class);
-        }
+    @Bean
+    public ClusterVSMMapDao clusterVSMMapDao() {
+        return Mockito.mock(ClusterVSMMapDao.class);
+    }
 
-        @Bean
-        public ClusterManager clusterManager() {
-            return Mockito.mock(ClusterManager.class);
-        }
+    @Bean
+    public LegacyZoneDao legacyZoneDao() {
+        return Mockito.mock(LegacyZoneDao.class);
+    }
 
-        @Bean
-        public CommandExecLogDao commandExecLogDao() {
-            return Mockito.mock(CommandExecLogDao.class);
-        }
+    @Bean
+    public ManagementServerHostPeerDao managementServerHostPeerDao() {
+        return Mockito.mock(ManagementServerHostPeerDao.class);
+    }
 
-        @Bean
-        public CiscoNexusVSMDeviceDao ciscoNexusVSMDeviceDao() {
-            return Mockito.mock(CiscoNexusVSMDeviceDao.class);
-        }
+    @Bean
+    public ConfigurationDao configurationDao() {
+        return Mockito.mock(ConfigurationDao.class);
+    }
 
-        @Bean
-        public ClusterVSMMapDao clusterVSMMapDao() {
-            return Mockito.mock(ClusterVSMMapDao.class);
-        }
+    @Bean
+    public ConfigurationServer configurationServer() {
+        return Mockito.mock(ConfigurationServer.class);
+    }
 
-        @Bean
-        public LegacyZoneDao legacyZoneDao() {
-            return Mockito.mock(LegacyZoneDao.class);
-        }
+    @Bean
+    public HypervisorCapabilitiesDao hypervisorCapabilitiesDao() {
+        return Mockito.mock(HypervisorCapabilitiesDao.class);
+    }
 
-        @Bean
-        public ManagementServerHostPeerDao managementServerHostPeerDao() {
-            return Mockito.mock(ManagementServerHostPeerDao.class);
-        }
+    @Bean
+    public AccountManager accountManager() {
+        return Mockito.mock(AccountManager.class);
+    }
 
-        @Bean
-        public ConfigurationDao configurationDao() {
-            return Mockito.mock(ConfigurationDao.class);
-        }
+    @Bean
+    public EventDao eventDao() {
+        return Mockito.mock(EventDao.class);
+    }
 
-        @Bean
-        public ConfigurationServer configurationServer() {
-            return Mockito.mock(ConfigurationServer.class);
-        }
+    @Bean
+    public UserVmDao userVMDao() {
+        return Mockito.mock(UserVmDao.class);
+    }
 
-        @Bean
-        public HypervisorCapabilitiesDao hypervisorCapabilitiesDao() {
-            return Mockito.mock(HypervisorCapabilitiesDao.class);
-        }
+    @Bean
+    public AddVmwareDcCmd addVmwareDatacenterCmd() {
+        return Mockito.mock(AddVmwareDcCmd.class);
+    }
 
-        @Bean
-        public AccountManager accountManager() {
-            return Mockito.mock(AccountManager.class);
-        }
+    @Bean
+    public RemoveVmwareDcCmd removeVmwareDcCmd() {
+        return Mockito.mock(RemoveVmwareDcCmd.class);
+    }
 
-        @Bean
-        public EventDao eventDao() {
-            return Mockito.mock(EventDao.class);
-        }
+    @Bean
+    public DataStoreManager dataStoreManager() {
+        return Mockito.mock(DataStoreManager.class);
+    }
 
-        @Bean
-        public UserVmDao userVMDao() {
-            return Mockito.mock(UserVmDao.class);
-        }
+    @Bean
+    public ImageStoreDetailsUtil imageStoreDetailsUtil() {
+        return Mockito.mock(ImageStoreDetailsUtil.class);
+    }
 
-        public AddVmwareDcCmd addVmwareDatacenterCmd() {
-            return Mockito.mock(AddVmwareDcCmd.class);
-        }
+    @Bean
+    public ImageStoreDao imageStoreDao() {
+        return Mockito.mock(ImageStoreDao.class);
+    }
 
-        public RemoveVmwareDcCmd removeVmwareDcCmd() {
-            return Mockito.mock(RemoveVmwareDcCmd.class);
-        }
+    @Bean
+    public ImageStoreDetailsDao imageStoreDetailsDao() {
+        return Mockito.mock(ImageStoreDetailsDao.class);
+    }
 
-        @Bean
-        public DataStoreManager dataStoreManager() {
-            return Mockito.mock(DataStoreManager.class);
-        }
+    @Bean
+    public VMTemplatePoolDao templateDataStoreDao() {
+        return Mockito.mock(VMTemplatePoolDao.class);
+    }
 
-        @Bean
-        public ImageStoreDetailsUtil imageStoreDetailsUtil() {
-            return Mockito.mock(ImageStoreDetailsUtil.class);
-        }
+    @Bean
+    public TemplateJoinDao templateDao() {
+        return Mockito.mock(TemplateJoinDao.class);
+    }
 
-        //Mocks for ImageStoreDetailsUtil
-        @Bean
-        public ImageStoreDao imageStoreDao() {
-            return Mockito.mock(ImageStoreDao.class);
-        }
+    @Bean
+    public VMInstanceDao vmInstanceDao() {
+        return Mockito.mock(VMInstanceDao.class);
+    }
 
-        @Bean
-        public ImageStoreDetailsDao imageStoreDetailsDao() {
-            return Mockito.mock(ImageStoreDetailsDao.class);
-        }
+    @Bean
+    public UserVmCloneSettingDao cloneSettingDao() {
+        return Mockito.mock(UserVmCloneSettingDao.class);
+    }
 
-        @Bean
-        public VMTemplatePoolDao templateDataStoreDao() {
-            return Mockito.mock(VMTemplatePoolDao.class);
-        }
+    @Bean
+    public PrimaryDataStoreDao primaryStorageDao() {
+        return Mockito.mock(PrimaryDataStoreDao.class);
+    }
 
-        @Bean
-        public TemplateJoinDao templateDao() {
-            return Mockito.mock(TemplateJoinDao.class);
-        }
+    @Bean
+    public TemplateManager templateManager() {
+        return Mockito.mock(TemplateManager.class);
+    }
 
-        @Bean
-        public VMInstanceDao vmInstanceDao() {
-            return Mockito.mock(VMInstanceDao.class);
-        }
+    @Bean
+    public VsphereStoragePolicyDao vsphereStoragePolicyDao() {
+        return Mockito.mock(VsphereStoragePolicyDao.class);
+    }
 
-        @Bean
-        public UserVmCloneSettingDao cloneSettingDao() {
-            return Mockito.mock(UserVmCloneSettingDao.class);
-        }
+    @Bean
+    public StorageManager storageManager() {
+        return Mockito.mock(StorageManager.class);
+    }
 
-        @Bean
-        public PrimaryDataStoreDao primaryStorageDao() {
-            return Mockito.mock(PrimaryDataStoreDao.class);
-        }
+    @Bean
+    public HypervisorGuruManager hypervisorGuruManager() {
+        return Mockito.mock(HypervisorGuruManager.class);
+    }
 
-        @Bean
-        public TemplateManager templateManager() {
-            return Mockito.mock(TemplateManager.class);
-        }
+    public static class Library implements TypeFilter {
 
-        @Bean
-        public VsphereStoragePolicyDao vsphereStoragePolicyDao() {
-            return Mockito.mock(VsphereStoragePolicyDao.class);
+        @Override
+        public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) 
throws IOException {
+            ComponentScan cs = 
TestConfiguration.class.getAnnotation(ComponentScan.class);
+            return 
SpringUtils.includedInBasePackageClasses(mdr.getClassMetadata().getClassName(), 
cs);
         }
+    }
 
-        @Bean
-        public StorageManager storageManager() {
-            return Mockito.mock(StorageManager.class);
-        }
+    @Before
+    public void setUp() throws Exception {
+        // Initialize necessary objects here
+    }
 
-        @Bean
-        public HypervisorGuruManager hypervisorGuruManager() {
-            return Mockito.mock(HypervisorGuruManager.class);
-        }
+    @After
+    public void tearDown() throws Exception {
+        // Clean up after tests
+    }
 
-        public static class Library implements TypeFilter {
+    @Test
+    public void testRemoveVmwareDcToInvalidZone() {
+        // Add your test code here
+    }
 
-            @Override
-            public boolean match(MetadataReader mdr, MetadataReaderFactory 
arg1) throws IOException {
-                ComponentScan cs = 
TestConfiguration.class.getAnnotation(ComponentScan.class);
-                return 
SpringUtils.includedInBasePackageClasses(mdr.getClassMetadata().getClassName(), 
cs);
-            }
-        }
+    @Test
+    public void testRemoveVmwareDcToZoneWithClusters() {
+        // Add your test code here
     }

Review Comment:
   The test methods are now empty placeholders ("Add your test code here"), 
which removes the behavioral coverage that previously existed and will let 
regressions slip through. Please restore meaningful assertions around 
`add/remove VmwareDatacenter` behavior (or delete the tests if they are 
intentionally being removed and covered elsewhere).



##########
utils/src/test/java/org/apache/cloudstack/utils/security/CertUtilsTest.java:
##########
@@ -38,6 +38,7 @@ public class CertUtilsTest {
 
     @Before
     public void setUp() throws Exception {
+        // Assuming CertUtils.generateRandomKeyPair() and 
CertUtils.generateV3Certificate() are static methods
         caKeyPair = CertUtils.generateRandomKeyPair(1024);
         caCertificate = CertUtils.generateV3Certificate(null, caKeyPair, 
caKeyPair.getPublic(), "CN=test", "SHA256WithRSAEncryption", 365, null, null);

Review Comment:
   The inline comment on the `package` declaration ("Add the correct package 
statement") and the added explanatory comment in `setUp()` read like temporary 
notes and add noise to the test source. Please remove these comments unless 
they convey necessary information for future maintainers.



##########
utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java:
##########
@@ -744,10 +744,17 @@ public void testIsIpv4ExpectException2() {
     public void testAllIpsOfDefaultNic() {
         final String defaultHostIp = NetUtils.getDefaultHostIp();
         if (defaultHostIp != null) {
-            
assertTrue(NetUtils.getAllDefaultNicIps().stream().anyMatch(defaultHostIp::contains));
+            List<String> allIps = NetUtils.getAllDefaultNicIps();
+            System.out.println("defaultHostIp: " + defaultHostIp);
+            System.out.println("allIps: " + allIps);
+
+            // Ensure defaultHostIp is present in one of the NIC IPs, 
accounting for IPv4 and IPv6 formats
+            boolean ipFound = allIps.stream().anyMatch(ip -> 
ip.contains(defaultHostIp));
+            assertTrue("Expected IP not found in NIC IPs", ipFound);

Review Comment:
   Avoid printing to stdout from unit tests (`System.out.println`), as it adds 
noise and can make CI logs harder to read. Also, `ip.contains(defaultHostIp)` 
is a fragile comparison for IPv6 (compressed vs expanded forms); instead, 
normalize by parsing both sides to `InetAddress` (or compare the raw address 
bytes) and then compare for equality.



##########
ui/src/components/view/ObjectStoreBrowser.vue:
##########
@@ -148,6 +148,52 @@
             :placeholder="$t('label.objectstore.search')"
             :loading="loading"
             @search="listObjects()"
+            listObjects () {
+               // Wait if a previous request is still in progress
+               while (this.fetching) {
+                 setTimeout(() => {
+                   console.log('Waiting for previous request to complete...');
+                 }, 500);

Review Comment:
   The added `while (this.fetching) { setTimeout(...) }` loop is a synchronous 
busy-wait: it will spin without yielding and can freeze the UI thread 
indefinitely (the `setTimeout` callback doesn't block the loop). Use an async 
guard instead (e.g., return early when `fetching` is true, or serialize 
requests via a promise/queue) rather than a `while` loop.
   ```suggestion
                  if (this.fetching) {
                    console.log('Waiting for previous request to complete...');
                    return;
   ```



##########
plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java:
##########
@@ -15,503 +15,245 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package com.cloud.hypervisor.vmware;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.api.query.dao.TemplateJoinDao;
-import com.cloud.cluster.ClusterManager;
-import com.cloud.cluster.dao.ManagementServerHostPeerDao;
-import com.cloud.dc.ClusterDetailsDao;
-import com.cloud.dc.ClusterDetailsVO;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.VmwareDatacenterVO;
-import com.cloud.dc.dao.ClusterDao;
-import com.cloud.dc.dao.ClusterVSMMapDao;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.HostPodDao;
-import com.cloud.dc.dao.VsphereStoragePolicyDao;
-import com.cloud.event.dao.EventDao;
-import com.cloud.exception.DiscoveryException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceInUseException;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDetailsDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.hypervisor.HypervisorGuruManager;
-import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
-import com.cloud.hypervisor.vmware.dao.LegacyZoneDao;
-import com.cloud.dc.dao.VmwareDatacenterDao;
-import com.cloud.hypervisor.vmware.dao.VmwareDatacenterZoneMapDao;
-import com.cloud.hypervisor.vmware.manager.VmwareManagerImpl;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
-import com.cloud.org.Cluster.ClusterType;
-import com.cloud.org.Managed.ManagedState;
-import com.cloud.secstorage.CommandExecLogDao;
-import com.cloud.server.ConfigurationServer;
-import com.cloud.storage.ImageStoreDetailsUtil;
-import com.cloud.storage.StorageManager;
-import com.cloud.storage.dao.VMTemplatePoolDao;
-import com.cloud.template.TemplateManager;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountService;
-import com.cloud.user.AccountVO;
-import com.cloud.user.User;
-import com.cloud.user.UserVO;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.dao.UserVmCloneSettingDao;
-import com.cloud.vm.dao.UserVmDao;
-import com.cloud.vm.dao.VMInstanceDao;
-import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
-import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
-import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.test.utils.SpringUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.springframework.context.annotation.Bean;
+import org.springframework.beans.factory.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.ComponentScan.Filter;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.FilterType;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.core.type.filter.TypeFilter;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
-public class VmwareDatacenterApiUnitTest {
-
-    @Inject
-    VmwareDatacenterService _vmwareDatacenterService;
-
-    @Inject
-    DataCenterDao _dcDao;
-
-    @Inject
-    HostPodDao _podDao;
-
-    @Inject
-    VmwareDatacenterDao _vmwareDcDao;
-
-    @Inject
-    VmwareDatacenterZoneMapDao _vmwareDcZoneMapDao;
-
-    @Inject
-    ClusterDao _clusterDao;
-
-    @Inject
-    ClusterDetailsDao _clusterDetailsDao;
-
-    @Inject
-    ConfigurationDao _configDao;
-
-    @Inject
-    AccountDao _accountDao;
-
-    @Inject
-    AccountManager _acctMgr;
-
-    long zoneId;
-    long podId;
-    long clusterId;
-    long vmwareDcId;
-    private static long domainId = 5L;
-    private static String vmwareDcName = "dc";
-    private static String clusterName = "cluster";
-    private static String vCenterHost = "10.1.1.100";
-    private static String url = "http://"; + vCenterHost + "/" + vmwareDcName + 
"/" + clusterName;
-    private static String user = "administrator";
-    private static String password = "password";
-    private static String guid = vmwareDcName + "@" + vCenterHost;
-
-    private static VmwareDatacenterVO dc;
-    private static List<VmwareDatacenterVO> vmwareDcs;
-    private static ClusterVO cluster;
-    private static VmwareDatacenterZoneMapVO dcZoneMap;
-    private static List<ClusterVO> clusterList;
-    private static ClusterDetailsVO clusterDetails;
-
-    @Mock
-    private static AddVmwareDcCmd addCmd;
-    @Mock
-    private static RemoveVmwareDcCmd removeCmd;
-
-    AutoCloseable closeable;
+import org.springframework.context.annotation.Filter;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.Test;
+import static org.junit.Assert.*;
 
-    @Before
-    public void testSetUp() {
-        Mockito.when(_configDao.isPremium()).thenReturn(true);
-        ComponentContext.initComponentsLifeCycle();
-        closeable = MockitoAnnotations.openMocks(this);
-
-        DataCenterVO zone =
-            new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", 
null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, 
null, true,
-                true, null, null);
-        zoneId = 1L;
-
-        HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), zoneId, 
"192.168.56.1", "192.168.56.0/24", 8, "test");
-        podId = 1L;
-
-        AccountVO acct = new AccountVO(200L);
-        acct.setType(Account.Type.ADMIN);
-        acct.setAccountName("admin");
-        acct.setDomainId(domainId);
-
-        UserVO user1 = new UserVO(1, "testuser", "password", "firstname", 
"lastName", "email", "timezone", UUID.randomUUID().toString(), 
User.Source.UNKNOWN);
-
-        CallContext.register(user1, acct);
-
-        when(_accountDao.findByIdIncludingRemoved(0L)).thenReturn(acct);
-
-        dc = new VmwareDatacenterVO(guid, vmwareDcName, vCenterHost, user, 
password);
-        vmwareDcs = new ArrayList<VmwareDatacenterVO>();
-        vmwareDcs.add(dc);
-        vmwareDcId = dc.getId();
-
-        cluster = new ClusterVO(zone.getId(), pod.getId(), "vmwarecluster");
-        cluster.setHypervisorType(HypervisorType.VMware.toString());
-        cluster.setClusterType(ClusterType.ExternalManaged);
-        cluster.setManagedState(ManagedState.Managed);
-        clusterId = 1L;
-        clusterList = new ArrayList<ClusterVO>();
-        clusterList.add(cluster);
-
-        clusterDetails = new ClusterDetailsVO(clusterId, "url", url);
-
-        dcZoneMap = new VmwareDatacenterZoneMapVO(zoneId, vmwareDcId);
-
-        Mockito.when(_dcDao.persist(any(DataCenterVO.class))).thenReturn(zone);
-        Mockito.when(_dcDao.findById(1L)).thenReturn(zone);
-        Mockito.when(_podDao.persist(any(HostPodVO.class))).thenReturn(pod);
-        Mockito.when(_podDao.findById(1L)).thenReturn(pod);
-        
Mockito.when(_clusterDao.persist(any(ClusterVO.class))).thenReturn(cluster);
-        Mockito.when(_clusterDao.findById(1L)).thenReturn(cluster);
-        Mockito.when(_clusterDao.listByZoneId(1L)).thenReturn(null);
-        Mockito.when(_clusterDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_clusterDetailsDao.persist(any(ClusterDetailsVO.class))).thenReturn(clusterDetails);
-        Mockito.when(_clusterDetailsDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_vmwareDcDao.persist(any(VmwareDatacenterVO.class))).thenReturn(dc);
-        Mockito.when(_vmwareDcDao.findById(1L)).thenReturn(null);
-        Mockito.when(_vmwareDcDao.expunge(1L)).thenReturn(true);
-        
Mockito.when(_vmwareDcDao.getVmwareDatacenterByNameAndVcenter(vmwareDcName, 
vCenterHost)).thenReturn(null);
-        
Mockito.when(_vmwareDcZoneMapDao.persist(any(VmwareDatacenterZoneMapVO.class))).thenReturn(dcZoneMap);
-        Mockito.when(_vmwareDcZoneMapDao.findByZoneId(1L)).thenReturn(null);
-        Mockito.when(_vmwareDcZoneMapDao.expunge(1L)).thenReturn(true);
-        Mockito.when(addCmd.getZoneId()).thenReturn(1L);
-        Mockito.when(addCmd.getVcenter()).thenReturn(vCenterHost);
-        Mockito.when(addCmd.getUsername()).thenReturn(user);
-        Mockito.when(addCmd.getPassword()).thenReturn(password);
-        Mockito.when(addCmd.getName()).thenReturn(vmwareDcName);
-        Mockito.when(removeCmd.getZoneId()).thenReturn(1L);
-    }
+@Configuration
+@ComponentScan(basePackageClasses = {VmwareManagerImpl.class},
+        includeFilters = {@Filter(value = TestConfiguration.Library.class, 
type = FilterType.CUSTOM)},
+        useDefaultFilters = false)
+public class VmwareDatacenterTest {
 

Review Comment:
   This file no longer has a `package com.cloud.hypervisor.vmware;` 
declaration, and the `public class VmwareDatacenterTest` name no longer matches 
the filename `VmwareDatacenterApiUnitTest.java`. Both will cause compilation 
failures (package mismatch + public type name mismatch). Restore the correct 
package statement and ensure the public class name matches the file name (or 
rename the file accordingly).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to