diff --git a/incubator-taverna-language b/incubator-taverna-language new file mode 160000 index 000000000000..1a823c548486 --- /dev/null +++ b/incubator-taverna-language @@ -0,0 +1 @@ +Subproject commit 1a823c548486dec1c44a8ffc9cba795f823d382b diff --git a/plugins/hypervisors/vmware/pom.xml b/plugins/hypervisors/vmware/pom.xml index d54410ebe93e..1a4f7c89c739 100644 --- a/plugins/hypervisors/vmware/pom.xml +++ b/plugins/hypervisors/vmware/pom.xml @@ -17,7 +17,7 @@ under the License. --> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 cloud-plugin-hypervisor-vmware Apache CloudStack Plugin - Hypervisor VMware @@ -27,48 +27,24 @@ 4.21.0.0-SNAPSHOT ../../pom.xml + + + + - org.apache.cloudstack - cloud-vmware-base - ${project.version} - - - org.apache.cloudstack - cloud-secondary-storage - ${project.version} - - - org.apache.cloudstack - cloud-engine-storage - ${project.version} - compile - - - org.apache.cloudstack - cloud-engine-orchestration - ${project.version} - - - com.cloud.com.vmware - vmware-vim25 - ${cs.vmware.api.version} - compile - - - com.sun.org.apache.xml.internal - resolver - 20050927 - - - wsdl4j - wsdl4j + org.junit.jupiter + junit-jupiter-api + 5.7.0 + test + - com.cloud.com.vmware - vmware-pbm - ${cs.vmware.api.version} - compile + org.junit.jupiter + junit-jupiter-engine + 5.7.0 + test + diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java index 1cfc1541e82c..091e452cb0bd 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabel.java @@ -1,17 +1,17 @@ // Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file +// or more contributor license agreements. See the NOTICE file // distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file +// regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at +// with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.network; @@ -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); } - public VmwareTrafficLabel(TrafficType trafficType, VirtualSwitchType defVswitchType) { - _trafficType = trafficType; // Define traffic label with specific traffic type - _parseLabel(null, defVswitchType); - } - - public VmwareTrafficLabel(TrafficType trafficType) { - _trafficType = trafficType; // Define traffic label with specific traffic type - _parseLabel(null, VirtualSwitchType.StandardVirtualSwitch); - } - - public VmwareTrafficLabel() { - } - private void _parseLabel(String networkLabel, VirtualSwitchType defVswitchType) { // Set defaults for label in case of distributed vSwitch if (defVswitchType.equals(VirtualSwitchType.VMwareDistributedVirtualSwitch)) { @@ -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"); + } + } + @Override public TrafficType getTrafficType() { return _trafficType; diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabelTest.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/network/VmwareTrafficLabelTest.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/SpringBeanIntegrationTest b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/SpringBeanIntegrationTest new file mode 100644 index 000000000000..18bbb1956a5a --- /dev/null +++ b/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 + } +} diff --git a/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java index 940bfcac5473..e812955a6512 100644 --- a/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java +++ b/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 vmwareDcs; - private static ClusterVO cluster; - private static VmwareDatacenterZoneMapVO dcZoneMap; - private static List 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(); - 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(); - 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 } } diff --git a/ui/src/components/view/ObjectStoreBrowser.vue b/ui/src/components/view/ObjectStoreBrowser.vue index 531846a9da57..e3cdd2af1f6e 100644 --- a/ui/src/components/view/ObjectStoreBrowser.vue +++ b/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; + }); + } + :enter-button="$t('label.search')"/> diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 2f0666a39c61..e016dde4f8d7 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -732,10 +732,17 @@ public void testIsIpv4ExpectException2() { public void testAllIpsOfDefaultNic() { final String defaultHostIp = NetUtils.getDefaultHostIp(); if (defaultHostIp != null) { - assertTrue(NetUtils.getAllDefaultNicIps().stream().anyMatch(defaultHostIp::contains)); + List 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); } } + @Test public void testIsIPv6EUI64() { assertTrue(NetUtils.isIPv6EUI64("fe80::5054:8fff:fe9f:af61")); diff --git a/utils/src/test/java/com/cloud/utils/script/ScriptTest.java b/utils/src/test/java/com/cloud/utils/script/ScriptTest.java index cc6047959da9..899b0407e3d0 100644 --- a/utils/src/test/java/com/cloud/utils/script/ScriptTest.java +++ b/utils/src/test/java/com/cloud/utils/script/ScriptTest.java @@ -20,13 +20,11 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; - import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; - import com.cloud.utils.Pair; @RunWith(MockitoJUnitRunner.class) @@ -39,7 +37,7 @@ public void testExecutePipedCommandsSingle() { commands.add(new String[]{"echo", keyword}); Pair result = Script.executePipedCommands(commands, 0); Assert.assertNotNull("Result should not be null", result); - Assert.assertEquals(0, result.first().intValue()); + Assert.assertEquals(0, result.first().intValue()); // Expecting 0 for success String output = result.second().trim(); Assert.assertTrue(StringUtils.isNotEmpty(output)); Assert.assertEquals(keyword, output); @@ -54,7 +52,7 @@ public void testExecutePipedCommandsMultiple() { ); Pair result = Script.executePipedCommands(commands, 0); Assert.assertNotNull("Result should not be null", result); - Assert.assertEquals(0, result.first().intValue()); + Assert.assertEquals(0, result.first().intValue()); // Expecting 0 for success String output = result.second().trim(); Assert.assertTrue(StringUtils.isNotEmpty(output)); Assert.assertEquals(keyword, output); @@ -63,19 +61,19 @@ public void testExecutePipedCommandsMultiple() { @Test public void testExecutePipedCommandsTimeout() { List commands = new ArrayList<>(); - commands.add(new String[]{"sh", "-c", "sleep 10"}); - Pair result = Script.executePipedCommands(commands, TimeUnit.SECONDS.toMillis(1)); + commands.add(new String[]{"sh", "-c", "sleep 10"}); // Simulate a long-running command + Pair result = Script.executePipedCommands(commands, TimeUnit.SECONDS.toMillis(1)); // Set a timeout of 1 second Assert.assertNotNull("Result should not be null", result); - Assert.assertEquals(-1, result.first().intValue()); - Assert.assertEquals(Script.ERR_TIMEOUT, result.second()); + Assert.assertEquals(-1, result.first().intValue()); // Expecting -1 for timeout + Assert.assertEquals(Script.ERR_TIMEOUT, result.second()); // Ensure the correct timeout error message } @Test public void testGetExecutableAbsolutePath() { if (System.getProperty("os.name").startsWith("Windows")) { - return; + return; // Skip on Windows, as 'ls' command isn't available on Windows by default } String result = Script.getExecutableAbsolutePath("ls"); - Assert.assertTrue(List.of("/usr/bin/ls", "/bin/ls").contains(result)); + Assert.assertTrue(List.of("/usr/bin/ls", "/bin/ls").contains(result)); // Check that the ls command exists in the expected locations } } diff --git a/utils/src/test/java/org/apache/cloudstack/utils/process/ProcessTest.java b/utils/src/test/java/org/apache/cloudstack/utils/process/ProcessTest.java index b63e8676c0af..cb7d33996d6f 100644 --- a/utils/src/test/java/org/apache/cloudstack/utils/process/ProcessTest.java +++ b/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); Assert.assertTrue(result.getStdError().length() > 0); - Assert.assertEquals(result.getStdError(), "Operation timed out, aborted."); + // Ensure the actual error message is captured + Assert.assertTrue(result.getStdError().contains("Operation timed out, aborted")); } @Test @@ -62,6 +65,7 @@ public void testProcessRunnerWithTimeoutAndException() { @Test(expected = IllegalArgumentException.class) public void testProcessRunnerWithMoreThanMaxAllowedTimeout() { + // Ensure we throw the expected exception when the timeout exceeds the maximum allowed RUNNER.executeCommands(Arrays.asList("ls", "/some/dir/that/should/not/exist"), ProcessRunner.DEFAULT_MAX_TIMEOUT.plus(1000)); Assert.fail("Illegal argument exception was expected"); } diff --git a/utils/src/test/java/org/apache/cloudstack/utils/security/CertUtilsTest.java b/utils/src/test/java/org/apache/cloudstack/utils/security/CertUtilsTest.java index 691e7ea0f23f..8b9b6eebe312 100644 --- a/utils/src/test/java/org/apache/cloudstack/utils/security/CertUtilsTest.java +++ b/utils/src/test/java/org/apache/cloudstack/utils/security/CertUtilsTest.java @@ -17,7 +17,7 @@ // under the License. // -package org.apache.cloudstack.utils.security; +package org.apache.cloudstack.utils.security; // Add the correct package statement import java.security.KeyPair; import java.security.PrivateKey; @@ -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); } @@ -54,6 +55,7 @@ public void testCertificateConversionMethods() throws Exception { final X509Certificate in = caCertificate; final String pem = CertUtils.x509CertificateToPem(in); final X509Certificate out = CertUtils.pemToX509Certificate(pem); + Assert.assertTrue(pem.startsWith("-----BEGIN CERTIFICATE-----\n")); Assert.assertTrue(pem.endsWith("-----END CERTIFICATE-----\n")); Assert.assertEquals(in.getSerialNumber(), out.getSerialNumber()); @@ -114,5 +116,4 @@ public void testGenerateCertificate() throws Exception { } } } - }