Issue 383: added new network features needed for terremark ecloud, so that default vdc will operate

This commit is contained in:
Adrian Cole 2010-11-01 01:24:27 -07:00
parent 1eda57537b
commit d908600e8a
21 changed files with 881 additions and 61 deletions

View File

@ -42,15 +42,15 @@ public class VCloudExpressNetworkImpl extends ReferenceTypeImpl implements VClou
/** The serialVersionUID */ /** The serialVersionUID */
private static final long serialVersionUID = 8464716396538298809L; private static final long serialVersionUID = 8464716396538298809L;
private final String description; protected final String description;
private final Set<String> dnsServers = Sets.newHashSet(); protected final Set<String> dnsServers = Sets.newHashSet();
private final String gateway; protected final String gateway;
private final String netmask; protected final String netmask;
private final Set<FenceMode> fenceModes = Sets.newHashSet(); protected final Set<FenceMode> fenceModes = Sets.newHashSet();
@Nullable @Nullable
private final Boolean dhcp; protected final Boolean dhcp;
private final Set<PortForwardingRule> natRules = Sets.newHashSet(); protected final Set<PortForwardingRule> natRules = Sets.newHashSet();
private final Set<FirewallRule> firewallRules = Sets.newHashSet(); protected final Set<FirewallRule> firewallRules = Sets.newHashSet();
public VCloudExpressNetworkImpl(String name, String type, URI id, String description, Set<String> dnsServers, public VCloudExpressNetworkImpl(String name, String type, URI id, String description, Set<String> dnsServers,
String gateway, String netmask, Set<FenceMode> fenceModes, Boolean dhcp, Set<PortForwardingRule> natRules, String gateway, String netmask, Set<FenceMode> fenceModes, Boolean dhcp, Set<PortForwardingRule> natRules,
@ -196,10 +196,9 @@ public class VCloudExpressNetworkImpl extends ReferenceTypeImpl implements VClou
@Override @Override
public String toString() { public String toString() {
return "NetworkImpl [id=" + getHref() + ", name=" + getName() + ", type=" + getType() + ", description=" return "[id=" + getHref() + ", name=" + getName() + ", type=" + getType() + ", description=" + description
+ description + ", dhcp=" + dhcp + ", dnsServers=" + dnsServers + ", fenceModes=" + fenceModes + ", dhcp=" + dhcp + ", dnsServers=" + dnsServers + ", fenceModes=" + fenceModes + ", firewallRules="
+ ", firewallRules=" + firewallRules + ", gateway=" + gateway + ", natRules=" + natRules + ", netmask=" + firewallRules + ", gateway=" + gateway + ", natRules=" + natRules + ", netmask=" + netmask + "]";
+ netmask + "]";
} }
} }

View File

