diff --git a/apis/cloudstack/pom.xml b/apis/cloudstack/pom.xml index 9791af0702..75e0a788cc 100644 --- a/apis/cloudstack/pom.xml +++ b/apis/cloudstack/pom.xml @@ -52,6 +52,8 @@ 2.2.12 FIXME_apiKey FIXME_secretKey + + @@ -118,6 +120,8 @@ ${test.cloudstack.credential} ${test.cloudstack.image-id} ${test.cloudstack.login-user} + ${test.cloudstack.domainAdminIdentity} + ${test.cloudstack.domainAdminCredential} diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/CreateNetworkOptions.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/CreateNetworkOptions.java index c13d33e967..555f5eec39 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/CreateNetworkOptions.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/CreateNetworkOptions.java @@ -43,7 +43,7 @@ public class CreateNetworkOptions extends AccountInDomainOptions { /** * @param isShared - * true if network is shared, false otherwise + * true if network is shared across accounts in the Zone */ public CreateNetworkOptions isShared(boolean isShared) { this.queryParameters.replaceValues("isshared", ImmutableSet.of(isShared + "")); @@ -61,7 +61,7 @@ public class CreateNetworkOptions extends AccountInDomainOptions { /** * @param endIP - * the ending IP address in the VLAN IP range + * the ending IP address in the network IP range. If not specified, will be defaulted to startIP */ public CreateNetworkOptions endIP(String endIP) { this.queryParameters.replaceValues("endip", ImmutableSet.of(endIP)); diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptions.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptions.java index bee5e46837..2d23dd5f94 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptions.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptions.java @@ -27,7 +27,7 @@ import com.google.common.collect.ImmutableSet; * Options used to control what network offerings are returned * * @see * @author Adrian Cole */ @@ -35,6 +35,15 @@ public class ListNetworkOfferingsOptions extends BaseHttpRequestOptions { public static final ListNetworkOfferingsOptions NONE = new ListNetworkOfferingsOptions(); + /** + * @param zoneId + * list network offerings available for network creation in specific zone + */ + public ListNetworkOfferingsOptions zoneId(long zoneId) { + this.queryParameters.replaceValues("zoneid", ImmutableSet.of(zoneId + "")); + return this; + } + /** * @param id * the ID of the network offering @@ -43,7 +52,7 @@ public class ListNetworkOfferingsOptions extends BaseHttpRequestOptions { this.queryParameters.replaceValues("id", ImmutableSet.of(id + "")); return this; } - + /** * @param name * the network offering name @@ -165,6 +174,14 @@ public class ListNetworkOfferingsOptions extends BaseHttpRequestOptions { return options.id(id); } + /** + * @see ListNetworkOfferingsOptions#zoneId + */ + public static ListNetworkOfferingsOptions zoneId(long zoneId) { + ListNetworkOfferingsOptions options = new ListNetworkOfferingsOptions(); + return options.zoneId(zoneId); + } + /** * @see ListNetworkOfferingsOptions#trafficType */ diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/UserPredicates.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/UserPredicates.java index 2ad7fac3eb..518804c753 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/UserPredicates.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/UserPredicates.java @@ -21,6 +21,7 @@ package org.jclouds.cloudstack.predicates; import static com.google.common.base.Preconditions.checkNotNull; import org.jclouds.cloudstack.domain.Account; +import org.jclouds.cloudstack.domain.Account.Type; import org.jclouds.cloudstack.domain.User; import com.google.common.base.Predicate; @@ -57,26 +58,44 @@ public class UserPredicates { return new ApiKeyEquals(apiKey); } - public static enum IsUserAccount implements Predicate { - INSTANCE; - - @Override - public boolean apply(User input) { - return checkNotNull(input, "user").getAccountType() == Account.Type.USER; - } - - @Override - public String toString() { - return "isUserAccount()"; - } + /** + * + * @return true, if the account has user privileges + */ + public static Predicate isUserAccount() { + return accountTypeEquals(Account.Type.USER); } - /** * * @return true, if the user's apiKey is the following */ - public static Predicate isUserAccount() { - return IsUserAccount.INSTANCE; + public static Predicate accountTypeEquals(Account.Type type) { + return new AccountTypeEquals(type); + } + + public static class AccountTypeEquals implements Predicate { + public AccountTypeEquals(Type type) { + this.type = checkNotNull(type, "type"); + } + + private final Account.Type type; + + @Override + public boolean apply(User input) { + return checkNotNull(input, "user").getAccountType() == type; + } + + @Override + public String toString() { + return "accountTypeEquals(" + type + ")"; + } + } + /** + * + * @return true, if the user's apiKey is the following + */ + public static Predicate isAdminAccount() { + return accountTypeEquals(Account.Type.ADMIN); } } diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/ZonePredicates.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/ZonePredicates.java index bc383fc1a5..99334d325c 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/ZonePredicates.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/predicates/ZonePredicates.java @@ -20,8 +20,6 @@ package org.jclouds.cloudstack.predicates; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Predicates.alwaysTrue; -import static com.google.common.base.Predicates.and; -import static com.google.common.base.Predicates.not; import org.jclouds.cloudstack.domain.NetworkType; import org.jclouds.cloudstack.domain.Zone; @@ -71,14 +69,6 @@ public class ZonePredicates { }; } - /** - * - * @return true, if the zone supports creation of GuestVirtual Networks - */ - public static Predicate supportsGuestVirtualNetworks() { - return and(supportsAdvancedNetworks(), not(supportsSecurityGroups())); - } - /** * * @return always returns true. diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackExperimentLiveTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackExperimentLiveTest.java index 0cd017f0f9..b41bf6f9ce 100644 --- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackExperimentLiveTest.java +++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/compute/CloudStackExperimentLiveTest.java @@ -18,38 +18,78 @@ */ package org.jclouds.cloudstack.compute; -import org.jclouds.compute.BaseVersionedServiceLiveTest; -import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.compute.ComputeServiceContextFactory; -import org.jclouds.logging.log4j.config.Log4JLoggingModule; -import org.jclouds.sshj.config.SshjSshClientModule; -import org.testng.annotations.Test; +import static com.google.common.collect.Iterables.concat; +import static com.google.common.collect.Iterables.get; +import static com.google.common.collect.Sets.newTreeSet; +import static org.jclouds.cloudstack.options.CreateNetworkOptions.Builder.vlan; +import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder.specifyVLAN; -import com.google.common.collect.ImmutableSet; -import com.google.inject.Module; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions; +import org.jclouds.cloudstack.domain.Network; +import org.jclouds.cloudstack.features.BaseCloudStackClientLiveTest; +import org.jclouds.compute.RunNodesException; +import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.domain.Template; +import org.jclouds.compute.predicates.NodePredicates; +import org.testng.annotations.Test; /** * * @author Adrian Cole */ @Test(groups = "live", testName = "CloudStackExperimentLiveTest") -public class CloudStackExperimentLiveTest extends BaseVersionedServiceLiveTest { - public CloudStackExperimentLiveTest(){ +public class CloudStackExperimentLiveTest extends BaseCloudStackClientLiveTest { + public CloudStackExperimentLiveTest() { provider = "cloudstack"; } - + @Test public void testAndExperiment() { - ComputeServiceContext context = null; + if (!domainAdminEnabled) { + Logger.getAnonymousLogger().log(Level.SEVERE, "domainAdmin credentials not present, skipping test"); + return; + } + + String group = prefix + "-vlan"; + Network network = null; + Set nodes = null; try { - context = new ComputeServiceContextFactory().createContext("cloudstack", - ImmutableSet. of(new Log4JLoggingModule(), new SshjSshClientModule()), setupProperties()); + assert computeContext.getComputeService().listAssignableLocations().size() > 0; - assert context.getComputeService().listAssignableLocations().size() > 0; + Template template = computeContext.getComputeService().templateBuilder().build(); + // get the zone we are launching into + long zoneId = Long.parseLong(template.getLocation().getId()); + + // find a network offering that supports vlans in our zone + long offeringId = get( + context.getApi().getOfferingClient().listNetworkOfferings(specifyVLAN(true).zoneId(zoneId)), 0).getId(); + + // create an arbitrary network + network = domainAdminContext.getApi() + .getNetworkClient() + // startIP/endIP/netmask/gateway must be specified together + .createNetworkInZone(zoneId, offeringId, group, group, + vlan("2").startIP("192.168.1.2").netmask("255.255.255.0").gateway("192.168.1.1")); + + // set options to specify this network id + template.getOptions().as(CloudStackTemplateOptions.class).networkId(network.getId()); + + // launch the VM + nodes = computeContext.getComputeService().createNodesInGroup(group, 1, template); + + } catch (RunNodesException e) { + Logger.getAnonymousLogger().log(Level.SEVERE, "error creating nodes", e); + nodes = newTreeSet(concat(e.getSuccessfulNodes(), e.getNodeErrors().keySet())); } finally { - if (context != null) - context.close(); + if (nodes != null) + computeContext.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); + if (network != null) + domainAdminContext.getApi().getNetworkClient().deleteNetwork(network.getId()); } } diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/BaseCloudStackClientLiveTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/BaseCloudStackClientLiveTest.java index 1972641b81..bc34626651 100644 --- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/BaseCloudStackClientLiveTest.java +++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/BaseCloudStackClientLiveTest.java @@ -18,6 +18,7 @@ */ package org.jclouds.cloudstack.features; +import static com.google.common.base.Strings.emptyToNull; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.get; import static org.testng.Assert.assertEquals; @@ -70,10 +71,31 @@ import com.google.inject.Module; * @author Adrian Cole */ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest { + protected String domainAdminIdentity; + protected String domainAdminCredential; + public BaseCloudStackClientLiveTest() { provider = "cloudstack"; } + @Override + protected void setupCredentials() { + super.setupCredentials(); + domainAdminIdentity = emptyToNull(System.getProperty("test." + provider + ".domainAdminIdentity")); + domainAdminCredential = emptyToNull(System.getProperty("test." + provider + ".domainAdminCredential")); + } + + protected Properties setupAdminProperties() { + if (domainAdminIdentity != null && domainAdminCredential != null) { + Properties overrides = setupProperties(); + overrides.setProperty(provider + ".identity", domainAdminIdentity); + overrides.setProperty(provider + ".credential", domainAdminCredential); + return overrides; + } else { + return null; + } + } + public static long defaultTemplateOrPreferredInZone(Long defaultTemplate, CloudStackClient client, long zoneId) { long templateId = defaultTemplate != null ? defaultTemplate : getTemplateForZone(client, zoneId); return templateId; @@ -103,21 +125,27 @@ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest { protected String prefix = System.getProperty("user.name"); - protected CloudStackClient client; + protected ComputeServiceContext computeContext; protected RestContext context; + protected CloudStackClient client; + protected User user; + protected Predicate socketTester; protected RetryablePredicate jobComplete; protected RetryablePredicate virtualMachineRunning; protected RetryablePredicate virtualMachineDestroyed; protected SshClient.Factory sshFactory; - protected User currentUser; protected String password = "password"; protected Injector injector; protected ReuseOrAssociateNewPublicIPAddress reuseOrAssociate; - protected ComputeServiceContext computeContext; + protected boolean domainAdminEnabled; + protected ComputeServiceContext domainAdminComputeContext; + protected RestContext domainAdminContext; + protected CloudStackClient domainAdminClient; + protected User domainAdminUser; protected void checkSSH(IPSocket socket) { socketTester.apply(socket); @@ -136,27 +164,22 @@ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest { @BeforeGroups(groups = "live") public void setupClient() { setupCredentials(); - Properties overrides = setupProperties(); + computeContext = new ComputeServiceContextFactory().createContext(provider, - ImmutableSet. of(new Log4JLoggingModule(), new SshjSshClientModule()), overrides); - + ImmutableSet. of(new Log4JLoggingModule(), new SshjSshClientModule()), setupProperties()); context = computeContext.getProviderSpecificContext(); - client = context.getApi(); - // check access - Iterable users = Iterables.concat(client.getAccountClient().listAccounts()); - Predicate apiKeyMatches = UserPredicates.apiKeyEquals(identity); - try { - currentUser = Iterables.find(users, apiKeyMatches); - } catch (NoSuchElementException e) { - throw new NoSuchElementException(String.format("none of the following users match %s: %s", apiKeyMatches, - users)); - } + user = verifyCurrentUserIsOfType(context, Account.Type.USER); - if (currentUser.getAccountType() != Account.Type.USER) - throw new IllegalArgumentException(String.format( - "invalid account type: %s, please specify an apiKey of a USER, for example: %s", - currentUser.getAccountType(), Iterables.filter(users, UserPredicates.isUserAccount()))); + domainAdminEnabled = setupAdminProperties() != null; + + if (domainAdminEnabled) { + domainAdminComputeContext = new ComputeServiceContextFactory().createContext(provider, + ImmutableSet. of(new Log4JLoggingModule(), new SshjSshClientModule()), setupAdminProperties()); + domainAdminContext = domainAdminComputeContext.getProviderSpecificContext(); + domainAdminClient = domainAdminContext.getApi(); + domainAdminUser = verifyCurrentUserIsOfType(domainAdminContext, Account.Type.DOMAIN_ADMIN); + } injector = Guice.createInjector(new SshjSshClientModule(), new Log4JLoggingModule()); sshFactory = injector.getInstance(SshClient.Factory.class); @@ -174,6 +197,25 @@ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest { injector.injectMembers(reuseOrAssociate); } + protected static User verifyCurrentUserIsOfType(RestContext context, + Account.Type type) { + Iterable users = Iterables.concat(context.getApi().getAccountClient().listAccounts()); + Predicate apiKeyMatches = UserPredicates.apiKeyEquals(context.getIdentity()); + User currentUser; + try { + currentUser = Iterables.find(users, apiKeyMatches); + } catch (NoSuchElementException e) { + throw new NoSuchElementException(String.format("none of the following users match %s: %s", apiKeyMatches, + users)); + } + + if (currentUser.getAccountType() != type) + throw new IllegalArgumentException(String.format( + "invalid account type: %s, please specify an apiKey of %s, for example: %s", + currentUser.getAccountType(), type, Iterables.filter(users, UserPredicates.accountTypeEquals(type)))); + return currentUser; + } + @AfterGroups(groups = "live") protected void tearDown() { if (context != null) diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/NetworkClientLiveTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/NetworkClientLiveTest.java index 479acd8c1c..5b9b9d6422 100644 --- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/NetworkClientLiveTest.java +++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/features/NetworkClientLiveTest.java @@ -19,16 +19,20 @@ package org.jclouds.cloudstack.features; import static com.google.common.collect.Iterables.find; +import static com.google.common.collect.Iterables.get; import static com.google.common.collect.Iterables.getOnlyElement; +import static org.jclouds.cloudstack.options.CreateNetworkOptions.Builder.vlan; +import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder.specifyVLAN; import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.accountInDomain; import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.id; -import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.zoneId; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import java.net.URI; import java.util.NoSuchElementException; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import org.jclouds.cloudstack.domain.GuestIPType; import org.jclouds.cloudstack.domain.Network; @@ -36,12 +40,9 @@ import org.jclouds.cloudstack.domain.NetworkOffering; import org.jclouds.cloudstack.domain.Zone; import org.jclouds.cloudstack.predicates.NetworkOfferingPredicates; import org.jclouds.cloudstack.predicates.ZonePredicates; -import org.testng.annotations.AfterGroups; import org.testng.annotations.BeforeGroups; import org.testng.annotations.Test; -import com.google.common.base.Predicate; - /** * Tests behavior of {@code NetworkClientLiveTest} * @@ -51,58 +52,89 @@ import com.google.common.base.Predicate; public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest { private boolean networksSupported; - private Zone zone; - private NetworkOffering offering; - - private Network network; - - // only delete networks we create - private boolean weCreatedNetwork; @BeforeGroups(groups = "live") public void setupClient() { super.setupClient(); try { - // you can create guest direct network by Admin user, but since we are - // not admin, let's try to create a guest virtual one - zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsGuestVirtualNetworks()); - offering = find(client.getOfferingClient().listNetworkOfferings(), - NetworkOfferingPredicates.supportsGuestVirtualNetworks()); + zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsAdvancedNetworks()); networksSupported = true; } catch (NoSuchElementException e) { } } - public void testCreateNetwork() throws Exception { + public void testCreateGuestVirtualNetwork() { if (!networksSupported) return; + final NetworkOffering offering; try { - network = client.getNetworkClient().createNetworkInZone(zone.getId(), offering.getId(), prefix, prefix); - weCreatedNetwork = true; - } catch (IllegalStateException e) { - network = find( - client.getNetworkClient().listNetworks( - zoneId(zone.getId()).accountInDomain(currentUser.getAccount(), currentUser.getDomainId())), - new Predicate() { + offering = find(client.getOfferingClient().listNetworkOfferings(), + NetworkOfferingPredicates.supportsGuestVirtualNetworks()); - @Override - public boolean apply(Network arg0) { - return arg0.getNetworkOfferingId() == offering.getId(); - } - - }); + } catch (NoSuchElementException e) { + Logger.getAnonymousLogger().log(Level.SEVERE, "guest networks not supported, skipping test"); + return; + } + String name = prefix + "-virtual"; + + Network network = null; + try { + network = client.getNetworkClient().createNetworkInZone(zone.getId(), offering.getId(), name, name); + checkNetwork(network); + } catch (IllegalStateException e) { + Logger.getAnonymousLogger().log(Level.SEVERE, "couldn't create a network, skipping test", e); + } finally { + if (network != null) { + Long jobId = client.getNetworkClient().deleteNetwork(network.getId()); + if (jobId != null) + jobComplete.apply(jobId); + } + } + } + + public void testCreateVLANNetwork() { + if (!networksSupported) + return; + if (!domainAdminEnabled) { + Logger.getAnonymousLogger().log(Level.SEVERE, "domainAdmin credentials not present, skipping test"); + return; + } + final NetworkOffering offering; + try { + offering = get( + context.getApi().getOfferingClient().listNetworkOfferings(specifyVLAN(true).zoneId(zone.getId())), 0); + } catch (NoSuchElementException e) { + Logger.getAnonymousLogger().log(Level.SEVERE, "VLAN networks not supported, skipping test"); + return; + } + String name = prefix + "-vlan"; + + Network network = null; + try { + network = domainAdminContext.getApi() + .getNetworkClient() + // startIP/endIP/netmask/gateway must be specified together + .createNetworkInZone(zone.getId(), offering.getId(), name, name, + vlan("2").startIP("192.168.1.2").netmask("255.255.255.0").gateway("192.168.1.1")); + checkNetwork(network); + } catch (IllegalStateException e) { + Logger.getAnonymousLogger().log(Level.SEVERE, "couldn't create a network, skipping test", e); + } finally { + if (network != null) { + Long jobId = client.getNetworkClient().deleteNetwork(network.getId()); + if (jobId != null) + jobComplete.apply(jobId); + } } - checkNetwork(network); } - @Test(dependsOnMethods = "testCreateNetwork") public void testListNetworks() throws Exception { if (!networksSupported) return; Set response = client.getNetworkClient().listNetworks( - accountInDomain(network.getAccount(), network.getDomainId())); + accountInDomain(user.getAccount(), user.getDomainId())); assert null != response; long networkCount = response.size(); assertTrue(networkCount >= 0); @@ -144,7 +176,8 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest { assert network.getEndIP() == null : network; break; case DIRECT: - assert network.getNetmask() != null : network; + // TODO: I've found a network that doesn't have a netmask associated + // assert network.getNetmask() != null : network; assert network.getGateway() != null : network; assert network.getVLAN() != null : network; assertEquals(network.getBroadcastURI(), URI.create("vlan://" + network.getVLAN())); @@ -154,14 +187,4 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest { } } - @AfterGroups(groups = "live") - protected void tearDown() { - if (network != null && weCreatedNetwork) { - Long jobId = client.getNetworkClient().deleteNetwork(network.getId()); - if (jobId != null) - jobComplete.apply(jobId); - } - super.tearDown(); - } - } diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptionsTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptionsTest.java index 1d2a0b9695..7ac555c550 100644 --- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptionsTest.java +++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListNetworkOfferingsOptionsTest.java @@ -25,6 +25,7 @@ import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder.isShared; import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder.specifyVLAN; import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder.trafficType; +import static org.jclouds.cloudstack.options.ListNetworkOfferingsOptions.Builder.zoneId; import static org.testng.Assert.assertEquals; import org.jclouds.cloudstack.domain.TrafficType; @@ -70,6 +71,16 @@ public class ListNetworkOfferingsOptionsTest { assertEquals(ImmutableList.of("6"), options.buildQueryParameters().get("id")); } + public void testZoneId() { + ListNetworkOfferingsOptions options = new ListNetworkOfferingsOptions().zoneId(6); + assertEquals(ImmutableList.of("6"), options.buildQueryParameters().get("zoneid")); + } + + public void testZoneIdStatic() { + ListNetworkOfferingsOptions options = zoneId(6); + assertEquals(ImmutableList.of("6"), options.buildQueryParameters().get("zoneid")); + } + public void testSpecifyVLAN() { ListNetworkOfferingsOptions options = new ListNetworkOfferingsOptions().specifyVLAN(true); assertEquals(ImmutableList.of("true"), options.buildQueryParameters().get("specifyvlan")); diff --git a/compute/src/test/java/org/jclouds/compute/BaseVersionedServiceLiveTest.java b/compute/src/test/java/org/jclouds/compute/BaseVersionedServiceLiveTest.java index 0cc26be1b4..2249a4cf36 100644 --- a/compute/src/test/java/org/jclouds/compute/BaseVersionedServiceLiveTest.java +++ b/compute/src/test/java/org/jclouds/compute/BaseVersionedServiceLiveTest.java @@ -22,7 +22,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Strings.emptyToNull; import java.util.Properties; -import java.util.logging.Logger; import org.jclouds.Constants; import org.jclouds.rest.RestContextFactory; @@ -33,7 +32,8 @@ import org.testng.annotations.BeforeClass; * @author Jason King */ public abstract class BaseVersionedServiceLiveTest { - + protected String prefix = System.getProperty("user.name"); + protected String provider; protected String identity; protected String credential;