http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/main/java/org/jclouds/azurecompute/compute/strategy/impl/AzureAdaptingComputeServiceStrategies.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/strategy/impl/AzureAdaptingComputeServiceStrategies.java b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/strategy/impl/AzureAdaptingComputeServiceStrategies.java deleted file mode 100644 index c99f3a4..0000000 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/strategy/impl/AzureAdaptingComputeServiceStrategies.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * 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.azurecompute.compute.strategy.impl; - -import com.google.common.base.Function; -import java.util.Map; -import javax.inject.Inject; -import org.jclouds.azurecompute.compute.AzureComputeServiceAdapter; -import org.jclouds.azurecompute.domain.Deployment; -import org.jclouds.azurecompute.domain.Location; -import org.jclouds.azurecompute.domain.OSImage; -import org.jclouds.azurecompute.domain.RoleSize; -import org.jclouds.compute.ComputeServiceAdapter; -import org.jclouds.compute.config.ComputeServiceAdapterContextModule.AddDefaultCredentialsToImage; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.strategy.PrioritizeCredentialsFromTemplate; -import org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies; -import org.jclouds.domain.Credentials; - -public class AzureAdaptingComputeServiceStrategies - extends AdaptingComputeServiceStrategies<Deployment, RoleSize, OSImage, Location> { - - private final AzureComputeServiceAdapter client; - - private final Function<Deployment, NodeMetadata> nodeMetadataAdapter; - - @Inject - public AzureAdaptingComputeServiceStrategies( - final Map<String, Credentials> credentialStore, - final PrioritizeCredentialsFromTemplate prioritizeCredentialsFromTemplate, - final ComputeServiceAdapter<Deployment, RoleSize, OSImage, Location> client, - final Function<Deployment, NodeMetadata> nodeMetadataAdapter, - final Function<OSImage, Image> imageAdapter, - final AddDefaultCredentialsToImage addDefaultCredentialsToImage) { - - super(credentialStore, - prioritizeCredentialsFromTemplate, - client, - nodeMetadataAdapter, - imageAdapter, - addDefaultCredentialsToImage); - - this.client = (AzureComputeServiceAdapter) client; - this.nodeMetadataAdapter = nodeMetadataAdapter; - } - - @Override - public NodeMetadata destroyNode(final String id) { - final Deployment node = client.internalDestroyNode(id); - return node == null - ? null - : nodeMetadataAdapter.apply(node); - } - -}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Deployment.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Deployment.java b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Deployment.java index 617d3df..a1db92f 100644 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Deployment.java +++ b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Deployment.java @@ -96,6 +96,7 @@ public abstract class Deployment { FAILED_STARTING_VM("FailedStartingVM", false), UNRESPONSIVE_ROLE("UnresponsiveRole"), PROVISIONING("Provisioning"), + PROVISIONING_FAILED("ProvisioningFailed", false), /** * Not parsable into one of the above. */ http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java index 86419dc..2cf93ad 100644 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java +++ b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java @@ -16,18 +16,16 @@ */ package org.jclouds.azurecompute.domain; -import static com.google.common.collect.ImmutableList.copyOf; - import java.net.URI; -import java.util.Collection; import java.util.List; +import java.util.Set; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.rest.annotations.SinceApiVersion; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import org.jclouds.rest.annotations.SinceApiVersion; +import com.google.common.collect.ImmutableSet; /** * To create a new deployment/role @@ -106,7 +104,7 @@ public abstract class DeploymentParams { */ public abstract OSImage.Type os(); - public abstract List<ExternalEndpoint> externalEndpoints(); + public abstract Set<ExternalEndpoint> externalEndpoints(); /** * {@link org.jclouds.azurecompute.domain.NetworkConfiguration.VirtualNetworkSite#name} @@ -128,138 +126,49 @@ public abstract class DeploymentParams { public abstract List<String> subnetNames(); - public Builder toBuilder() { - return builder().fromDeploymentParams(this); - } - public static Builder builder() { - return new Builder(); + return new AutoValue_DeploymentParams.Builder() + .externalEndpoints(ImmutableSet.<ExternalEndpoint> of()) + .subnetNames(ImmutableList.<String> of()); } - public static final class Builder { - - private String name; - - private RoleSize.Type size; - - private String username; - - private String password; - - private String sourceImageName; - - private URI mediaLink; - - private OSImage.Type os; - - private List<ExternalEndpoint> externalEndpoints = Lists.newArrayList(); - - private String virtualNetworkName; - - private String reservedIPName; - - private List<String> subnetNames = Lists.newArrayList(); - - public Builder name(final String name) { - this.name = name; - return this; - } - - public Builder size(final RoleSize.Type size) { - this.size = size; - return this; - } - - public Builder username(final String username) { - this.username = username; - return this; - } - - public Builder password(final String password) { - this.password = password; - return this; - } + abstract Builder toBuilder(); - public Builder sourceImageName(final String sourceImageName) { - this.sourceImageName = sourceImageName; - return this; - } + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder name(String name); + public abstract Builder size(RoleSize.Type roleSize); + public abstract Builder username(String username); + public abstract Builder password(String password); + public abstract Builder sourceImageName(String sourceImageName); + public abstract Builder mediaLink(URI mediaLink); + public abstract Builder os(OSImage.Type os); + public abstract Builder externalEndpoints(Set<ExternalEndpoint> externalEndpoints); + public abstract Builder virtualNetworkName(String virtualNetworkName); + public abstract Builder reservedIPName(String reservedIPName); + public abstract Builder subnetNames(List<String> subnetNames); - public Builder mediaLink(final URI mediaLink) { - this.mediaLink = mediaLink; - return this; - } + abstract Set<ExternalEndpoint> externalEndpoints(); + abstract List<String> subnetNames(); - public Builder os(final OSImage.Type os) { - this.os = os; - return this; - } - - public Builder externalEndpoint(final ExternalEndpoint endpoint) { - externalEndpoints.add(endpoint); - return this; - } - - public Builder externalEndpoints(final Collection<ExternalEndpoint> externalEndpoints) { - this.externalEndpoints.addAll(externalEndpoints); - return this; - } - - public Builder virtualNetworkName(final String virtualNetworkName) { - this.virtualNetworkName = virtualNetworkName; - return this; - } - - public Builder reservedIPName(final String reservedIPName) { - this.reservedIPName = reservedIPName; - return this; - } - - public Builder subnetName(final String subnetName) { - subnetNames.add(subnetName); - return this; - } - - public Builder subnetNames(final Collection<String> subnetNames) { - this.subnetNames.addAll(subnetNames); - return this; - } + abstract DeploymentParams autoBuild(); public DeploymentParams build() { - return DeploymentParams.create( - name, - size, - username, - password, - sourceImageName, - mediaLink, - os, - ImmutableList.copyOf(externalEndpoints), - virtualNetworkName, - reservedIPName, - ImmutableList.copyOf(subnetNames)); - } - - public Builder fromDeploymentParams(final DeploymentParams deploymentParams) { - return name(deploymentParams.name()) - .size(deploymentParams.size()) - .username(deploymentParams.username()) - .password(deploymentParams.password()) - .sourceImageName(deploymentParams.sourceImageName()) - .mediaLink(deploymentParams.mediaLink()) - .os(deploymentParams.os()) - .externalEndpoints(deploymentParams.externalEndpoints()) - .subnetNames(deploymentParams.subnetNames()) - .reservedIPName(reservedIPName); + externalEndpoints(externalEndpoints() != null ? ImmutableSet.copyOf(externalEndpoints()) : null); + subnetNames(subnetNames() != null ? ImmutableList.copyOf(subnetNames()) : null); + return autoBuild(); } } - private static DeploymentParams create(final String name, final RoleSize.Type size, - final String username, final String password, final String sourceImageName, - final URI mediaLink, final OSImage.Type os, final List<ExternalEndpoint> externalEndpoints, - final String virtualNetworkName, final String reservedIPName, final List<String> subnetNames) { - - return new AutoValue_DeploymentParams(name, size, username, password, sourceImageName, mediaLink, os, - copyOf(externalEndpoints), virtualNetworkName, reservedIPName, copyOf(subnetNames)); + public static DeploymentParams create(String name, RoleSize.Type size, String username, + String password, String sourceImageName, URI mediaLink, + OSImage.Type os, Set<ExternalEndpoint> externalEndpoints, + String virtualNetworkName, String reservedIPName, + List<String> subnetNames) { + return builder().name(name).size(size).username(username).password(password) + .sourceImageName(sourceImageName).mediaLink(mediaLink).os(os) + .externalEndpoints(externalEndpoints).virtualNetworkName(virtualNetworkName) + .reservedIPName(reservedIPName).subnetNames(subnetNames) + .build(); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/main/java/org/jclouds/azurecompute/features/VirtualMachineApi.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/features/VirtualMachineApi.java b/azurecompute/src/main/java/org/jclouds/azurecompute/features/VirtualMachineApi.java index 968b406..2285a9d 100644 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/features/VirtualMachineApi.java +++ b/azurecompute/src/main/java/org/jclouds/azurecompute/features/VirtualMachineApi.java @@ -90,6 +90,19 @@ public interface VirtualMachineApi { @Produces(MediaType.APPLICATION_XML) @ResponseParser(ParseRequestIdHeader.class) @Payload(value = "<ShutdownRoleOperation xmlns=\"http://schemas.microsoft.com/windowsazure\">" + + "<OperationType>ShutdownRoleOperation</OperationType>" + + "<PostShutdownAction>{postShutdownAction}</PostShutdownAction></ShutdownRoleOperation>") + String shutdown(@PathParam("name") String name, @PayloadParam("postShutdownAction") String postShutdownAction); + + /** + * http://msdn.microsoft.com/en-us/library/jj157195 + */ + @Named("ShutdownRole") + @POST + @Path("/roleinstances/{name}/Operations") + @Produces(MediaType.APPLICATION_XML) + @ResponseParser(ParseRequestIdHeader.class) + @Payload(value = "<ShutdownRoleOperation xmlns=\"http://schemas.microsoft.com/windowsazure\">" + "<OperationType>ShutdownRoleOperation</OperationType></ShutdownRoleOperation>") String shutdown(@PathParam("name") String name); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/main/java/org/jclouds/azurecompute/options/AzureComputeTemplateOptions.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/options/AzureComputeTemplateOptions.java b/azurecompute/src/main/java/org/jclouds/azurecompute/options/AzureComputeTemplateOptions.java deleted file mode 100644 index 7ffdd19..0000000 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/options/AzureComputeTemplateOptions.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * 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.azurecompute.options; - -import java.util.Map; - -import org.jclouds.compute.options.TemplateOptions; - -import com.google.common.base.Optional; - -/** - * Contains options supported by the {@link org.jclouds.compute.ComputeService#createNodesInGroup( - * String, int, org.jclouds.compute.options.TemplateOptions)} operation. - * - * <h2>Usage</h2> The recommended way to instantiate a {@link AzureComputeTemplateOptions} object is to statically - * import {@code AzureComputeTemplateOptions.*} and invoke a static creation method followed by an instance mutator (if - * needed): - * <p> - * - * <pre> - * import static org.jclouds.compute.options.AzureComputeTemplateOptions.Builder.*; - * ComputeService client = // get connection - * templateBuilder.options(inboundPorts(22, 80, 8080, 443)); - * Set<? extends NodeMetadata> set = client.createNodesInGroup(tag, 2, templateBuilder.build()); - * </pre> - * - */ -public class AzureComputeTemplateOptions extends TemplateOptions implements Cloneable { - - private Optional<String> virtualNetworkName = Optional.absent(); - - private Optional<String> addressSpaceAddressPrefix = Optional.absent(); - - private Optional<String> subnetName = Optional.absent(); - - private Optional<String> subnetAddressPrefix = Optional.absent(); - - private Optional<String> storageAccountName = Optional.absent(); - - private Optional<String> storageAccountType = Optional.absent(); - - private Optional<String> networkSecurityGroupName = Optional.absent(); - - private Optional<String> reservedIPName = Optional.absent(); - - @Override - public AzureComputeTemplateOptions clone() { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - copyTo(options); - return options; - } - - @Override - public void copyTo(final TemplateOptions to) { - super.copyTo(to); - if (to instanceof AzureComputeTemplateOptions) { - final AzureComputeTemplateOptions eTo = AzureComputeTemplateOptions.class.cast(to); - if (virtualNetworkName.isPresent()) { - eTo.virtualNetworkName(virtualNetworkName.get()); - } - if (addressSpaceAddressPrefix.isPresent()) { - eTo.addressSpaceAddressPrefix(addressSpaceAddressPrefix.get()); - } - if (subnetName.isPresent()) { - eTo.subnetName(subnetName.get()); - } - if (networkSecurityGroupName.isPresent()) { - eTo.subnetName(networkSecurityGroupName.get()); - } - if (subnetAddressPrefix.isPresent()) { - eTo.subnetAddressPrefix(subnetAddressPrefix.get()); - } - if (storageAccountName.isPresent()) { - eTo.storageAccountName(storageAccountName.get()); - } - if (storageAccountType.isPresent()) { - eTo.storageAccountType(storageAccountType.get()); - } - if (reservedIPName.isPresent()) { - eTo.reservedIPName(reservedIPName.get()); - } - } - } - - public TemplateOptions virtualNetworkName(final String virtualNetworkName) { - this.virtualNetworkName = Optional.of(virtualNetworkName); - return this; - } - - public TemplateOptions addressSpaceAddressPrefix(final String addressSpaceAddressPrefix) { - this.addressSpaceAddressPrefix = Optional.of(addressSpaceAddressPrefix); - return this; - } - - public TemplateOptions subnetName(final String subnetName) { - this.subnetName = Optional.of(subnetName); - return this; - } - - public TemplateOptions networkSecurityGroupName(final String networkSecurityGroupName) { - this.networkSecurityGroupName = Optional.of(networkSecurityGroupName); - return this; - } - - public TemplateOptions subnetAddressPrefix(final String subnetAddressPrefix) { - this.subnetAddressPrefix = Optional.of(subnetAddressPrefix); - return this; - } - - public TemplateOptions storageAccountName(final String storageAccountName) { - this.storageAccountName = Optional.of(storageAccountName); - return this; - } - - public TemplateOptions storageAccountType(final String storageAccountType) { - this.storageAccountType = Optional.of(storageAccountType); - return this; - } - - public TemplateOptions reservedIPName(final String reservedIPName) { - this.reservedIPName = Optional.of(reservedIPName); - return this; - } - - public Optional<String> getVirtualNetworkName() { - return virtualNetworkName; - } - - public Optional<String> getAddressSpaceAddressPrefix() { - return addressSpaceAddressPrefix; - } - - public Optional<String> getSubnetName() { - return subnetName; - } - - public Optional<String> getSubnetAddressPrefix() { - return subnetAddressPrefix; - } - - public Optional<String> getStorageAccountName() { - return storageAccountName; - } - - public Optional<String> getStorageAccountType() { - return storageAccountType; - } - - public Optional<String> getNetworkSecurityGroupName() { - return networkSecurityGroupName; - } - - public Optional<String> getReservedIPName() { - return reservedIPName; - } - - public static class Builder { - - /** - * @see #virtualNetworkName - */ - public static AzureComputeTemplateOptions virtualNetworkName(final String virtualNetworkName) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.virtualNetworkName(virtualNetworkName)); - } - - /** - * @see #addressSpaceAddressPrefix - */ - public static AzureComputeTemplateOptions addressSpaceAddressPrefix(final String addressSpaceAddressPrefix) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.addressSpaceAddressPrefix(addressSpaceAddressPrefix)); - } - - /** - * @see #subnetName - */ - public static AzureComputeTemplateOptions subnetName(final String subnetName) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.subnetName(subnetName)); - } - - /** - * @see #networkSecurityGroupName - */ - public static AzureComputeTemplateOptions networkSecurityGroupName(final String networkSecurityGroupName) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.subnetName(networkSecurityGroupName)); - } - - /** - * @see #subnetAddressPrefix - */ - public static AzureComputeTemplateOptions subnetAddressPrefix(final String subnetAddressPrefix) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.subnetAddressPrefix(subnetAddressPrefix)); - } - - /** - * @see #storageAccountName - */ - public static AzureComputeTemplateOptions storageAccountName(final String storageAccountName) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.storageAccountName(storageAccountName)); - } - - /** - * @see #storageAccountType - */ - public static AzureComputeTemplateOptions storageAccountType(final String storageAccountType) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.storageAccountType(storageAccountType)); - } - - // methods that only facilitate returning the correct object type - /** - * @see org.jclouds.compute.options.TemplateOptions#inboundPorts(int...) - */ - public static AzureComputeTemplateOptions inboundPorts(final int... ports) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.inboundPorts(ports)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#blockOnPort(int, int) - */ - public static AzureComputeTemplateOptions blockOnPort(final int port, final int seconds) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.blockOnPort(port, seconds)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#userMetadata(java.util.Map) - */ - public static AzureComputeTemplateOptions userMetadata(final Map<String, String> userMetadata) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.userMetadata(userMetadata)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#userMetadata(String, String) - */ - public static AzureComputeTemplateOptions userMetadata(final String key, final String value) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.userMetadata(key, value)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#nodeNames(Iterable) - */ - public static AzureComputeTemplateOptions nodeNames(final Iterable<String> nodeNames) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.nodeNames(nodeNames)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#networks(Iterable) - */ - public static AzureComputeTemplateOptions networks(final Iterable<String> networks) { - final AzureComputeTemplateOptions options = new AzureComputeTemplateOptions(); - return AzureComputeTemplateOptions.class.cast(options.networks(networks)); - } - } - - // methods that only facilitate returning the correct object type - /** - * @see org.jclouds.compute.options.TemplateOptions#blockOnPort(int, int) - */ - @Override - public AzureComputeTemplateOptions blockOnPort(final int port, final int seconds) { - return AzureComputeTemplateOptions.class.cast(super.blockOnPort(port, seconds)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#inboundPorts(int...) - */ - @Override - public AzureComputeTemplateOptions inboundPorts(final int... ports) { - return AzureComputeTemplateOptions.class.cast(super.inboundPorts(ports)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#authorizePublicKey(String) - */ - @Override - public AzureComputeTemplateOptions authorizePublicKey(final String publicKey) { - return AzureComputeTemplateOptions.class.cast(super.authorizePublicKey(publicKey)); - } - - /** - * @see org.jclouds.compute.options.TemplateOptions#installPrivateKey(String) - */ - @Override - public AzureComputeTemplateOptions installPrivateKey(final String privateKey) { - return AzureComputeTemplateOptions.class.cast(super.installPrivateKey(privateKey)); - } - - /** - * {@inheritDoc} - */ - @Override - public AzureComputeTemplateOptions userMetadata(final Map<String, String> userMetadata) { - return AzureComputeTemplateOptions.class.cast(super.userMetadata(userMetadata)); - } - - /** - * {@inheritDoc} - */ - @Override - public AzureComputeTemplateOptions userMetadata(final String key, final String value) { - return AzureComputeTemplateOptions.class.cast(super.userMetadata(key, value)); - } - - /** - * {@inheritDoc} - */ - @Override - public AzureComputeTemplateOptions nodeNames(final Iterable<String> nodeNames) { - return AzureComputeTemplateOptions.class.cast(super.nodeNames(nodeNames)); - } - - /** - * {@inheritDoc} - */ - @Override - public AzureComputeTemplateOptions networks(final Iterable<String> networks) { - return AzureComputeTemplateOptions.class.cast(super.networks(networks)); - } - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/main/java/org/jclouds/azurecompute/util/ConflictManagementPredicate.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/util/ConflictManagementPredicate.java b/azurecompute/src/main/java/org/jclouds/azurecompute/util/ConflictManagementPredicate.java index c859c50..1f940bf 100644 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/util/ConflictManagementPredicate.java +++ b/azurecompute/src/main/java/org/jclouds/azurecompute/util/ConflictManagementPredicate.java @@ -19,9 +19,6 @@ package org.jclouds.azurecompute.util; import static com.google.common.base.Preconditions.checkNotNull; import static java.util.concurrent.TimeUnit.SECONDS; import static org.jclouds.azurecompute.domain.Operation.Status.FAILED; - -import com.google.common.base.Predicate; - import java.util.concurrent.CancellationException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -37,6 +34,8 @@ import org.jclouds.http.HttpResponseException; import org.jclouds.logging.Logger; import org.jclouds.util.Predicates2; +import com.google.common.base.Predicate; + /** * Conflict errors (409 response status code) management predicate. */ @@ -103,7 +102,7 @@ public class ConflictManagementPredicate implements Predicate<String> { /** * {@inheritDoc } * - * @param input interested object/operaton descripton or requestId. + * @param input interested object/operation description or requestId. * @return predicate evaluation. */ @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/AzureComputeProviderMetadataLive.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/AzureComputeProviderMetadataLive.java b/azurecompute/src/test/java/org/jclouds/azurecompute/AzureComputeProviderMetadataLive.java deleted file mode 100644 index c09f0d0..0000000 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/AzureComputeProviderMetadataLive.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * 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.azurecompute; - -import static org.jclouds.azurecompute.config.AzureComputeProperties.OPERATION_POLL_INITIAL_PERIOD; -import static org.jclouds.azurecompute.config.AzureComputeProperties.OPERATION_POLL_MAX_PERIOD; -import static org.jclouds.azurecompute.config.AzureComputeProperties.OPERATION_TIMEOUT; -import static org.jclouds.azurecompute.config.AzureComputeProperties.TCP_RULE_FORMAT; -import static org.jclouds.azurecompute.config.AzureComputeProperties.TCP_RULE_REGEXP; -import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE; - -import com.google.auto.service.AutoService; -import java.net.URI; -import java.util.Properties; -import org.jclouds.azurecompute.domain.Region; -import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; -import org.jclouds.providers.ProviderMetadata; - -@AutoService(ProviderMetadata.class) -public class AzureComputeProviderMetadataLive extends AzureComputeProviderMetadata { - - @Override - public Builder toBuilder() { - return new Builder().fromProviderMetadata(this); - } - - public AzureComputeProviderMetadataLive() { - super(new Builder()); - } - - public static Properties defaultProperties() { - final Properties properties = AzureManagementApiMetadata.defaultProperties(); - properties.setProperty(TEMPLATE, "osFamily=UBUNTU,osVersionMatches=.*14\\.10,loginUser=jclouds," - + "locationId=" + BaseAzureComputeApiLiveTest.LOCATION); - properties.setProperty(OPERATION_TIMEOUT, "600000"); - properties.setProperty(OPERATION_POLL_INITIAL_PERIOD, "5"); - properties.setProperty(OPERATION_POLL_MAX_PERIOD, "15"); - properties.setProperty(TCP_RULE_FORMAT, "tcp_%s-%s"); - properties.setProperty(TCP_RULE_REGEXP, "tcp_\\d{1,5}-\\d{1,5}"); - return properties; - } - - public AzureComputeProviderMetadataLive(final Builder builder) { - super(builder); - } - - public static class Builder extends AzureComputeProviderMetadata.Builder { - - protected Builder() { - id("azurecompute") - .name("Microsoft Azure Service Management Service") - .apiMetadata(new AzureManagementApiMetadata()) - .endpoint("https://management.core.windows.net/SUBSCRIPTION_ID") - .homepage(URI.create("https://www.windowsazure.com/")) - .console(URI.create("https://windows.azure.com/default.aspx")) - .linkedServices("azureblob", "azurequeue", "azuretable") - .iso3166Codes(Region.iso3166Codes()) - .defaultProperties(AzureComputeProviderMetadataLive.defaultProperties()); - } - - @Override - public AzureComputeProviderMetadataLive build() { - return new AzureComputeProviderMetadataLive(this); - } - - @Override - public Builder fromProviderMetadata(final ProviderMetadata providerMetadata) { - super.fromProviderMetadata(providerMetadata); - return this; - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/binders/DeploymentParamsToXMLTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/binders/DeploymentParamsToXMLTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/binders/DeploymentParamsToXMLTest.java new file mode 100644 index 0000000..cc21a98 --- /dev/null +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/binders/DeploymentParamsToXMLTest.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * 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.azurecompute.binders; + +import static org.testng.Assert.assertEquals; +import java.net.URI; + +import org.jclouds.azurecompute.domain.DeploymentParams; +import org.jclouds.azurecompute.domain.OSImage; +import org.jclouds.azurecompute.domain.RoleSize; +import org.jclouds.http.HttpRequest; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** + * Tests behavior of {@code DeploymentParamsToXML} + */ +@Test(groups = "unit") +public class DeploymentParamsToXMLTest { + Injector injector = Guice.createInjector(); + DeploymentParamsToXML binder = injector + .getInstance(DeploymentParamsToXML.class); + + public void testDeploymentParamsToXmlString() { + DeploymentParams.Builder paramsBuilder = DeploymentParams.builder() + .name("name") + .os(OSImage.Type.LINUX) + .username("loginUser") + .password("loginPassword") + .sourceImageName("sourceImageName") + .mediaLink(URI.create("http://medialink")) + .size(RoleSize.Type.BASIC_A0) + .externalEndpoints(ImmutableSet.of(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22))) + .virtualNetworkName("virtualNetworkName") + .reservedIPName("reservedIPName") + .subnetNames(ImmutableList.of("subnetName")); + + HttpRequest request = HttpRequest.builder().method("POST").endpoint("http://localhost") + .addFormParam("InstanceId", "i-foo").build(); + request = binder.bindToRequest(request, paramsBuilder.build()); + assertEquals( + request.getPayload().getRawContent(), + "<Deployment xmlns=\"http://schemas.microsoft.com/windowsazure\"><Name>name</Name><DeploymentSlot>Production</DeploymentSlot><Label>name</Label><RoleList><Role><RoleName>name</RoleName><RoleType>PersistentVMRole</RoleType><ConfigurationSets><ConfigurationSet><ConfigurationSetType>LinuxProvisioningConfiguration</ConfigurationSetType><HostName>name</HostName><UserName>loginUser</UserName><UserPassword>loginPassword</UserPassword><DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication><SSH><PublicKeys/><KeyPairs/></SSH></ConfigurationSet><ConfigurationSet><ConfigurationSetType>NetworkConfiguration</ConfigurationSetType><InputEndpoints><InputEndpoint><LocalPort>22</LocalPort><Name>tcp_22-22</Name><Port>22</Port><Protocol>tcp</Protocol></InputEndpoint></InputEndpoints><SubnetNames><SubnetName>subnetName</SubnetName></SubnetNames></ConfigurationSet></ConfigurationSets><DataVirtualHardDisks/><OSVirtualHardDisk><HostCaching>ReadWrite</HostCaching><MediaLink>htt p://medialink</MediaLink><SourceImageName>sourceImageName</SourceImageName><OS>Linux</OS></OSVirtualHardDisk><RoleSize>Basic_A0</RoleSize></Role></RoleList><VirtualNetworkName>virtualNetworkName</VirtualNetworkName><ReservedIPName>reservedIPName</ReservedIPName></Deployment>"); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapterLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapterLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapterLiveTest.java deleted file mode 100644 index f4b6f56..0000000 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapterLiveTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * 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.azurecompute.compute; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNotNull; - -import com.google.common.base.Predicate; -import com.google.common.collect.Sets; -import java.util.Properties; -import java.util.Random; -import java.util.Set; - -import org.jclouds.azurecompute.AzureComputeApi; -import org.jclouds.azurecompute.domain.Deployment; -import org.jclouds.azurecompute.domain.RoleSize; -import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; -import org.jclouds.azurecompute.options.AzureComputeTemplateOptions; -import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials; -import org.jclouds.compute.domain.ExecResponse; -import org.jclouds.compute.domain.Template; -import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.ssh.SshClient; -import org.jclouds.ssh.SshClient.Factory; -import org.jclouds.sshj.config.SshjSshClientModule; - -import org.testng.annotations.Test; -import org.testng.annotations.AfterGroups; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.net.HostAndPort; -import com.google.common.net.InetAddresses; -import com.google.inject.Injector; -import com.google.inject.Module; -import java.util.Arrays; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.jclouds.util.Predicates2.retry; - -@Test(groups = "live", singleThreaded = true, testName = "AzureComputeServiceAdapterLiveTest") -public class AzureComputeServiceAdapterLiveTest extends BaseAzureComputeApiLiveTest { - - private AzureComputeServiceAdapter adapter; - - private TemplateBuilder templateBuilder; - - private Factory sshFactory; - - private String storageServiceName = null; - - @Override - protected String getStorageServiceName() { - if (storageServiceName == null) { - storageServiceName = String.format("%3.20sacsa", System.getProperty("user.name") + RAND).toLowerCase(); - } - return storageServiceName; - } - - @Override - protected AzureComputeApi create(final Properties props, final Iterable<Module> modules) { - final Injector injector = newBuilder().modules(modules).overrides(props).buildInjector(); - adapter = injector.getInstance(AzureComputeServiceAdapter.class); - templateBuilder = injector.getInstance(TemplateBuilder.class); - sshFactory = injector.getInstance(SshClient.Factory.class); - return injector.getInstance(AzureComputeApi.class); - } - - @Test - public void testListLocations() { - assertFalse(Iterables.isEmpty(adapter.listLocations()), "locations must not be empty"); - } - - @Test - public void testListImages() { - assertFalse(Iterables.isEmpty(adapter.listImages()), "images must not be empty"); - } - - /** - * Functionally equivalent to {@link AzureComputeServiceContextLiveTest#testLaunchNode()}. - */ - @Test - public void testCreateNodeWithGroupEncodedIntoNameThenStoreCredentials() { - final String groupName = String.format("%s%d-group-acsalt", - System.getProperty("user.name"), - new Random(999).nextLong()); - - final String name = String.format("%1.5s%dacsalt", System.getProperty("user.name"), new Random(999).nextInt()); - - templateBuilder.imageId(BaseAzureComputeApiLiveTest.IMAGE_NAME); - templateBuilder.hardwareId("BASIC_A0"); - templateBuilder.locationId(BaseAzureComputeApiLiveTest.LOCATION); - final Template template = templateBuilder.build(); - - // test passing custom options - final AzureComputeTemplateOptions options = template.getOptions().as(AzureComputeTemplateOptions.class); - options.inboundPorts(22); - options.storageAccountName(getStorageServiceName()); - options.virtualNetworkName(VIRTUAL_NETWORK_NAME); - options.subnetName(DEFAULT_SUBNET_NAME); - options.addressSpaceAddressPrefix(DEFAULT_ADDRESS_SPACE); - options.subnetAddressPrefix(DEFAULT_SUBNET_ADDRESS_SPACE); - options.nodeNames(Arrays.asList(name)); - - NodeAndInitialCredentials<Deployment> deployment = null; - try { - deployment = adapter.createNodeWithGroupEncodedIntoName(groupName, name, template); - assertEquals(deployment.getNode().name(), name); - assertEquals(deployment.getNodeId(), deployment.getNode().name()); - - // wait for node to start... - final Set<Deployment> nodes = Sets.newHashSet(); - retry(new Predicate<String>() { - - @Override - public boolean apply(final String input) { - final Deployment node = adapter.getNode(input); - if (node != null) { - nodes.add(node); - } - return !nodes.isEmpty(); - } - }, 600, 30, 30, SECONDS).apply(name); - - assertFalse(nodes.isEmpty()); - final Deployment node = nodes.iterator().next(); - assert InetAddresses.isInetAddress(node.virtualIPs().get(0).address()) : deployment; - - final SshClient client = sshFactory.create( - HostAndPort.fromParts(node.virtualIPs().get(0).address(), 22), - deployment.getCredentials()); - client.connect(); - final ExecResponse hello = client.exec("echo hello"); - assertEquals(hello.getOutput().trim(), "hello"); - } finally { - if (deployment != null) { - adapter.destroyNode(deployment.getNodeId()); - } - } - } - - @Test - public void testListHardwareProfiles() { - final Iterable<RoleSize> roleSizes = adapter.listHardwareProfiles(); - assertFalse(Iterables.isEmpty(roleSizes)); - - for (RoleSize roleSize : roleSizes) { - assertNotNull(roleSize); - } - } - - @AfterGroups(groups = "live", alwaysRun = true) - @Override - protected void tearDown() { - super.tearDown(); - } - - @Override - protected Iterable<Module> setupModules() { - return ImmutableSet.<Module>of(getLoggingModule(), new SshjSshClientModule()); - } - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceContextLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceContextLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceContextLiveTest.java index 925f8a8..dbcfd38 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceContextLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceContextLiveTest.java @@ -17,69 +17,31 @@ package org.jclouds.azurecompute.compute; import static org.assertj.core.api.Assertions.assertThat; -import static org.testng.Assert.assertTrue; -import java.util.Arrays; +import static org.jclouds.compute.predicates.NodePredicates.inGroup; +import static org.jclouds.compute.predicates.NodePredicates.runningInGroup; +import java.util.Map; import java.util.Random; import java.util.Set; -import org.jclouds.azurecompute.AzureComputeApi; +import org.jclouds.azurecompute.compute.options.AzureComputeTemplateOptions; import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; -import org.jclouds.azurecompute.options.AzureComputeTemplateOptions; -import org.jclouds.azurecompute.util.ConflictManagementPredicate; import org.jclouds.compute.RunNodesException; +import org.jclouds.compute.RunScriptOnNodesException; import org.jclouds.compute.domain.ExecResponse; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest; -import org.jclouds.ssh.SshClient; import org.jclouds.sshj.config.SshjSshClientModule; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; +import org.testng.Assert; import org.testng.annotations.Test; -import com.google.common.collect.Iterables; -import com.google.common.reflect.TypeToken; import com.google.inject.Module; @Test(groups = "live", testName = "AzureComputeServiceContextLiveTest") public class AzureComputeServiceContextLiveTest extends BaseComputeServiceContextLiveTest { - private static final int RAND = new Random().nextInt(999); - - private AzureComputeApi api; - - private String storageServiceName = null; - - protected String getStorageServiceName() { - if (storageServiceName == null) { - storageServiceName = String.format("%3.20sacsc", System.getProperty("user.name") + RAND).toLowerCase(); - } - return storageServiceName; - } - - @BeforeClass - public void setup() { - api = newBuilder(). - modules(setupModules()). - overrides(setupProperties()). - buildApi(new TypeToken<AzureComputeApi>(getClass()) { - - private static final long serialVersionUID = 309104475566522958L; - - }); - } - - @AfterClass(alwaysRun = true) - public void tearDown() { - assertTrue(new ConflictManagementPredicate(api) { - - @Override - protected String operation() { - return api.getStorageAccountApi().delete(getStorageServiceName()); - } - }.apply(getStorageServiceName())); - } + private static final int COUNT = 2; @Override protected Module getSshModule() { @@ -87,56 +49,79 @@ public class AzureComputeServiceContextLiveTest extends BaseComputeServiceContex } public AzureComputeServiceContextLiveTest() { - super(); - provider = "azurecompute"; } - /** - * Functionally equivalent to - * {@link AzureComputeServiceAdapterLiveTest#testCreateNodeWithGroupEncodedIntoNameThenStoreCredentials}. - * - * @throws RunNodesException - */ + @Test - public void testLaunchNode() throws RunNodesException { + public void testWindowsNode() throws RunNodesException { + final String groupName = String.format("win-%s", System.getProperty("user.name")); + + final TemplateBuilder templateBuilder = view.getComputeService().templateBuilder(); + //templateBuilder.imageId("3a50f22b388a4ff7ab41029918570fa6__Windows-Server-2012-Essentials-20141204-enus"); + templateBuilder.imageId("a699494373c04fc0bc8f2bb1389d6106__Nano_TP4_Azure_20151118_8GB.vhd"); + templateBuilder.hardwareId("BASIC_A2"); + templateBuilder.locationId(BaseAzureComputeApiLiveTest.LOCATION); + final Template template = templateBuilder.build(); - final String groupName = String.format("%s%d-group-acsclt", - System.getProperty("user.name"), - new Random(999).nextInt()); + // test passing custom options + final AzureComputeTemplateOptions options = template.getOptions().as(AzureComputeTemplateOptions.class); + options.inboundPorts(5985); - final String name = String.format("%1.5s%dacsclt", System.getProperty("user.name"), new Random(999).nextInt()); + try { + Set<? extends NodeMetadata> nodes = view.getComputeService().createNodesInGroup(groupName, 1, template); + assertThat(nodes).hasSize(1); + } finally { + view.getComputeService().destroyNodesMatching(inGroup(groupName)); + } + } + + @Test + public void testLaunchNodes() throws RunNodesException { + final int rand = new Random().nextInt(999); + final String groupName = String.format("%s%d-group-acsclt", System.getProperty("user.name"), rand); final TemplateBuilder templateBuilder = view.getComputeService().templateBuilder(); templateBuilder.imageId(BaseAzureComputeApiLiveTest.IMAGE_NAME); templateBuilder.hardwareId("BASIC_A0"); templateBuilder.locationId(BaseAzureComputeApiLiveTest.LOCATION); - final Template tmp = templateBuilder.build(); + final Template template = templateBuilder.build(); // test passing custom options - final AzureComputeTemplateOptions options = tmp.getOptions().as(AzureComputeTemplateOptions.class); + final AzureComputeTemplateOptions options = template.getOptions().as(AzureComputeTemplateOptions.class); options.inboundPorts(22); - options.storageAccountName(getStorageServiceName()); - options.virtualNetworkName(BaseAzureComputeApiLiveTest.VIRTUAL_NETWORK_NAME); - options.subnetName(BaseAzureComputeApiLiveTest.DEFAULT_SUBNET_NAME); - options.addressSpaceAddressPrefix(BaseAzureComputeApiLiveTest.DEFAULT_ADDRESS_SPACE); - options.subnetAddressPrefix(BaseAzureComputeApiLiveTest.DEFAULT_SUBNET_ADDRESS_SPACE); - options.nodeNames(Arrays.asList(name)); - - NodeMetadata node = null; + try { - final Set<? extends NodeMetadata> nodes = view.getComputeService().createNodesInGroup(groupName, 1, tmp); - node = Iterables.getOnlyElement(nodes); + Set<? extends NodeMetadata> nodes = view.getComputeService().createNodesInGroup(groupName, COUNT, template); + assertThat(nodes).hasSize(COUNT); - final SshClient client = view.utils().sshForNode().apply(node); - client.connect(); - final ExecResponse hello = client.exec("echo hello"); - assertThat(hello.getOutput().trim()).isEqualTo("hello"); - } finally { - if (node != null) { - view.getComputeService().destroyNode(node.getId()); + Map<? extends NodeMetadata, ExecResponse> responses = view.getComputeService().runScriptOnNodesMatching(runningInGroup(groupName), "echo hello"); + assertThat(responses).hasSize(COUNT); + + for (ExecResponse execResponse : responses.values()) { + assertThat(execResponse.getOutput().trim()).isEqualTo("hello"); } + } catch (RunScriptOnNodesException e) { + Assert.fail(); + } finally { + view.getComputeService().destroyNodesMatching(inGroup(groupName)); } } + @Test(expectedExceptions = { IllegalStateException.class }) + public void testNotExistingStorageAccount() throws RunNodesException { + final int rand = new Random().nextInt(999); + final String groupName = String.format("%s%d-group-acsclt", System.getProperty("user.name"), rand); + + final String storageServiceName = "not3x1st1ng"; + + final Template template = view.getComputeService().templateBuilder().build(); + + // test passing custom options + final AzureComputeTemplateOptions options = template.getOptions().as(AzureComputeTemplateOptions.class); + options.storageAccountName(storageServiceName); + + Set<? extends NodeMetadata> nodes = view.getComputeService().createNodesInGroup(groupName, 1, template); + } + } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceLiveTest.java index e9b4f29..6eb0220 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceLiveTest.java @@ -16,20 +16,27 @@ */ package org.jclouds.azurecompute.compute; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.inject.Module; +import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.domain.Template; +import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.internal.BaseComputeServiceLiveTest; import org.jclouds.sshj.config.SshjSshClientModule; import org.testng.annotations.Test; -@Test(groups = {"integration", "live"}, singleThreaded = true, testName = "AzureComputeServiceLiveTest") +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Module; + +@Test(groups = {"integration", "live"}, singleThreaded = true, testName = "AzureComputeServiceLiveTest", alwaysRun = false) public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest { public AzureComputeServiceLiveTest() { super(); provider = "azurecompute"; + // this is 30 seconds by default, but Azure will take anyway longer because we need to wait for a non-null + // Deployment object to be returned: see the end of AzureComputeServiceAdapter#createNodeWithGroupEncodedIntoName + nonBlockDurationSeconds = 600; } @Override @@ -43,15 +50,14 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest { } @Override - public void testOptionToNotBlock() throws Exception { - // this is 30 seconds by default, but Azure will take anyway longer because we need to wait for a non-null - // Deployment object to be returned: see the end of AzureComputeServiceAdapter#createNodeWithGroupEncodedIntoName - nonBlockDurationSeconds = 120; - super.testOptionToNotBlock(); - } - - @Override protected Module getSshModule() { return new SshjSshClientModule(); } + + protected Template buildTemplate(TemplateBuilder templateBuilder) { + return templateBuilder.imageId(BaseAzureComputeApiLiveTest.IMAGE_NAME) + .hardwareId("BASIC_A1") + .locationId(BaseAzureComputeApiLiveTest.LOCATION) + .build(); + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiLiveTest.java index 17e5f3a..6982300 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiLiveTest.java @@ -19,30 +19,29 @@ package org.jclouds.azurecompute.features; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; import static org.jclouds.util.Predicates2.retry; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import static org.testng.Assert.assertEquals; - +import java.util.List; +import java.util.logging.Level; import java.util.logging.Logger; import org.jclouds.azurecompute.compute.AzureComputeServiceAdapter; import org.jclouds.azurecompute.domain.CloudService; +import org.jclouds.azurecompute.domain.CloudServiceProperties; import org.jclouds.azurecompute.domain.Deployment; import org.jclouds.azurecompute.domain.DeploymentParams; import org.jclouds.azurecompute.domain.OSImage; +import org.jclouds.azurecompute.domain.Role; import org.jclouds.azurecompute.domain.RoleSize; -import org.jclouds.azurecompute.domain.CloudServiceProperties; import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; +import org.jclouds.azurecompute.util.ConflictManagementPredicate; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; -import java.util.List; -import java.util.logging.Level; -import org.jclouds.azurecompute.domain.Role; -import org.jclouds.azurecompute.util.ConflictManagementPredicate; +import com.google.common.collect.ImmutableSet; @Test(groups = "live", testName = "DeploymentApiLiveTest", singleThreaded = true) public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest { @@ -93,10 +92,8 @@ public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest { .mediaLink(AzureComputeServiceAdapter.createMediaLink(storageService.serviceName(), DEPLOYMENT)) .username("test") .password("supersecurePassword1!") - .size(RoleSize.Type.BASIC_A2) - .subnetName(Iterables.get(virtualNetworkSite.subnets(), 0).name()) - .virtualNetworkName(virtualNetworkSite.name()) - .externalEndpoint(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22)) + .size(RoleSize.Type.BASIC_A0) + .externalEndpoints(ImmutableSet.of(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22))) .build(); final String requestId = api().create(params); assertTrue(operationSucceeded.apply(requestId), requestId); @@ -110,7 +107,6 @@ public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest { assertThat(deployment.slot()).isEqualTo(Deployment.Slot.PRODUCTION); assertThat(deployment.roleList().size()).isEqualTo(1); assertThat(deployment.roleInstanceList().size()).isEqualTo(1); - assertThat(deployment.virtualNetworkName()).isEqualTo(virtualNetworkSite.name()); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiMockTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiMockTest.java index 8fecadc..7d35311 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiMockTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiMockTest.java @@ -19,7 +19,6 @@ package org.jclouds.azurecompute.features; import static org.jclouds.azurecompute.domain.DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort; import static org.jclouds.azurecompute.domain.DeploymentParams.ExternalEndpoint.inboundUdpToLocalPort; import static org.testng.Assert.assertEquals; - import java.net.URI; import org.jclouds.azurecompute.domain.DeploymentParams; @@ -30,6 +29,7 @@ import org.jclouds.azurecompute.xml.DeploymentHandlerTest; import org.jclouds.azurecompute.xml.ListOSImagesHandlerTest; import org.testng.annotations.Test; +import com.google.common.collect.ImmutableSet; import com.squareup.okhttp.mockwebserver.MockWebServer; @Test(groups = "unit", testName = "DeploymentApiMockTest") @@ -51,8 +51,8 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest { .username("username").password("testpwd") .virtualNetworkName("my-virtualNetworkName") .reservedIPName("myreservedip") - .externalEndpoint(inboundTcpToLocalPort(80, 8080)) - .externalEndpoint(inboundUdpToLocalPort(53, 53)).build(); + .externalEndpoints(ImmutableSet.of(inboundTcpToLocalPort(80, 8080), inboundUdpToLocalPort(53, 53))) + .build(); assertEquals(api.create(params), "request-1"); @@ -77,8 +77,8 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest { .sourceImageName(OSImage.name()).mediaLink(OSImage.mediaLink()).os(OSImage.os()) .username("username").password("testpwd") .virtualNetworkName("my-virtualNetworkName") - .externalEndpoint(inboundTcpToLocalPort(80, 8080)) - .externalEndpoint(inboundUdpToLocalPort(53, 53)).build(); + .externalEndpoints(ImmutableSet.of(inboundTcpToLocalPort(80, 8080), inboundUdpToLocalPort(53, 53))) + .build(); assertEquals(api.create(params), "request-1"); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java index 1943077..1847f1f 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java @@ -98,7 +98,8 @@ public class DiskApiLiveTest extends AbstractAzureComputeApiLiveTest { } if (disk.sourceImage() != null) { - assertTrue(images.contains(disk.sourceImage()), "SourceImage not in " + images + " :" + disk); + //TODO disk can be generated from a `VM Image` that listDisk doesn't consider + // assertTrue(images.contains(disk.sourceImage()), "SourceImage not in " + images + " :" + disk); } if (disk.affinityGroup() != null) { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/NetworkSecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/NetworkSecurityGroupApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/NetworkSecurityGroupApiLiveTest.java index 763e1ce..7e41eb7 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/NetworkSecurityGroupApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/NetworkSecurityGroupApiLiveTest.java @@ -28,9 +28,6 @@ import org.jclouds.azurecompute.domain.NetworkSecurityGroup; import org.jclouds.azurecompute.domain.Rule; import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; -import static org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest.DEFAULT_SUBNET_NAME; -import static org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest.LOCATION; -import static org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest.VIRTUAL_NETWORK_NAME; import org.jclouds.azurecompute.util.ConflictManagementPredicate; import org.testng.annotations.AfterClass; @@ -44,14 +41,6 @@ public class NetworkSecurityGroupApiLiveTest extends BaseAzureComputeApiLiveTest private static final String GROUP2 = System.getProperty("user.name") + RAND + "-2"; - public static final String ADDRESS_SPACE = "10.10.0.0/20"; - - public static final String SUBNET_ADDRESS_SPACE = "10.10.0.0/23"; - - public static final String NETWORK_NAME = "secgrp-vnetsite"; - - public static final String SUBNET_NAME = "secgrp-subnet"; - @BeforeClass public void groupSetup() { // ---------------------------- @@ -108,7 +97,7 @@ public class NetworkSecurityGroupApiLiveTest extends BaseAzureComputeApiLiveTest assertEquals(group.name(), GROUP1); assertEquals(group.label(), GROUP1 + " security group"); assertEquals(group.location(), LOCATION); - assertNull(group.state()); + assertTrue(group.state() == NetworkSecurityGroup.State.CREATED); assertTrue(group.rules().isEmpty()); } @@ -118,7 +107,7 @@ public class NetworkSecurityGroupApiLiveTest extends BaseAzureComputeApiLiveTest assertEquals(group.name(), GROUP2); assertEquals(group.label(), GROUP2 + " security group"); assertEquals(group.location(), LOCATION); - assertNull(group.state()); + assertTrue(group.state() == NetworkSecurityGroup.State.CREATED); assertFalse(group.rules().isEmpty()); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiLiveTest.java index ab1f8df..edff894 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiLiveTest.java @@ -22,26 +22,20 @@ import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import org.jclouds.azurecompute.domain.AffinityGroup; import org.jclouds.azurecompute.domain.Location; import org.jclouds.azurecompute.domain.OSImage; import org.jclouds.azurecompute.internal.AbstractAzureComputeApiLiveTest; - import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.google.common.base.Function; -import com.google.common.base.Splitter; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; @Test(groups = "live", testName = "OSImageApiLiveTest") public class OSImageApiLiveTest extends AbstractAzureComputeApiLiveTest { private ImmutableSet<String> locations; - private ImmutableSet<String> groups; - @BeforeClass(groups = {"integration", "live"}) @Override public void setup() { @@ -54,13 +48,6 @@ public class OSImageApiLiveTest extends AbstractAzureComputeApiLiveTest { return location.name(); } })); - groups = ImmutableSet.copyOf(transform(api.getAffinityGroupApi().list(), new Function<AffinityGroup, String>() { - - @Override - public String apply(final AffinityGroup group) { - return group.name(); - } - })); } public void testList() { @@ -84,10 +71,6 @@ public class OSImageApiLiveTest extends AbstractAzureComputeApiLiveTest { "MediaLink should be an http(s) url" + osImage); } - ImmutableSet<String> osImageLocations = ImmutableSet.copyOf(Splitter.on(';').splitToList(osImage.location())); - assertFalse(Sets.intersection(osImageLocations, locations).isEmpty(), - "No shared locations between " + locations + " and " + osImageLocations); - // Ex. Dirty data in RightScale eula field comes out as an empty string. assertFalse(osImage.eula().contains("")); if (osImage.affinityGroup() != null) { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/VMImageApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VMImageApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VMImageApiLiveTest.java index 2b074fd..556e73f 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VMImageApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VMImageApiLiveTest.java @@ -22,19 +22,19 @@ import static org.jclouds.util.Predicates2.retry; import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; +import java.net.URI; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableSet; - -import com.google.common.collect.Iterables; import org.jclouds.azurecompute.compute.AzureComputeServiceAdapter; +import org.jclouds.azurecompute.domain.CaptureVMImageParams; +import org.jclouds.azurecompute.domain.CloudService; import org.jclouds.azurecompute.domain.Deployment; import org.jclouds.azurecompute.domain.DeploymentParams; -import org.jclouds.azurecompute.domain.VMImage; -import org.jclouds.azurecompute.domain.RoleSize; import org.jclouds.azurecompute.domain.OSImage; -import org.jclouds.azurecompute.domain.CloudService; -import org.jclouds.azurecompute.domain.CaptureVMImageParams; +import org.jclouds.azurecompute.domain.RoleSize; +import org.jclouds.azurecompute.domain.VMImage; import org.jclouds.azurecompute.domain.VMImageParams; import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; import org.jclouds.azurecompute.util.ConflictManagementPredicate; @@ -42,10 +42,9 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import java.net.URI; -import java.util.List; -import java.util.Date; -import java.text.SimpleDateFormat; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; @Test(groups = "live", testName = "VMImageApiLiveTest") public class VMImageApiLiveTest extends BaseAzureComputeApiLiveTest { @@ -91,9 +90,7 @@ public class VMImageApiLiveTest extends BaseAzureComputeApiLiveTest { .username("test") .password("supersecurePassword1!") .size(RoleSize.Type.BASIC_A2) - .subnetName(Iterables.get(virtualNetworkSite.subnets(), 0).name()) - .virtualNetworkName(virtualNetworkSite.name()) - .externalEndpoint(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22)) + .externalEndpoints(ImmutableSet.of(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22))) .build(); Deployment deployment = getOrCreateDeployment(cloudService.name(), params); Deployment.RoleInstance roleInstance = getFirstRoleInstanceInDeployment(DEPLOYMENT); @@ -201,6 +198,12 @@ public class VMImageApiLiveTest extends BaseAzureComputeApiLiveTest { return api.getDiskApi().delete(diskName); } }.apply(diskName)); + assertTrue(new ConflictManagementPredicate(api) { + @Override + protected String operation() { + return api.getCloudServiceApi().delete(cloudService.name()); + } + }.apply(cloudService.name())); super.tearDown(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiLiveTest.java index 7b67b85..22d50e6 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiLiveTest.java @@ -20,10 +20,6 @@ import static java.util.concurrent.TimeUnit.SECONDS; import static org.jclouds.azurecompute.domain.Deployment.InstanceStatus.READY_ROLE; import static org.jclouds.util.Predicates2.retry; import static org.testng.Assert.assertTrue; - -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; - import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -42,6 +38,10 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; + /* * Note: Live test for CaptureVMImage method is in VMImageApiLiveTest class */ @@ -75,7 +75,7 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { RoleInstance roleInstance = getFirstRoleInstanceInDeployment(input); return roleInstance != null && roleInstance.instanceStatus() == READY_ROLE; } - }, 600, 5, 5, SECONDS); + }, 600, 5, 15, SECONDS); roleInstanceStopped = retry(new Predicate<String>() { @@ -84,7 +84,7 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { RoleInstance roleInstance = getFirstRoleInstanceInDeployment(input); return roleInstance != null && roleInstance.instanceStatus() == Deployment.InstanceStatus.STOPPED_VM; } - }, 600, 5, 5, SECONDS); + }, 600, 5, 15, SECONDS); final DeploymentParams params = DeploymentParams.builder() .name(DEPLOYMENT) @@ -93,10 +93,8 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { .mediaLink(AzureComputeServiceAdapter.createMediaLink(storageService.serviceName(), DEPLOYMENT)) .username("test") .password("supersecurePassword1!") - .size(RoleSize.Type.BASIC_A2) - .subnetName(Iterables.get(virtualNetworkSite.subnets(), 0).name()) - .virtualNetworkName(virtualNetworkSite.name()) - .externalEndpoint(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22)) + .size(RoleSize.Type.BASIC_A0) + .externalEndpoints(ImmutableSet.of(DeploymentParams.ExternalEndpoint.inboundTcpToLocalPort(22, 22))) .build(); getOrCreateDeployment(cloudService.name(), params); RoleInstance roleInstance = getFirstRoleInstanceInDeployment(DEPLOYMENT); @@ -173,8 +171,9 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { Logger.getAnonymousLogger().log(Level.INFO, "roleInstance restarted: {0}", roleInstance); } - @AfterClass(alwaysRun = true) - public void cleanup() { + @AfterClass + @Override + protected void tearDown() { if (cloudService != null && api.getDeploymentApiForService(cloudService.name()).get(DEPLOYMENT) != null) { final List<Role> roles = api.getDeploymentApiForService(cloudService.name()).get(DEPLOYMENT).roleList(); @@ -186,14 +185,6 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { } }.apply(DEPLOYMENT)); - assertTrue(new ConflictManagementPredicate(api) { - - @Override - protected String operation() { - return api.getCloudServiceApi().delete(cloudService.name()); - } - }.apply(cloudService.name())); - for (Role r : roles) { final Role.OSVirtualHardDisk disk = r.osVirtualHardDisk(); if (disk != null) { @@ -206,6 +197,16 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { }.apply(disk.diskName())); } } + + assertTrue(new ConflictManagementPredicate(api) { + + @Override + protected String operation() { + return api.getCloudServiceApi().delete(cloudService.name()); + } + }.apply(cloudService.name())); + + super.tearDown(); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiLiveTest.java index 0994f66..705a377 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiLiveTest.java @@ -19,35 +19,37 @@ package org.jclouds.azurecompute.features; import static org.assertj.core.api.Assertions.assertThat; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import static org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest.VIRTUAL_NETWORK_NAME; - -import com.google.common.base.Predicates; +import java.util.List; +import org.jclouds.azurecompute.AzureTestUtils; import org.jclouds.azurecompute.domain.NetworkConfiguration; import org.jclouds.azurecompute.domain.NetworkConfiguration.VirtualNetworkSite; import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest; - +import org.jclouds.azurecompute.util.ConflictManagementPredicate; +import org.testng.annotations.AfterSuite; +import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import org.jclouds.azurecompute.AzureTestUtils; -import org.jclouds.azurecompute.util.ConflictManagementPredicate; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeSuite; - -import java.util.List; - @Test(groups = "live", testName = "VirtualNetworkApiLiveTest", singleThreaded = true) public class VirtualNetworkApiLiveTest extends BaseAzureComputeApiLiveTest { + private static final String DEFAULT_ADDRESS_SPACE = "10.0.0.0/20"; + private static final String DEFAULT_SUBNET_ADDRESS_SPACE = "10.0.0.0/23"; + private List<VirtualNetworkSite> initialVirtualNetworkSite; + @BeforeSuite @Override public void setup() { super.setup(); + initialVirtualNetworkSite = AzureTestUtils.getVirtualNetworkSite(api); + + virtualNetworkSite = getOrCreateVirtualNetworkSite(VIRTUAL_NETWORK_NAME, LOCATION); + final List<VirtualNetworkSite> virtualNetworkSites = Lists.newArrayList(Iterables.filter( AzureTestUtils.getVirtualNetworkSite(api), new AzureTestUtils.SameVirtualNetworkSiteNamePredicate(VIRTUAL_NETWORK_NAME))); @@ -74,18 +76,13 @@ public class VirtualNetworkApiLiveTest extends BaseAzureComputeApiLiveTest { protected void tearDown() { super.tearDown(); - final List<VirtualNetworkSite> virtualNetworkSites = Lists.newArrayList(Iterables.filter(api. - getVirtualNetworkApi().list(), - Predicates.not(new AzureTestUtils.SameVirtualNetworkSiteNamePredicate(VIRTUAL_NETWORK_NAME)))); - + final NetworkConfiguration networkConfiguration = NetworkConfiguration.create(NetworkConfiguration.VirtualNetworkConfiguration.create(null, initialVirtualNetworkSite)); assertTrue(new ConflictManagementPredicate(api) { - @Override protected String operation() { - return api.getVirtualNetworkApi().set(NetworkConfiguration.create( - NetworkConfiguration.VirtualNetworkConfiguration.create(null, virtualNetworkSites))); + return api.getVirtualNetworkApi().set(networkConfiguration); } - }.apply(VIRTUAL_NETWORK_NAME)); + }.apply("Revert VirtualNetworkConfiguration")); } @Test http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/internal/AbstractAzureComputeApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/internal/AbstractAzureComputeApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/internal/AbstractAzureComputeApiLiveTest.java index 155549e..47bfb5a 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/internal/AbstractAzureComputeApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/internal/AbstractAzureComputeApiLiveTest.java @@ -16,14 +16,22 @@ */ package org.jclouds.azurecompute.internal; -import com.google.common.base.Predicate; -import java.util.Random; import static java.util.concurrent.TimeUnit.SECONDS; +import static org.jclouds.azurecompute.config.AzureComputeProperties.OPERATION_POLL_INITIAL_PERIOD; +import static org.jclouds.azurecompute.config.AzureComputeProperties.OPERATION_POLL_MAX_PERIOD; +import static org.jclouds.azurecompute.config.AzureComputeProperties.OPERATION_TIMEOUT; +import static org.jclouds.azurecompute.config.AzureComputeProperties.TCP_RULE_FORMAT; +import static org.jclouds.azurecompute.config.AzureComputeProperties.TCP_RULE_REGEXP; +import java.util.Properties; +import java.util.Random; + import org.jclouds.apis.BaseApiLiveTest; import org.jclouds.azurecompute.AzureComputeApi; +import org.jclouds.azurecompute.util.ConflictManagementPredicate; +import org.jclouds.compute.config.ComputeServiceProperties; import org.testng.annotations.BeforeClass; -import org.jclouds.azurecompute.util.ConflictManagementPredicate; +import com.google.common.base.Predicate; public abstract class AbstractAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi> { @@ -35,6 +43,18 @@ public abstract class AbstractAzureComputeApiLiveTest extends BaseApiLiveTest<Az provider = "azurecompute"; } + @Override protected Properties setupProperties() { + Properties properties = super.setupProperties(); + properties.put(ComputeServiceProperties.POLL_INITIAL_PERIOD, 1000); + properties.put(ComputeServiceProperties.POLL_MAX_PERIOD, 10000); + properties.setProperty(OPERATION_TIMEOUT, "60000"); + properties.setProperty(OPERATION_POLL_INITIAL_PERIOD, "5"); + properties.setProperty(OPERATION_POLL_MAX_PERIOD, "15"); + properties.setProperty(TCP_RULE_FORMAT, "tcp_%s-%s"); + properties.setProperty(TCP_RULE_REGEXP, "tcp_\\d{1,5}-\\d{1,5}"); + return properties; + } + @BeforeClass @Override public void setup() { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/f9b393de/azurecompute/src/test/java/org/jclouds/azurecompute/internal/BaseAzureComputeApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/internal/BaseAzureComputeApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/internal/BaseAzureComputeApiLiveTest.java index adf716d..f32f943 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/internal/BaseAzureComputeApiLiveTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/internal/BaseAzureComputeApiLiveTest.java @@ -79,7 +79,6 @@ public class BaseAzureComputeApiLiveTest extends AbstractAzureComputeApiLiveTest super.setup(); operationSucceeded = new ConflictManagementPredicate(api, 600, 5, 5, SECONDS); - virtualNetworkSite = getOrCreateVirtualNetworkSite(VIRTUAL_NETWORK_NAME, LOCATION); final CreateStorageServiceParams params = CreateStorageServiceParams.builder(). serviceName(getStorageServiceName()). @@ -96,12 +95,14 @@ public class BaseAzureComputeApiLiveTest extends AbstractAzureComputeApiLiveTest super.tearDown(); assertTrue(new ConflictManagementPredicate(api) { - @Override protected String operation() { return api.getStorageAccountApi().delete(getStorageServiceName()); } }.apply(getStorageServiceName())); + + + } protected CloudService getOrCreateCloudService(final String cloudServiceName, final String location) {