@ -50,28 +50,28 @@ public class VCloudExpressNetworkHandler extends ParseSax.HandlerWithResult<VClo
@Resource @Resource
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
private StringBuilder currentText = new StringBuilder(); protected StringBuilder currentText = new StringBuilder();
private ReferenceType network; protected ReferenceType network;
private String description; protected String description;
private Set<String> dnsServers = Sets.newLinkedHashSet(); protected Set<String> dnsServers = Sets.newLinkedHashSet();
private String gateway; protected String gateway;
private String netmask; protected String netmask;
private Set<FenceMode> fenceModes = Sets.newLinkedHashSet(); protected Set<FenceMode> fenceModes = Sets.newLinkedHashSet();
private Boolean dhcp; protected Boolean dhcp;
private Set<PortForwardingRule> natRules = Sets.newLinkedHashSet(); protected Set<PortForwardingRule> natRules = Sets.newLinkedHashSet();
private Set<FirewallRule> firewallRules = Sets.newLinkedHashSet(); protected Set<FirewallRule> firewallRules = Sets.newLinkedHashSet();
private String externalIP; protected String externalIP;
private Integer externalPort; protected Integer externalPort;
private String internalIP; protected String internalIP;
private Integer internalPort; protected Integer internalPort;
private FirewallPolicy policy; protected FirewallPolicy policy;
private String sourceIP; protected String sourceIP;
private int sourcePort; protected int sourcePort;
public VCloudExpressNetwork getResult() { public VCloudExpressNetwork getResult() {
return new VCloudExpressNetworkImpl(network.getName(), network.getType(), network.getHref(), description, return new VCloudExpressNetworkImpl(network.getName(), network.getType(), network.getHref(), description,

View File

@ -52,11 +52,13 @@ import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import org.jclouds.rest.internal.RestAnnotationProcessor; import org.jclouds.rest.internal.RestAnnotationProcessor;
import org.jclouds.util.Utils; import org.jclouds.util.Utils;
import org.jclouds.vcloud.config.VCloudRestClientModule; import org.jclouds.vcloud.config.VCloudRestClientModule;
import org.jclouds.vcloud.domain.AllocationModel;
import org.jclouds.vcloud.domain.GuestCustomizationSection; import org.jclouds.vcloud.domain.GuestCustomizationSection;
import org.jclouds.vcloud.domain.Org; import org.jclouds.vcloud.domain.Org;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.VCloudSession; import org.jclouds.vcloud.domain.VCloudSession;
import org.jclouds.vcloud.domain.VDCStatus;
import org.jclouds.vcloud.domain.internal.CatalogImpl; import org.jclouds.vcloud.domain.internal.CatalogImpl;
import org.jclouds.vcloud.domain.internal.CatalogItemImpl; import org.jclouds.vcloud.domain.internal.CatalogItemImpl;
import org.jclouds.vcloud.domain.internal.OrgImpl; import org.jclouds.vcloud.domain.internal.OrgImpl;
@ -86,6 +88,7 @@ import com.google.common.base.Supplier;
import com.google.common.base.Suppliers; import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Module; import com.google.inject.Module;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
@ -350,6 +353,22 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
checkFilters(request); checkFilters(request);
} }
public void testFindNetworkInOrgVDCNamed() throws SecurityException, NoSuchMethodException, IOException {
Method method = VCloudAsyncClient.class.getMethod("findNetworkInOrgVDCNamed", String.class, String.class,
String.class);
HttpRequest request = processor.createRequest(method, "org", "vdc", "network");
assertRequestLineEquals(request, "GET https://vcenterprise.bluelock.com/api/v1.0/vdcItem/2 HTTP/1.1");
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.network+xml\n");
assertPayloadEquals(request, null, null, false);
assertResponseParserClassEquals(method, request, ParseSax.class);
assertSaxResponseParserClassEquals(method, OrgNetworkHandler.class);
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
checkFilters(request);
}
public void testCatalogItemURI() throws SecurityException, NoSuchMethodException, IOException { public void testCatalogItemURI() throws SecurityException, NoSuchMethodException, IOException {
Method method = VCloudAsyncClient.class.getMethod("getCatalogItem", URI.class); Method method = VCloudAsyncClient.class.getMethod("getCatalogItem", URI.class);
HttpRequest request = processor.createRequest(method, URI HttpRequest request = processor.createRequest(method, URI
@ -908,11 +927,11 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
null, null,
URI URI
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), .create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"),
null, VDCStatus.READY,
null, null,
"description", "description",
null, ImmutableSet.<Task> of(),
null, AllocationModel.ALLOCATION_POOL,
null, null,
null, null,
null, null,
@ -930,7 +949,8 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
"application/vnd.vmware.vcloud.vAppTemplate+xml", "application/vnd.vmware.vcloud.vAppTemplate+xml",
URI URI
.create("https://vcenterprise.bluelock.com/api/v1.0/vdcItem/2"))), .create("https://vcenterprise.bluelock.com/api/v1.0/vdcItem/2"))),
null, 0, 0, 0, false)))); ImmutableMap.<String, ReferenceType> of(), 0, 0, 0,
false))));
} }

View File

