You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2016/11/25 07:59:40 UTC
[4/6] git commit: updated refs/heads/master to 62c8496
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8d4dc812/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java
index 1ddc106..26e36b4 100644
--- a/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java
+++ b/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java
@@ -20,8 +20,10 @@
package com.cloud.util;
import com.cloud.NuageTest;
+import com.cloud.dc.VlanDetailsVO;
import com.cloud.dc.VlanVO;
import com.cloud.dc.dao.VlanDao;
+import com.cloud.dc.dao.VlanDetailsDao;
import com.cloud.domain.DomainVO;
import com.cloud.domain.dao.DomainDao;
import com.cloud.network.Network;
@@ -58,6 +60,8 @@ import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -77,6 +81,7 @@ public class NuageVspEntityBuilderTest extends NuageTest {
private NetworkOfferingDao _networkOfferingDao = mock(NetworkOfferingDao.class);
private NetworkOfferingServiceMapDao _networkOfferingServiceMapDao = mock(NetworkOfferingServiceMapDao.class);
private VlanDao _vlanDao = mock(VlanDao.class);
+ private VlanDetailsDao _vlanDetailsDao = mock(VlanDetailsDao.class);
private IPAddressDao _ipAddressDao = mock(IPAddressDao.class);
private NetworkDetailsDao _networkDetailsDao = mock(NetworkDetailsDao.class);
private NuageVspEntityBuilder _nuageVspEntityBuilder = new NuageVspEntityBuilder();
@@ -87,6 +92,7 @@ public class NuageVspEntityBuilderTest extends NuageTest {
private NetworkOfferingVO _mockedSharedNetworkOffering = mock(NetworkOfferingVO.class);
private NetworkOfferingVO _mockedL2NetworkOffering = mock(NetworkOfferingVO.class);
private VlanVO _mockedVlan = mock(VlanVO.class);
+ private VlanDetailsVO _mockedVlanDetail = mock(VlanDetailsVO.class);
private VpcVO _mockedVpc = mock(VpcVO.class);
private NetworkVO _mockedNetwork = mock(NetworkVO.class);
private NetworkVO _mockedVpcNetwork = mock(NetworkVO.class);
@@ -111,6 +117,7 @@ public class NuageVspEntityBuilderTest extends NuageTest {
_nuageVspEntityBuilder._networkOfferingDao = _networkOfferingDao;
_nuageVspEntityBuilder._networkOfferingServiceMapDao = _networkOfferingServiceMapDao;
_nuageVspEntityBuilder._vlanDao = _vlanDao;
+ _nuageVspEntityBuilder._vlanDetailsDao = _vlanDetailsDao;
_nuageVspEntityBuilder._configurationDao = _configurationDao;
_nuageVspEntityBuilder._ipAddressDao = _ipAddressDao;
_nuageVspEntityBuilder._networkModel = _networkModel;
@@ -122,6 +129,7 @@ public class NuageVspEntityBuilderTest extends NuageTest {
setUpMockedNetworkOffering(_mockedSharedNetworkOffering, Network.GuestType.Shared);
setUpMockedNetworkOffering(_mockedL2NetworkOffering, Network.GuestType.Isolated);
setUpMockedVlan();
+ setUpMockedVlanDetail();
setUpMockedVpc();
setUpMockedNetwork(_mockedNetwork, NETWORK_OFFERING_ID, null);
setUpMockedNetwork(_mockedVpcNetwork, NETWORK_OFFERING_ID, VPC_ID);
@@ -319,6 +327,10 @@ public class NuageVspEntityBuilderTest extends NuageTest {
when(_mockedVlan.getIpRange()).thenReturn("192.168.2.2-192.168.2.200");
}
+ private void setUpMockedVlanDetail() {
+ when(_mockedVlanDetail.getValue()).thenReturn("true");
+ }
+
private void setUpMockedVpc() {
when(_mockedVpc.getUuid()).thenReturn("vpcUuid");
when(_mockedVpc.getName()).thenReturn("vpcName");
@@ -406,6 +418,7 @@ public class NuageVspEntityBuilderTest extends NuageTest {
when(_networkModel.areServicesSupportedByNetworkOffering(SHARED_NETWORK_OFFERING_ID, Network.Service.Firewall)).thenReturn(true);
when(_networkModel.areServicesSupportedByNetworkOffering(L2_NETWORK_OFFERING_ID, Network.Service.Firewall)).thenReturn(true);
when(_vlanDao.listVlansByNetworkId(NETWORK_ID)).thenReturn(Lists.newArrayList(_mockedVlan));
+ when(_vlanDetailsDao.findDetail(anyLong(), anyString())).thenReturn(_mockedVlanDetail);
when(_vpcDao.findById(VPC_ID)).thenReturn(_mockedVpc);
when(_ipAddressDao.findById(SOURCE_IP_ADDRESS_ID)).thenReturn(_mockedStaticNatIp);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8d4dc812/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 1b4b88f..e661a9b 100644
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -634,83 +634,92 @@ public class ApiResponseHelper implements ResponseGenerator {
@Override
public VlanIpRangeResponse createVlanIpRangeResponse(Vlan vlan) {
- Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId());
+ return createVlanIpRangeResponse(VlanIpRangeResponse.class, vlan);
+ }
- VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse();
- vlanResponse.setId(vlan.getUuid());
- if (vlan.getVlanType() != null) {
- vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork));
- }
- vlanResponse.setVlan(vlan.getVlanTag());
- DataCenter zone = ApiDBUtils.findZoneById(vlan.getDataCenterId());
- if (zone != null) {
- vlanResponse.setZoneId(zone.getUuid());
- }
+ @Override
+ public VlanIpRangeResponse createVlanIpRangeResponse(Class<? extends VlanIpRangeResponse> subClass, Vlan vlan) {
+ try {
+ Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId());
- if (podId != null) {
- HostPodVO pod = ApiDBUtils.findPodById(podId);
- if (pod != null) {
- vlanResponse.setPodId(pod.getUuid());
- vlanResponse.setPodName(pod.getName());
+ VlanIpRangeResponse vlanResponse = subClass.newInstance();
+ vlanResponse.setId(vlan.getUuid());
+ if (vlan.getVlanType() != null) {
+ vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork));
+ }
+ vlanResponse.setVlan(vlan.getVlanTag());
+ DataCenter zone = ApiDBUtils.findZoneById(vlan.getDataCenterId());
+ if (zone != null) {
+ vlanResponse.setZoneId(zone.getUuid());
}
- }
- vlanResponse.setGateway(vlan.getVlanGateway());
- vlanResponse.setNetmask(vlan.getVlanNetmask());
+ if (podId != null) {
+ HostPodVO pod = ApiDBUtils.findPodById(podId);
+ if (pod != null) {
+ vlanResponse.setPodId(pod.getUuid());
+ vlanResponse.setPodName(pod.getName());
+ }
+ }
- // get start ip and end ip of corresponding vlan
- String ipRange = vlan.getIpRange();
- if (ipRange != null) {
- String[] range = ipRange.split("-");
- vlanResponse.setStartIp(range[0]);
- vlanResponse.setEndIp(range[1]);
- }
+ vlanResponse.setGateway(vlan.getVlanGateway());
+ vlanResponse.setNetmask(vlan.getVlanNetmask());
- vlanResponse.setIp6Gateway(vlan.getIp6Gateway());
- vlanResponse.setIp6Cidr(vlan.getIp6Cidr());
+ // get start ip and end ip of corresponding vlan
+ String ipRange = vlan.getIpRange();
+ if (ipRange != null) {
+ String[] range = ipRange.split("-");
+ vlanResponse.setStartIp(range[0]);
+ vlanResponse.setEndIp(range[1]);
+ }
- String ip6Range = vlan.getIp6Range();
- if (ip6Range != null) {
- String[] range = ip6Range.split("-");
- vlanResponse.setStartIpv6(range[0]);
- vlanResponse.setEndIpv6(range[1]);
- }
+ vlanResponse.setIp6Gateway(vlan.getIp6Gateway());
+ vlanResponse.setIp6Cidr(vlan.getIp6Cidr());
- if (vlan.getNetworkId() != null) {
- Network nw = ApiDBUtils.findNetworkById(vlan.getNetworkId());
- if (nw != null) {
- vlanResponse.setNetworkId(nw.getUuid());
+ String ip6Range = vlan.getIp6Range();
+ if (ip6Range != null) {
+ String[] range = ip6Range.split("-");
+ vlanResponse.setStartIpv6(range[0]);
+ vlanResponse.setEndIpv6(range[1]);
}
- }
- Account owner = ApiDBUtils.getVlanAccount(vlan.getId());
- if (owner != null) {
- populateAccount(vlanResponse, owner.getId());
- populateDomain(vlanResponse, owner.getDomainId());
- } else {
- Domain domain = ApiDBUtils.getVlanDomain(vlan.getId());
- if (domain != null) {
- populateDomain(vlanResponse, domain.getId());
+
+ if (vlan.getNetworkId() != null) {
+ Network nw = ApiDBUtils.findNetworkById(vlan.getNetworkId());
+ if (nw != null) {
+ vlanResponse.setNetworkId(nw.getUuid());
+ }
+ }
+ Account owner = ApiDBUtils.getVlanAccount(vlan.getId());
+ if (owner != null) {
+ populateAccount(vlanResponse, owner.getId());
+ populateDomain(vlanResponse, owner.getDomainId());
} else {
- Long networkId = vlan.getNetworkId();
- if (networkId != null) {
- Network network = _ntwkModel.getNetwork(networkId);
- if (network != null) {
- Long accountId = network.getAccountId();
- populateAccount(vlanResponse, accountId);
- populateDomain(vlanResponse, ApiDBUtils.findAccountById(accountId).getDomainId());
+ Domain domain = ApiDBUtils.getVlanDomain(vlan.getId());
+ if (domain != null) {
+ populateDomain(vlanResponse, domain.getId());
+ } else {
+ Long networkId = vlan.getNetworkId();
+ if (networkId != null) {
+ Network network = _ntwkModel.getNetwork(networkId);
+ if (network != null) {
+ Long accountId = network.getAccountId();
+ populateAccount(vlanResponse, accountId);
+ populateDomain(vlanResponse, ApiDBUtils.findAccountById(accountId).getDomainId());
+ }
}
}
}
- }
- if (vlan.getPhysicalNetworkId() != null) {
- PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(vlan.getPhysicalNetworkId());
- if (pnw != null) {
- vlanResponse.setPhysicalNetworkId(pnw.getUuid());
+ if (vlan.getPhysicalNetworkId() != null) {
+ PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(vlan.getPhysicalNetworkId());
+ if (pnw != null) {
+ vlanResponse.setPhysicalNetworkId(pnw.getUuid());
+ }
}
+ vlanResponse.setObjectName("vlan");
+ return vlanResponse;
+ } catch (InstantiationException | IllegalAccessException e) {
+ throw new CloudRuntimeException("Failed to create Vlan IP Range response", e);
}
- vlanResponse.setObjectName("vlan");
- return vlanResponse;
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8d4dc812/setup/db/db/schema-4910to41000.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-4910to41000.sql b/setup/db/db/schema-4910to41000.sql
index 19226b0..127d7f8 100644
--- a/setup/db/db/schema-4910to41000.sql
+++ b/setup/db/db/schema-4910to41000.sql
@@ -35,4 +35,14 @@ INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid, hypervisor_type, hypervi
INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid, hypervisor_type, hypervisor_version, guest_os_name, guest_os_id, created) VALUES (UUID(), 'KVM', 'default', 'Windows 10', 257, now());
INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid, hypervisor_type, hypervisor_version, guest_os_name, guest_os_id, created) VALUES (UUID(), 'KVM', 'default', 'Windows 10', 258, now());
-INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid, hypervisor_type, hypervisor_version, guest_os_name, guest_os_id, created) VALUES (UUID(), 'KVM', 'default', 'Windows Server 2012', 259, now());
\ No newline at end of file
+INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid, hypervisor_type, hypervisor_version, guest_os_name, guest_os_id, created) VALUES (UUID(), 'KVM', 'default', 'Windows Server 2012', 259, now());
+
+CREATE TABLE `cloud`.`vlan_details` (
+ `id` bigint unsigned NOT NULL auto_increment,
+ `vlan_id` bigint unsigned NOT NULL COMMENT 'vlan id',
+ `name` varchar(255) NOT NULL,
+ `value` varchar(1024) NOT NULL,
+ `display` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Should detail be displayed to the end user',
+ PRIMARY KEY (`id`),
+ CONSTRAINT `fk_vlan_details__vlan_id` FOREIGN KEY `fk_vlan_details__vlan_id`(`vlan_id`) REFERENCES `vlan`(`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8d4dc812/test/integration/plugins/nuagevsp/nuageTestCase.py
----------------------------------------------------------------------
diff --git a/test/integration/plugins/nuagevsp/nuageTestCase.py b/test/integration/plugins/nuagevsp/nuageTestCase.py
index 5c1daab..530dced 100644
--- a/test/integration/plugins/nuagevsp/nuageTestCase.py
+++ b/test/integration/plugins/nuagevsp/nuageTestCase.py
@@ -40,7 +40,7 @@ from marvin.lib.base import (EgressFireWallRule,
from marvin.lib.common import (get_domain,
get_template,
get_zone)
-from marvin.cloudstackAPI import restartVPC
+from marvin.cloudstackAPI import restartVPC, listNuageUnderlayVlanIpRanges
# Import System Modules
import importlib
import functools
@@ -139,7 +139,7 @@ class nuageTestCase(cloudstackTestCase):
cls.api_client,
physicalnetworkid=cls.vsp_physical_network.id)[0]
- # Take username and password from the datacenter config file,
+ # Get username and password from the Marvin config file,
# as they are not returned by the API.
config_nuage_device = next(device for zone in cls.config.zones
if zone.name == cls.zone.name
@@ -156,6 +156,36 @@ class nuageTestCase(cloudstackTestCase):
cls.tearDownClass()
raise unittest.SkipTest("Warning: Could not get configured "
"Nuage VSP device details - %s" % e)
+
+ # Get data center Internet connectivity information from the Marvin
+ # config file, which is required to perform Internet connectivity and
+ # traffic tests from the guest VMs.
+ cls.isInternetConnectivityAvailable = False
+ cls.http_proxy = None
+ cls.https_proxy = None
+ dc_internet_conn_info = cls.config.dcInternetConnectivityInfo if \
+ cls.config.dcInternetConnectivityInfo else None
+ if dc_internet_conn_info:
+ dc_internet_conn_available = dc_internet_conn_info.available if \
+ dc_internet_conn_info.available else None
+ if dc_internet_conn_available:
+ cls.isInternetConnectivityAvailable = True if \
+ dc_internet_conn_available == "true" else False
+ dc_internet_conn_http_proxy = dc_internet_conn_info.httpProxy if \
+ dc_internet_conn_info.httpProxy else None
+ if dc_internet_conn_http_proxy:
+ cls.http_proxy = dc_internet_conn_http_proxy
+ dc_internet_conn_https_proxy = dc_internet_conn_info.httpsProxy \
+ if dc_internet_conn_info.httpsProxy else None
+ if dc_internet_conn_https_proxy:
+ cls.https_proxy = dc_internet_conn_https_proxy
+
+ # Check if the configured Nuage VSP SDN platform infrastructure
+ # supports underlay networking
+ cmd = listNuageUnderlayVlanIpRanges.listNuageUnderlayVlanIpRangesCmd()
+ cmd.underlay = True
+ cls.isNuageInfraUnderlay = isinstance(
+ cls.api_client.listNuageUnderlayVlanIpRanges(cmd), list)
return
@classmethod
@@ -596,8 +626,11 @@ class nuageTestCase(cloudstackTestCase):
# wget_from_server - Fetches file with the given file name from a web
# server listening on the given public IP address and port
- def wget_from_server(self, public_ip, port, file_name="index.html"):
+ def wget_from_server(self, public_ip, port=80, file_name="index.html",
+ disable_system_proxies=True):
import urllib
+ if disable_system_proxies:
+ urllib.getproxies = lambda: {}
self.debug("wget file - %s from a http web server listening on "
"public IP address - %s and port - %s" %
(file_name, public_ip.ipaddress.ipaddress, port))
@@ -606,6 +639,9 @@ class nuageTestCase(cloudstackTestCase):
(public_ip.ipaddress.ipaddress, port, file_name),
filename=file_name
)
+ self.debug("Successful to wget file - %s from a http web server "
+ "listening on public IP address - %s and port - %s" %
+ (file_name, public_ip.ipaddress.ipaddress, port))
return filename, headers
# validate_NetworkServiceProvider - Validates the given Network Service
@@ -971,6 +1007,20 @@ class nuageTestCase(cloudstackTestCase):
self.assertEqual(vsd_fip.assigned, True,
"Floating IP in VSD should be assigned"
)
+ ext_fip_subnet_filter = self.get_externalID_filter(
+ public_ipaddress.vlanid)
+ vsd_fip_subnet = self.vsd.get_shared_network_resource(
+ filter=ext_fip_subnet_filter)
+ if self.isNuageInfraUnderlay:
+ self.assertEqual(vsd_fip_subnet.underlay, True,
+ "Floating IP subnet in VSD should be underlay "
+ "enabled"
+ )
+ else:
+ self.assertEqual(vsd_fip_subnet.underlay, False,
+ "Floating IP subnet in VSD should be underlay "
+ "disabled"
+ )
ext_network_filter = self.get_externalID_filter(vpc.id) if vpc \
else self.get_externalID_filter(network.id)
vsd_domain = self.vsd.get_domain(filter=ext_network_filter)