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]