@ -54,15 +54,15 @@ public class VCloudExpressOrgNetworkAdapterTest {
Factory factory = injector.getInstance(ParseSax.Factory.class); Factory factory = injector.getInstance(ParseSax.Factory.class);
VCloudExpressNetwork in = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is); VCloudExpressNetwork in = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
OrgNetwork result = new VCloudExpressOrgNetworkAdapter(in); OrgNetwork result = new VCloudExpressOrgNetworkAdapter(in);
assertEquals(result.getName(), "10.114.34.128/26"); assertEquals(result.getName(), "10.122.209.128/28");
assertEquals(result.getHref(), URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/network/1708")); assertEquals(result.getHref(), URI.create("https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/network/40031"));
assertEquals(result.getType(), "application/vnd.vmware.vcloud.network+xml"); assertEquals(result.getType(), "application/vnd.vmware.vcloud.network+xml");
assertEquals(result.getOrg(), null); assertEquals(result.getOrg(), null);
assertEquals(result.getDescription(), null); assertEquals(result.getDescription(), null);
assertEquals(result.getTasks(), ImmutableList.of()); assertEquals(result.getTasks(), ImmutableList.of());
assert result.getConfiguration() != null; assert result.getConfiguration() != null;
assertEquals(result.getConfiguration().getIpScope(), new IpScope(true, "10.114.34.129", "255.255.255.192", null, assertEquals(result.getConfiguration().getIpScope(), new IpScope(true, "10.122.209.129", "255.255.255.240", null,
null, null, ImmutableSet.<IpRange> of(), ImmutableSet.<String> of())); null, null, ImmutableSet.<IpRange> of(), ImmutableSet.<String> of()));
assertEquals(result.getConfiguration().getParentNetwork(), null); assertEquals(result.getConfiguration().getParentNetwork(), null);

View File

@ -23,7 +23,6 @@ import static org.testng.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.net.UnknownHostException;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ParseSax.Factory; import org.jclouds.http.functions.ParseSax.Factory;
@ -51,20 +50,20 @@ public class VCloudExpressNetworkHandlerTest {
private Factory factory; private Factory factory;
public void testTerremark() throws UnknownHostException { public void testTerremark() {
InputStream is = getClass().getResourceAsStream("/express/network-terremark.xml"); InputStream is = getClass().getResourceAsStream("/express/network-terremark.xml");
injector = Guice.createInjector(new SaxParserModule()); injector = Guice.createInjector(new SaxParserModule());
factory = injector.getInstance(ParseSax.Factory.class); factory = injector.getInstance(ParseSax.Factory.class);
VCloudExpressNetwork result = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is); VCloudExpressNetwork result = factory.create(injector.getInstance(VCloudExpressNetworkHandler.class)).parse(is);
assertEquals(result, new VCloudExpressNetworkImpl("10.114.34.128/26", assertEquals(result, new VCloudExpressNetworkImpl("10.122.209.128/28",
"application/vnd.vmware.vcloud.network+xml", URI "application/vnd.vmware.vcloud.network+xml", URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/network/1708"), null, .create("https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/network/40031"), null,
ImmutableSet.<String> of(), "10.114.34.129", "255.255.255.192", ImmutableSet ImmutableSet.<String> of(), "10.122.209.129", "255.255.255.240", ImmutableSet
.<FenceMode> of(FenceMode.ISOLATED), null, ImmutableSet.<PortForwardingRule> of(), ImmutableSet .<FenceMode> of(FenceMode.ISOLATED), null, ImmutableSet.<PortForwardingRule> of(), ImmutableSet
.<FirewallRule> of())); .<FirewallRule> of()));
} }
public void testHosting() throws UnknownHostException { public void testHosting() {
InputStream is = getClass().getResourceAsStream("/express/network-hosting.xml"); InputStream is = getClass().getResourceAsStream("/express/network-hosting.xml");
injector = Guice.createInjector(new SaxParserModule()); injector = Guice.createInjector(new SaxParserModule());
factory = injector.getInstance(ParseSax.Factory.class); factory = injector.getInstance(ParseSax.Factory.class);
@ -76,7 +75,7 @@ public class VCloudExpressNetworkHandlerTest {
.<FenceMode> of(), null, ImmutableSet.<PortForwardingRule> of(), ImmutableSet.<FirewallRule> of())); .<FenceMode> of(), null, ImmutableSet.<PortForwardingRule> of(), ImmutableSet.<FirewallRule> of()));
} }
public void testBluelock() throws UnknownHostException { public void testBluelock() {
InputStream is = getClass().getResourceAsStream("/express/network-bluelock.xml"); InputStream is = getClass().getResourceAsStream("/express/network-bluelock.xml");
injector = Guice.createInjector(new SaxParserModule()); injector = Guice.createInjector(new SaxParserModule());
factory = injector.getInstance(ParseSax.Factory.class); factory = injector.getInstance(ParseSax.Factory.class);

View File

@ -1,10 +1,12 @@
<Network href="https://services.vcloudexpress.terremark.com/api/v0.8/network/1708" type="application/vnd.vmware.vcloud.network+xml" name="10.114.34.128/26" xmlns="http://www.vmware.com/vcloud/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Network href="https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/network/40031" type="application/vnd.vmware.vcloud.network+xml" name="10.122.209.128/28" xmlns="http://www.vmware.com/vcloud/v0.8"
<Link rel="down" href="https://services.vcloudexpress.terremark.com/api/v0.8/network/1708/ipAddresses" type="application/xml" name="IP Addresses"/> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Link rel="down" href="https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/extensions/network/40031" type="application/xml" name="10.122.209.128/28"/>
<Link rel="down" href="https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/extensions/network/40031/ips" type="application/xml" name="IP Addresses"/>
<Configuration> <Configuration>
<Gateway>10.114.34.129</Gateway> <Gateway>10.122.209.129</Gateway>
<Netmask>255.255.255.192</Netmask> <Netmask>255.255.255.240</Netmask>
</Configuration> </Configuration>
<Features> <Features>
<FenceMode>isolated</FenceMode> <FenceMode>isolated</FenceMode>
</Features> </Features>
</Network> </Network>

View File

@ -20,6 +20,7 @@
package org.jclouds.vcloud.terremark; package org.jclouds.vcloud.terremark;
import static javax.ws.rs.core.MediaType.APPLICATION_XML; import static javax.ws.rs.core.MediaType.APPLICATION_XML;
import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.INTERNETSERVICESLIST_XML; import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.INTERNETSERVICESLIST_XML;
import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.INTERNETSERVICE_XML; import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.INTERNETSERVICE_XML;
import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.KEYSLIST_XML; import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.KEYSLIST_XML;
@ -45,12 +46,16 @@ import org.jclouds.rest.annotations.XMLResponseParser;
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404; import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
import org.jclouds.vcloud.VCloudClient;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie; import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
import org.jclouds.vcloud.terremark.binders.BindCreateKeyToXmlPayload; import org.jclouds.vcloud.terremark.binders.BindCreateKeyToXmlPayload;
import org.jclouds.vcloud.terremark.domain.InternetService; import org.jclouds.vcloud.terremark.domain.InternetService;
import org.jclouds.vcloud.terremark.domain.KeyPair; import org.jclouds.vcloud.terremark.domain.KeyPair;
import org.jclouds.vcloud.terremark.domain.Protocol; import org.jclouds.vcloud.terremark.domain.Protocol;
import org.jclouds.vcloud.terremark.domain.PublicIpAddress; import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
import org.jclouds.vcloud.terremark.domain.TerremarkNetwork;
import org.jclouds.vcloud.terremark.domain.TerremarkOrgNetwork;
import org.jclouds.vcloud.terremark.functions.OrgURIToKeysListEndpoint; import org.jclouds.vcloud.terremark.functions.OrgURIToKeysListEndpoint;
import org.jclouds.vcloud.terremark.functions.VDCURIToInternetServicesEndpoint; import org.jclouds.vcloud.terremark.functions.VDCURIToInternetServicesEndpoint;
import org.jclouds.vcloud.terremark.functions.VDCURIToPublicIPsEndpoint; import org.jclouds.vcloud.terremark.functions.VDCURIToPublicIPsEndpoint;
@ -61,6 +66,8 @@ import org.jclouds.vcloud.terremark.xml.KeyPairByNameHandler;
import org.jclouds.vcloud.terremark.xml.KeyPairHandler; import org.jclouds.vcloud.terremark.xml.KeyPairHandler;
import org.jclouds.vcloud.terremark.xml.KeyPairsHandler; import org.jclouds.vcloud.terremark.xml.KeyPairsHandler;
import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler; import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
import org.jclouds.vcloud.terremark.xml.TerremarkNetworkHandler;
import org.jclouds.vcloud.terremark.xml.TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -156,7 +163,7 @@ public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
@Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org); @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org);
/** /**
* @see TerremarkVCloudExpressClient#listKeyPairs * @see TerremarkECloudClient#listKeyPairs
*/ */
@GET @GET
@Path("") @Path("")
@ -166,7 +173,7 @@ public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
ListenableFuture<? extends Set<KeyPair>> listKeyPairs(@EndpointParam URI keysList); ListenableFuture<? extends Set<KeyPair>> listKeyPairs(@EndpointParam URI keysList);
/** /**
* @see TerremarkVCloudExpressClient#generateKeyPairInOrg * @see TerremarkECloudClient#generateKeyPairInOrg
*/ */
@POST @POST
@Path("") @Path("")
@ -179,7 +186,7 @@ public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
@MapPayloadParam("isDefault") boolean makeDefault); @MapPayloadParam("isDefault") boolean makeDefault);
/** /**
* @see TerremarkVCloudExpressClient#getKeyPair * @see TerremarkECloudClient#getKeyPair
*/ */
@GET @GET
@Path("") @Path("")
@ -204,10 +211,45 @@ public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
// KeyPairConfiguration keyConfiguration); // KeyPairConfiguration keyConfiguration);
/** /**
* @see TerremarkVCloudExpressClient#deleteKeyPair * @see TerremarkECloudClient#deleteKeyPair
*/ */
@DELETE @DELETE
@Path("") @Path("")
@ExceptionParser(ReturnVoidOnNotFoundOr404.class) @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
ListenableFuture<Void> deleteKeyPair(@EndpointParam URI keyId); ListenableFuture<Void> deleteKeyPair(@EndpointParam URI keyId);
/**
* @see TerremarkECloudClient#findNetworkInOrgVDCNamed
*/
@Override
@GET
@Path("")
@Consumes(NETWORK_XML)
@XMLResponseParser(TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<? extends TerremarkOrgNetwork> findNetworkInOrgVDCNamed(
@Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
@Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
@EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
/**
* @see TerremarkECloudClient#getNetwork
*/
@Override
@GET
@Path("")
@Consumes(NETWORK_XML)
@XMLResponseParser(TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<? extends TerremarkOrgNetwork> getNetwork(@EndpointParam URI network);
/**
* @see TerremarkECloudClient#getTerremarkNetwork
*/
@GET
@Path("")
@XMLResponseParser(TerremarkNetworkHandler.class)
@Consumes(APPLICATION_XML)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<? extends TerremarkNetwork> getTerremarkNetwork(@EndpointParam URI network);
} }

View File

@ -22,16 +22,18 @@ package org.jclouds.vcloud.terremark;
import java.net.URI; import java.net.URI;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import org.jclouds.concurrent.Timeout; import org.jclouds.concurrent.Timeout;
import org.jclouds.vcloud.terremark.domain.PublicIpAddress; import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
import org.jclouds.vcloud.terremark.domain.TerremarkNetwork;
import org.jclouds.vcloud.terremark.domain.TerremarkOrgNetwork;
/** /**
* Provides access to VCloud resources via their REST API. * Provides access to VCloud resources via their REST API.
* <p/> * <p/>
* *
* @see <a href= * @see <a href= "http://support.theenterprisecloud.com/kb/default.asp?id=645&Lang=1&SID=" />
* "http://support.theenterprisecloud.com/kb/default.asp?id=645&Lang=1&SID="
* />
* @author Adrian Cole * @author Adrian Cole
*/ */
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS) @Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
@ -44,4 +46,11 @@ public interface TerremarkECloudClient extends TerremarkVCloudClient {
* @return * @return
*/ */
PublicIpAddress activatePublicIpInVDC(URI vDCId); PublicIpAddress activatePublicIpInVDC(URI vDCId);
TerremarkOrgNetwork findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String vdc, String networkName);
TerremarkOrgNetwork getNetwork(URI network);
TerremarkNetwork getTerremarkNetwork(URI network);
} }

View File

@ -214,8 +214,12 @@ public class TerremarkVCloudComputeClient extends VCloudExpressComputeClientImpl
Set<InternetService> services = client.getInternetServicesOnPublicIp(address.getId()); Set<InternetService> services = client.getInternetServicesOnPublicIp(address.getId());
if (services.size() == 0) { if (services.size() == 0) {
logger.debug(">> deleting PublicIpAddress(%s) %s", address.getId(), address.getAddress()); logger.debug(">> deleting PublicIpAddress(%s) %s", address.getId(), address.getAddress());
client.deletePublicIp(address.getId()); try {
logger.debug("<< deleted PublicIpAddress(%s)", address.getId()); client.deletePublicIp(address.getId());
logger.debug("<< deleted PublicIpAddress(%s)", address.getId());
} catch (UnsupportedOperationException e) {
logger.trace("cannot delete PublicIpAddress(%s) as it is unsupported", address.getId());
}
continue IPADDRESS; continue IPADDRESS;
} }
} }

View File

@ -19,6 +19,8 @@
package org.jclouds.vcloud.terremark.config; package org.jclouds.vcloud.terremark.config;
import static com.google.common.base.Preconditions.checkNotNull;
import java.net.URI; import java.net.URI;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@ -31,11 +33,12 @@ import org.jclouds.rest.ResourceNotFoundException;
import org.jclouds.vcloud.VCloudExpressAsyncClient; import org.jclouds.vcloud.VCloudExpressAsyncClient;
import org.jclouds.vcloud.VCloudExpressClient; import org.jclouds.vcloud.VCloudExpressClient;
import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.network.OrgNetwork;
import org.jclouds.vcloud.terremark.TerremarkECloudAsyncClient; import org.jclouds.vcloud.terremark.TerremarkECloudAsyncClient;
import org.jclouds.vcloud.terremark.TerremarkECloudClient; import org.jclouds.vcloud.terremark.TerremarkECloudClient;
import org.jclouds.vcloud.terremark.TerremarkVCloudAsyncClient; import org.jclouds.vcloud.terremark.TerremarkVCloudAsyncClient;
import org.jclouds.vcloud.terremark.TerremarkVCloudClient; import org.jclouds.vcloud.terremark.TerremarkVCloudClient;
import org.jclouds.vcloud.terremark.domain.TerremarkNetwork;
import org.jclouds.vcloud.terremark.domain.TerremarkOrgNetwork;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
@ -97,9 +100,14 @@ public class TerremarkECloudRestClientModule extends
@Override @Override
public boolean apply(ReferenceType input) { public boolean apply(ReferenceType input) {
OrgNetwork network = injector.getInstance(TerremarkECloudClient.class).getNetwork(input.getHref()); TerremarkOrgNetwork network = injector.getInstance(TerremarkECloudClient.class).getNetwork(
// TODO: get extension data on this network and check NetworkType == DMZ input.getHref());
return network.getDescription() != null &&network.getDescription().toLowerCase().contains("dmz"); TerremarkNetwork terremarkNetwork = injector.getInstance(TerremarkECloudClient.class)
.getTerremarkNetwork(
checkNotNull(checkNotNull(network, "network at: " + input).getNetworkExtension(),
"network extension for: " + input).getHref());
return checkNotNull(terremarkNetwork, "terremark network extension at: " + network.getNetworkExtension())
.getNetworkType() == TerremarkNetwork.Type.DMZ;
} }
}).getHref(); }).getHref();

View File

@ -0,0 +1,196 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.net.URI;
/**
* @author Adrian Cole
*/
public class TerremarkNetwork implements Comparable<TerremarkNetwork> {
public enum Type {
INTERNAL, DMZ, UNRECOGNIZED;
public static Type fromValue(String type) {
try {
return valueOf(checkNotNull(type, "type").toUpperCase());
} catch (IllegalArgumentException e) {
return UNRECOGNIZED;
}
}
}
private final String id;
private final URI href;
private final String name;
private final String rnatAddress;
private final String address;
private final String broadcastAddress;
private final String gatewayAddress;
private final Type networkType;
private final String vlan;
private final String friendlyName;
public TerremarkNetwork(String id, URI href, String name, String rnatAddress, String address,
String broadcastAddress, String gatewayAddress, Type networkType, String vlan, String friendlyName) {
this.id = id;
this.href = href;
this.name = name;
this.rnatAddress = rnatAddress;
this.address = address;
this.broadcastAddress = broadcastAddress;
this.gatewayAddress = gatewayAddress;
this.networkType = networkType;
this.vlan = vlan;
this.friendlyName = friendlyName;
}
public int compareTo(TerremarkNetwork that) {
return (this == that) ? 0 : getHref().compareTo(that.getHref());
}
public String getId() {
return id;
}
public URI getHref() {
return href;
}
public String getName() {
return name;
}
public String getRnatAddress() {
return rnatAddress;
}
public String getAddress() {
return address;
}
public String getBroadcastAddress() {
return broadcastAddress;
}
public String getGatewayAddress() {
return gatewayAddress;
}
public Type getNetworkType() {
return networkType;
}
public String getVlan() {
return vlan;
}
public String getFriendlyName() {
return friendlyName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + ((broadcastAddress == null) ? 0 : broadcastAddress.hashCode());
result = prime * result + ((friendlyName == null) ? 0 : friendlyName.hashCode());
result = prime * result + ((gatewayAddress == null) ? 0 : gatewayAddress.hashCode());
result = prime * result + ((href == null) ? 0 : href.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((networkType == null) ? 0 : networkType.hashCode());
result = prime * result + ((rnatAddress == null) ? 0 : rnatAddress.hashCode());
result = prime * result + ((vlan == null) ? 0 : vlan.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TerremarkNetwork other = (TerremarkNetwork) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (broadcastAddress == null) {
if (other.broadcastAddress != null)
return false;
} else if (!broadcastAddress.equals(other.broadcastAddress))
return false;
if (friendlyName == null) {
if (other.friendlyName != null)
return false;
} else if (!friendlyName.equals(other.friendlyName))
return false;
if (gatewayAddress == null) {
if (other.gatewayAddress != null)
return false;
} else if (!gatewayAddress.equals(other.gatewayAddress))
return false;
if (href == null) {
if (other.href != null)
return false;
} else if (!href.equals(other.href))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (networkType == null) {
if (other.networkType != null)
return false;
} else if (!networkType.equals(other.networkType))
return false;
if (rnatAddress == null) {
if (other.rnatAddress != null)
return false;
} else if (!rnatAddress.equals(other.rnatAddress))
return false;
if (vlan == null) {
if (other.vlan != null)
return false;
} else if (!vlan.equals(other.vlan))
return false;
return true;
}
@Override
public String toString() {
return "[address=" + address + ", broadcastAddress=" + broadcastAddress + ", friendlyName=" + friendlyName
+ ", gatewayAddress=" + gatewayAddress + ", href=" + href + ", id=" + id + ", name=" + name
+ ", networkType=" + networkType + ", rnatAddress=" + rnatAddress + ", vlan=" + vlan + "]";
}
}

View File

@ -0,0 +1,46 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.domain;
import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.network.internal.VCloudExpressOrgNetworkAdapter;
import org.jclouds.vcloud.terremark.domain.internal.TerremarkVCloudExpressNetwork;
/**
*
* @author Adrian Cole
*/
public class TerremarkOrgNetwork extends VCloudExpressOrgNetworkAdapter {
private final TerremarkVCloudExpressNetwork delegate;
public TerremarkOrgNetwork(TerremarkVCloudExpressNetwork in) {
super(in);
this.delegate = in;
}
public ReferenceType getNetworkExtension() {
return delegate.getNetworkExtension();
}
public ReferenceType getIps() {
return delegate.getIps();
}
}

View File

@ -0,0 +1,95 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.domain.internal;
import java.net.URI;
import java.util.Set;
import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.domain.network.FenceMode;
import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
import org.jclouds.vcloud.domain.network.internal.VCloudExpressNetworkImpl;
import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
/**
* Locations of resources in vCloud
*
* @author Adrian Cole
*
*/
public class TerremarkVCloudExpressNetwork extends VCloudExpressNetworkImpl {
private final ReferenceType networkExtension;
private final ReferenceType ips;
public TerremarkVCloudExpressNetwork(String name, String type, URI id, String description, Set<String> dnsServers,
String gateway, String netmask, Set<FenceMode> fenceModes, Boolean dhcp, Set<PortForwardingRule> natRules,
Set<FirewallRule> firewallRules, ReferenceType networkExtension, ReferenceType ips) {
super(name, type, id, description, dnsServers, gateway, netmask, fenceModes, dhcp, natRules, firewallRules);
this.networkExtension = networkExtension;
this.ips = ips;
}
public ReferenceType getNetworkExtension() {
return networkExtension;
}
public ReferenceType getIps() {
return ips;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((ips == null) ? 0 : ips.hashCode());
result = prime * result + ((networkExtension == null) ? 0 : networkExtension.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
TerremarkVCloudExpressNetwork other = (TerremarkVCloudExpressNetwork) obj;
if (ips == null) {
if (other.ips != null)
return false;
} else if (!ips.equals(other.ips))
return false;
if (networkExtension == null) {
if (other.networkExtension != null)
return false;
} else if (!networkExtension.equals(other.networkExtension))
return false;
return true;
}
@Override
public String toString() {
return "[id=" + getHref() + ", name=" + getName() + ", type=" + getType() + ", description=" + description
+ ", dhcp=" + dhcp + ", dnsServers=" + dnsServers + ", fenceModes=" + fenceModes + ", firewallRules="
+ firewallRules + ", gateway=" + gateway + ", natRules=" + natRules + ", netmask=" + netmask + ",ips="
+ ips + ", networkExtension=" + networkExtension + "]";
}
}

View File

@ -81,6 +81,9 @@ public class ParseTerremarkVCloudErrorFromHttpResponse implements HttpErrorHandl
} }
exception = new ResourceNotFoundException(message, exception); exception = new ResourceNotFoundException(message, exception);
break; break;
case 405:
exception = new UnsupportedOperationException(response.getMessage(), exception);
break;
case 501: case 501:
if (response.getMessage() != null && (response.getMessage().indexOf("NotImplemented") != -1)) if (response.getMessage() != null && (response.getMessage().indexOf("NotImplemented") != -1))
exception = new UnsupportedOperationException(response.getMessage(), exception); exception = new UnsupportedOperationException(response.getMessage(), exception);

View File

@ -0,0 +1,91 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.xml;
import java.net.URI;
import javax.annotation.Resource;
import org.jclouds.http.functions.ParseSax.HandlerWithResult;
import org.jclouds.logging.Logger;
import org.jclouds.vcloud.terremark.domain.TerremarkNetwork;
import org.jclouds.vcloud.terremark.domain.TerremarkNetwork.Type;
/**
* @author Adrian Cole
*/
public class TerremarkNetworkHandler extends HandlerWithResult<TerremarkNetwork> {
@Resource
protected Logger logger = Logger.NULL;
private StringBuilder currentText = new StringBuilder();
private String id;
private URI href;
private String name;
private String rnatAddress;
private String address;
private String broadcastAddress;
private String gatewayAddress;
private Type networkType;
private String vlan;
private String friendlyName;
protected String currentOrNull() {
String returnVal = currentText.toString().trim();
return returnVal.equals("") ? null : returnVal;
}
@Override
public TerremarkNetwork getResult() {
return new TerremarkNetwork(id, href, name, rnatAddress, address, broadcastAddress, gatewayAddress, networkType,
vlan, friendlyName);
}
public void endElement(String uri, String name, String qName) {
if (qName.equals("Href") && currentOrNull() != null) {
href = URI.create(currentOrNull());
} else if (qName.equals("Id")) {
id = currentOrNull();
} else if (qName.equals("Name")) {
this.name = currentOrNull();
} else if (qName.equals("RnatAddress")) {
rnatAddress = currentOrNull();
} else if (qName.equals("Address")) {
address = currentOrNull();
} else if (qName.equals("BroadcastAddress")) {
broadcastAddress = currentOrNull();
} else if (qName.equals("GatewayAddress")) {
gatewayAddress = currentOrNull();
} else if (qName.equals("NetworkType")) {
networkType = TerremarkNetwork.Type.fromValue(currentOrNull());
} else if (qName.equals("Vlan")) {
vlan = currentOrNull();
} else if (qName.equals("FriendlyName")) {
friendlyName = currentOrNull();
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
}

View File

@ -0,0 +1,59 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.xml;
import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.terremark.domain.TerremarkOrgNetwork;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Adrian Cole
*/
public class TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler extends
ParseSax.HandlerWithResult<TerremarkOrgNetwork> {
protected final TerremarkVCloudExpressNetworkHandler vcxHandler;
@Inject
public TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler(TerremarkVCloudExpressNetworkHandler vcxHandler) {
this.vcxHandler = vcxHandler;
}
public TerremarkOrgNetwork getResult() {
return new TerremarkOrgNetwork(vcxHandler.getResult());
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
vcxHandler.startElement(uri, localName, qName, attributes);
}
public void endElement(String uri, String name, String qName) {
vcxHandler.endElement(uri, name, qName);
}
public void characters(char ch[], int start, int length) {
vcxHandler.characters(ch, start, length);
}
}

View File

@ -0,0 +1,66 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.xml;
import static org.jclouds.vcloud.util.Utils.cleanseAttributes;
import static org.jclouds.vcloud.util.Utils.newReferenceType;
import java.util.Map;
import javax.annotation.Resource;
import org.jclouds.logging.Logger;
import org.jclouds.vcloud.domain.ReferenceType;
import org.jclouds.vcloud.terremark.domain.internal.TerremarkVCloudExpressNetwork;
import org.jclouds.vcloud.xml.VCloudExpressNetworkHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Adrian Cole
*/
public class TerremarkVCloudExpressNetworkHandler extends VCloudExpressNetworkHandler {
@Resource
protected Logger logger = Logger.NULL;
private ReferenceType ips;
private ReferenceType extension;
public TerremarkVCloudExpressNetwork getResult() {
return new TerremarkVCloudExpressNetwork(network.getName(), network.getType(), network.getHref(), description,
dnsServers, gateway, netmask, fenceModes, dhcp, natRules, firewallRules, extension, ips);
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
Map<String, String> attributes = cleanseAttributes(attrs);
if (qName.equals("Network")) {
network = newReferenceType(attributes);
} else if (qName.equals("Link")) {
if ("IP Addresses".equals(attributes.get("name"))) {
ips = newReferenceType(attributes);
} else if ("down".equals(attributes.get("rel"))) {
extension = newReferenceType(attributes);
}
}
}
}

View File

@ -74,6 +74,7 @@ import org.jclouds.vcloud.terremark.xml.KeyPairsHandler;
import org.jclouds.vcloud.terremark.xml.NodeHandler; import org.jclouds.vcloud.terremark.xml.NodeHandler;
import org.jclouds.vcloud.terremark.xml.NodesHandler; import org.jclouds.vcloud.terremark.xml.NodesHandler;
import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler; import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
import org.jclouds.vcloud.terremark.xml.TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler;
import org.jclouds.vcloud.terremark.xml.TerremarkVDCHandler; import org.jclouds.vcloud.terremark.xml.TerremarkVDCHandler;
import org.jclouds.vcloud.xml.CatalogHandler; import org.jclouds.vcloud.xml.CatalogHandler;
import org.jclouds.vcloud.xml.VCloudExpressVAppHandler; import org.jclouds.vcloud.xml.VCloudExpressVAppHandler;
@ -96,6 +97,38 @@ import domain.VCloudVersionsAsyncClient;
*/ */
@Test(groups = "unit", sequential = true, testName = "TerremarkECloudAsyncClientTest") @Test(groups = "unit", sequential = true, testName = "TerremarkECloudAsyncClientTest")
public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkECloudAsyncClient> { public class TerremarkECloudAsyncClientTest extends RestClientTest<TerremarkECloudAsyncClient> {
public void testNetwork() throws SecurityException, NoSuchMethodException, IOException {
Method method = TerremarkECloudAsyncClient.class.getMethod("getNetwork", URI.class);
HttpRequest request = processor.createRequest(method, URI
.create("https://vcloud.safesecureweb.com/api/v0.8/vdcItem/2"));
assertRequestLineEquals(request, "GET https://vcloud.safesecureweb.com/api/v0.8/vdcItem/2 HTTP/1.1");
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.network+xml\n");
assertPayloadEquals(request, null, null, false);
assertResponseParserClassEquals(method, request, ParseSax.class);
assertSaxResponseParserClassEquals(method, TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class);
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
checkFilters(request);
}
public void testFindNetworkInOrgVDCNamed() throws SecurityException, NoSuchMethodException, IOException {
Method method = TerremarkECloudAsyncClient.class.getMethod("findNetworkInOrgVDCNamed", String.class,
String.class, String.class);
HttpRequest request = processor.createRequest(method, "org", "vdc", "network");
assertRequestLineEquals(request, "GET https://vcloud.safesecureweb.com/api/v0.8/vdcItem/2 HTTP/1.1");
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.network+xml\n");
assertPayloadEquals(request, null, null, false);
assertResponseParserClassEquals(method, request, ParseSax.class);
assertSaxResponseParserClassEquals(method, TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class);
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
checkFilters(request);
}
/** /**
* ignore parameter of catalog id since this doesn't work * ignore parameter of catalog id since this doesn't work
*/ */

View File

@ -0,0 +1,49 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.xml;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.net.URI;
import java.net.UnknownHostException;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.terremark.domain.TerremarkNetwork;
import org.testng.annotations.Test;
/**
* Tests behavior of {@code TerremarkNetworkHandler}
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "terremark.TerremarkNetworkHandlerTest")
public class TerremarkNetworkHandlerTest extends BaseHandlerTest {
public void test1() throws UnknownHostException {
InputStream is = getClass().getResourceAsStream("/terremark/TerremarkNetwork.xml");
TerremarkNetwork result = factory.create(injector.getInstance(TerremarkNetworkHandler.class)).parse(is);
assertEquals(result, new TerremarkNetwork("XXXXX", URI
.create("https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/extensions/network/XXXXX"),
"10.X.X.0/27", "209.X.X.X", "10.X.X.0", "10.X.X.X", "10.X.X.1", TerremarkNetwork.Type.DMZ, "279",
"10.X.X.0/27 (DMZ_279)"));
}
}

View File

@ -0,0 +1,87 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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
*
* 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 specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.vcloud.terremark.xml;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.net.URI;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ParseSax.Factory;
import org.jclouds.http.functions.config.SaxParserModule;
import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
import org.jclouds.vcloud.domain.network.FenceMode;
import org.jclouds.vcloud.domain.network.VCloudExpressNetwork;
import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
import org.jclouds.vcloud.terremark.domain.internal.TerremarkVCloudExpressNetwork;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* Tests behavior of {@code TerremarkVCloudExpressNetworkHandler}
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "terremark.TerremarkVCloudExpressNetworkHandlerTest")
public class TerremarkVCloudExpressNetworkHandlerTest {
private Injector injector;
private Factory factory;
public void testTerremark() {
InputStream is = getClass().getResourceAsStream("/express/network-terremark.xml");
injector = Guice.createInjector(new SaxParserModule());
factory = injector.getInstance(ParseSax.Factory.class);
VCloudExpressNetwork result = factory.create(injector.getInstance(TerremarkVCloudExpressNetworkHandler.class))
.parse(is);
assertEquals(
result,
new TerremarkVCloudExpressNetwork(
"10.122.209.128/28",
"application/vnd.vmware.vcloud.network+xml",
URI.create("https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/network/40031"),
null,
ImmutableSet.<String> of(),
"10.122.209.129",
"255.255.255.240",
ImmutableSet.<FenceMode> of(FenceMode.ISOLATED),
null,
ImmutableSet.<PortForwardingRule> of(),
ImmutableSet.<FirewallRule> of(),
new ReferenceTypeImpl(
"10.122.209.128/28",
"application/xml",
URI
.create("https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/extensions/network/40031")),
new ReferenceTypeImpl(
"IP Addresses",
"application/xml",
URI
.create("https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/extensions/network/40031/ips"))));
}
}

View File

@ -0,0 +1,12 @@
<Network xmlns="urn:tmrk:eCloudExtensions-2.5" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Id>XXXXX</Id>
<Href>https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.5/extensions/network/XXXXX</Href>
<Name>10.X.X.0/27</Name>
<RnatAddress>209.X.X.X</RnatAddress>
<Address>10.X.X.0</Address>
<BroadcastAddress>10.X.X.X</BroadcastAddress>
<GatewayAddress>10.X.X.1</GatewayAddress>
<NetworkType>DMZ</NetworkType>
<Vlan>279</Vlan>
<FriendlyName>10.X.X.0/27 (DMZ_279)</FriendlyName>
</Network>