You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2015/02/27 12:31:17 UTC
[2/4] jclouds-labs git commit: AzureCompute: initial work to support
ComputeServiceAdapter
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ResourceExtensionReferenceHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ResourceExtensionReferenceHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ResourceExtensionReferenceHandler.java
new file mode 100644
index 0000000..aafaf60
--- /dev/null
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ResourceExtensionReferenceHandler.java
@@ -0,0 +1,100 @@
+/*
+ * 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.xml;
+
+import static org.jclouds.util.SaxUtils.currentOrNull;
+import java.util.List;
+
+import org.jclouds.azurecompute.domain.Role.ResourceExtensionReference;
+import org.jclouds.azurecompute.domain.Role.ResourceExtensionReference.ResourceExtensionParameterValue;
+import org.jclouds.http.functions.ParseSax;
+import org.xml.sax.Attributes;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
+public class ResourceExtensionReferenceHandler extends ParseSax.HandlerForGeneratedRequestWithResult<ResourceExtensionReference> {
+
+ private String referenceName;
+ private String publisher;
+ private String name;
+ private String version;
+ private List<ResourceExtensionParameterValue> resourceExtensionParameterValues = Lists.newArrayList();
+ private String state;
+
+ private final ResourceExtensionParameterValueHandler resourceExtensionParameterValueHandler;
+ private boolean inResourceExtensionParameterValue = false;
+ private final StringBuilder currentText = new StringBuilder();
+
+ @Inject
+ ResourceExtensionReferenceHandler(ResourceExtensionParameterValueHandler resourceExtensionParameterValueHandler) {
+ this.resourceExtensionParameterValueHandler = resourceExtensionParameterValueHandler;
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes) {
+ if (qName.equals("ResourceExtensionParameterValue")) {
+ inResourceExtensionParameterValue = true;
+ }
+ if (inResourceExtensionParameterValue) {
+ resourceExtensionParameterValueHandler.startElement(uri, localName, qName, attributes);
+ }
+ }
+
+ @Override
+ public ResourceExtensionReference getResult() {
+ ResourceExtensionReference result = ResourceExtensionReference.create(referenceName, publisher, name, version,
+ resourceExtensionParameterValues, state);
+ resetState(); // handler is called in a loop.
+ return result;
+ }
+
+ private void resetState() {
+ referenceName = publisher = version = name = state = null;
+ resourceExtensionParameterValues = Lists.newArrayList();
+ }
+
+ @Override
+ public void endElement(String ignoredUri, String ignoredName, String qName) {
+ if (qName.equals("ResourceExtensionParameterValue")) {
+ inResourceExtensionParameterValue = false;
+ resourceExtensionParameterValues.add(resourceExtensionParameterValueHandler.getResult());
+ } else if (inResourceExtensionParameterValue) {
+ resourceExtensionParameterValueHandler.endElement(ignoredUri, ignoredName, qName);
+ } else if (qName.equals("ReferenceName")) {
+ referenceName = currentOrNull(currentText);
+ } else if (qName.equals("Publisher")) {
+ publisher = currentOrNull(currentText);
+ } else if (qName.equals("Name")) {
+ name = currentOrNull(currentText);
+ } else if (qName.equals("Version")) {
+ version = currentOrNull(currentText);
+ } else if (qName.equals("State")) {
+ state = currentOrNull(currentText);
+ }
+ currentText.setLength(0);
+ }
+
+ @Override
+ public void characters(char ch[], int start, int length) {
+ if (inResourceExtensionParameterValue) {
+ resourceExtensionParameterValueHandler.characters(ch, start, length);
+ } else {
+ currentText.append(ch, start, length);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/main/java/org/jclouds/azurecompute/xml/RoleHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/RoleHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/RoleHandler.java
index f066526..e51955e 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/RoleHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/RoleHandler.java
@@ -48,17 +48,20 @@ public class RoleHandler extends ParseSax.HandlerForGeneratedRequestWithResult<R
private boolean inConfigurationSets;
private boolean inOSVirtualHardDisk;
private boolean inDataVirtualHardDisks;
+ private boolean inResourceExtensionReference;
private final ConfigurationSetHandler configurationSetHandler;
private final OSVirtualHardDiskHandler osVirtualDiskHandler;
private final DataVirtualHardDiskHandler dataVirtualHardDiskHandler;
+ private final ResourceExtensionReferenceHandler resourceExtensionReferenceHandler;
@Inject
RoleHandler(ConfigurationSetHandler configurationSetHandler, OSVirtualHardDiskHandler osVirtualDiskHandler,
- DataVirtualHardDiskHandler dataVirtualHardDiskHandler) {
+ DataVirtualHardDiskHandler dataVirtualHardDiskHandler, ResourceExtensionReferenceHandler resourceExtensionReferenceHandler) {
this.configurationSetHandler = configurationSetHandler;
this.osVirtualDiskHandler = osVirtualDiskHandler;
this.dataVirtualHardDiskHandler = dataVirtualHardDiskHandler;
+ this.resourceExtensionReferenceHandler = resourceExtensionReferenceHandler;
}
private StringBuilder currentText = new StringBuilder();
@@ -79,6 +82,13 @@ public class RoleHandler extends ParseSax.HandlerForGeneratedRequestWithResult<R
if (inDataVirtualHardDisks) {
dataVirtualHardDiskHandler.startElement(uri, localName, qName, attributes);
}
+ if (qName.equals("ResourceExtensionReference")) {
+ inResourceExtensionReference = true;
+ }
+ if (inResourceExtensionReference) {
+ resourceExtensionReferenceHandler.startElement(uri, localName, qName, attributes);
+ }
+
}
private void resetState() {
@@ -138,6 +148,11 @@ public class RoleHandler extends ParseSax.HandlerForGeneratedRequestWithResult<R
if (provisionGuestAgentString != null) {
provisionGuestAgent = Boolean.valueOf(provisionGuestAgentString);
}
+ } else if (qName.equals("ResourceExtensionReferences")) {
+ inResourceExtensionReference = false;
+ resourceExtensionReferences.add(resourceExtensionReferenceHandler.getResult());
+ } else if (inResourceExtensionReference) {
+ resourceExtensionReferenceHandler.endElement(ignoredUri, ignoredName, qName);
}
currentText.setLength(0);
}
@@ -147,6 +162,8 @@ public class RoleHandler extends ParseSax.HandlerForGeneratedRequestWithResult<R
configurationSetHandler.characters(ch, start, length);
} else if (inOSVirtualHardDisk) {
osVirtualDiskHandler.characters(ch, start, length);
+ } else if (inResourceExtensionReference) {
+ resourceExtensionReferenceHandler.characters(ch, start, length);
} else {
currentText.append(ch, start, length);
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/main/java/org/jclouds/azurecompute/xml/StorageServiceHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/StorageServiceHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/StorageServiceHandler.java
index 99b49f2..d9474a1 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/StorageServiceHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/StorageServiceHandler.java
@@ -30,7 +30,7 @@ import com.google.common.base.Throwables;
/**
* @see <a href="http://msdn.microsoft.com/en-us/library/ee460787.aspx" >api</a>
*/
-final class StorageServiceHandler extends ParseSax.HandlerForGeneratedRequestWithResult<StorageService> {
+public class StorageServiceHandler extends ParseSax.HandlerForGeneratedRequestWithResult<StorageService> {
private URL url;
private String serviceName;
private StorageService.StorageServiceProperties storageServiceProperties;
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/main/java/org/jclouds/azurecompute/xml/SubnetHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/SubnetHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/SubnetHandler.java
index 5e2993d..d2e33df 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/SubnetHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/SubnetHandler.java
@@ -31,6 +31,9 @@ public class SubnetHandler extends ParseSax.HandlerForGeneratedRequestWithResult
private StringBuilder currentText = new StringBuilder();
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) {
+ if (qName.equalsIgnoreCase("Subnet")){
+ name = attributes.getValue("name");
+ }
}
@Override public Subnet getResult() {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkConfigurationHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkConfigurationHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkConfigurationHandler.java
new file mode 100644
index 0000000..6dd7443
--- /dev/null
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkConfigurationHandler.java
@@ -0,0 +1,73 @@
+/*
+ * 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.xml;
+
+import static org.jclouds.util.SaxUtils.currentOrNull;
+import java.util.List;
+
+import org.jclouds.azurecompute.domain.NetworkConfiguration;
+import org.jclouds.azurecompute.domain.NetworkConfiguration.VirtualNetworkConfiguration;
+import org.jclouds.http.functions.ParseSax;
+import org.xml.sax.Attributes;
+
+import com.google.common.collect.Lists;
+
+public class VirtualNetworkConfigurationHandler extends ParseSax.HandlerForGeneratedRequestWithResult<VirtualNetworkConfiguration> {
+
+ private String dns;
+ private List<NetworkConfiguration.VirtualNetworkSite> virtualNetworkSites = Lists.newArrayList();
+
+ private boolean inVirtualNetworkSite;
+ private final VirtualNetworkSiteHandler virtualNetworkSiteHandler = new VirtualNetworkSiteHandler();
+
+ private final StringBuilder currentText = new StringBuilder();
+
+ @Override public void startElement(String url, String name, String qName, Attributes attributes) {
+ if (qName.equals("VirtualNetworkSite")) {
+ inVirtualNetworkSite = true;
+ }
+ if (inVirtualNetworkSite) {
+ virtualNetworkSiteHandler.startElement(url, name, qName, attributes);
+ }
+ }
+
+ @Override
+ public VirtualNetworkConfiguration getResult() {
+ return VirtualNetworkConfiguration.create(dns, virtualNetworkSites);
+ }
+
+ @Override
+ public void endElement(String ignoredUri, String ignoredName, String qName) {
+ if (qName.equals("Dns")) {
+ dns = currentOrNull(currentText);
+ } else if (qName.equals("VirtualNetworkSites")) {
+ inVirtualNetworkSite = false;
+ } else if (qName.equals("VirtualNetworkSite")) {
+ virtualNetworkSites.add(virtualNetworkSiteHandler.getResult());
+ } else if (inVirtualNetworkSite) {
+ virtualNetworkSiteHandler.endElement(ignoredUri, ignoredName, qName);
+ }
+ currentText.setLength(0);
+ }
+
+ @Override public void characters(char ch[], int start, int length) {
+ if (inVirtualNetworkSite) {
+ virtualNetworkSiteHandler.characters(ch, start, length);
+ } else
+ currentText.append(ch, start, length);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkSiteHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkSiteHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkSiteHandler.java
index d196253..99e48fe 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkSiteHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/VirtualNetworkSiteHandler.java
@@ -44,6 +44,11 @@ public class VirtualNetworkSiteHandler extends ParseSax.HandlerForGeneratedReque
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
+ if (qName.equalsIgnoreCase("VirtualNetworkSite")){
+ name = attributes.getValue("name");
+ location = attributes.getValue("Location");
+ }
+
if (qName.equals("AddressSpace")) {
inAddressSpace = true;
} else if (qName.equals("Subnet")) {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/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
new file mode 100644
index 0000000..71eb6a6
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapterLiveTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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 java.util.Properties;
+import java.util.Random;
+
+import org.jclouds.azurecompute.AzureComputeApi;
+import org.jclouds.azurecompute.domain.Deployment;
+import org.jclouds.azurecompute.domain.Location;
+import org.jclouds.azurecompute.domain.RoleSize;
+import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest;
+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.compute.functions.DefaultCredentialsFromImageOrOverridingCredentials;
+import org.jclouds.compute.strategy.PrioritizeCredentialsFromTemplate;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.ssh.SshClient;
+import org.jclouds.ssh.SshClient.Factory;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.Test;
+
+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;
+
+@Test(groups = "live", singleThreaded = true, testName = "AzureComputeServiceAdapterLiveTest")
+public class AzureComputeServiceAdapterLiveTest extends BaseAzureComputeApiLiveTest {
+
+ private AzureComputeServiceAdapter adapter;
+ private TemplateBuilder templateBuilder;
+ private Factory sshFactory;
+ private NodeAndInitialCredentials<Deployment> deployment;
+
+ @Override
+ protected AzureComputeApi create(Properties props, Iterable<Module> modules) {
+ 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() {
+ Iterable<Location> locations = adapter.listLocations();
+ assertFalse(Iterables.isEmpty(locations), "locations must not be empty");
+ }
+
+ @Test
+ public void testListImages() {
+ assertFalse(Iterables.isEmpty(adapter.listImages()), "images must not be empty");
+ }
+
+ private static final PrioritizeCredentialsFromTemplate prioritizeCredentialsFromTemplate = new PrioritizeCredentialsFromTemplate(
+ new DefaultCredentialsFromImageOrOverridingCredentials());
+
+ @Test
+ public void testCreateNodeWithGroupEncodedIntoNameThenStoreCredentials() {
+ String group = "foo";
+ String name = "node" + new Random().nextInt();
+
+ Template template = templateBuilder.build();
+
+ deployment = adapter.createNodeWithGroupEncodedIntoName(group, name, template);
+ assertEquals(deployment.getNode().name(), name);
+ assertEquals(deployment.getNodeId(), deployment.getNode().name());
+ assert InetAddresses.isInetAddress(deployment.getNode().virtualIPs().get(0).address()) : deployment;
+ doConnectViaSsh(deployment.getNode(), prioritizeCredentialsFromTemplate.apply(template, deployment.getCredentials()));
+ }
+
+ protected void doConnectViaSsh(Deployment deployment, LoginCredentials creds) {
+ SshClient ssh = sshFactory.create(HostAndPort.fromParts(deployment.virtualIPs().get(0).address(), 22), creds);
+ try {
+ ssh.connect();
+ ExecResponse hello = ssh.exec("echo hello");
+ assertEquals(hello.getOutput().trim(), "hello");
+ } finally {
+ if (ssh != null)
+ ssh.disconnect();
+ }
+ }
+
+ @Test
+ public void testListHardwareProfiles() {
+ Iterable<RoleSize> roleSizes = adapter.listHardwareProfiles();
+ assertFalse(Iterables.isEmpty(roleSizes));
+
+ for (RoleSize roleSize : roleSizes) {
+ assertNotNull(roleSize);
+ }
+ }
+
+ @AfterGroups(groups = "live", alwaysRun = true)
+ protected void tearDown() {
+ if (deployment != null) {
+ adapter.destroyNode(deployment.getNodeId());
+ }
+ 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/e97ddaee/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
new file mode 100644
index 0000000..9136cbb
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/AzureComputeServiceContextLiveTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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.assertj.core.api.Assertions.assertThat;
+import java.util.Random;
+import java.util.Set;
+
+import org.jclouds.azurecompute.options.AzureComputeTemplateOptions;
+import org.jclouds.compute.RunNodesException;
+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.scriptbuilder.statements.login.AdminAccess;
+import org.jclouds.ssh.SshClient;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Iterables;
+import com.google.inject.Module;
+
+@Test(groups = "live", testName = "AzureComputeServiceContextLiveTest")
+public class AzureComputeServiceContextLiveTest extends BaseComputeServiceContextLiveTest {
+
+ @Override
+ protected Module getSshModule() {
+ return new SshjSshClientModule();
+ }
+
+ public AzureComputeServiceContextLiveTest() {
+ provider = "azurecompute";
+ }
+
+ @Test
+ public void testLaunchNode() throws RunNodesException {
+ final String group = "node" + new Random().nextLong();
+
+ TemplateBuilder templateBuilder = view.getComputeService().templateBuilder();
+ templateBuilder.imageId("b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20150123-en-us-30GB");
+ templateBuilder.hardwareId("BASIC_A2");
+ templateBuilder.locationId("West Europe");
+ Template template = templateBuilder.build();
+
+ // test passing custom options
+ AzureComputeTemplateOptions options = template.getOptions().as(AzureComputeTemplateOptions.class);
+ options.inboundPorts(22);
+ options.runScript(AdminAccess.standard());
+
+ NodeMetadata node = null;
+ try {
+ Set<? extends NodeMetadata> nodes = view.getComputeService().createNodesInGroup(group, 1, template);
+ node = Iterables.getOnlyElement(nodes);
+
+ SshClient client = view.utils().sshForNode().apply(node);
+ client.connect();
+ ExecResponse hello = client.exec("echo hello");
+ assertThat(hello.getOutput().trim()).isEqualTo("hello");
+ } finally {
+ if (node != null) {
+ view.getComputeService().destroyNode(node.getId());
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java
new file mode 100644
index 0000000..f026a11
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java
@@ -0,0 +1,45 @@
+/*
+ * 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.extensions;
+
+import org.jclouds.compute.extensions.internal.BaseSecurityGroupExtensionLiveTest;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
+
+/**
+ * Live test for AzureCompute {@link org.jclouds.compute.extensions.SecurityGroupExtension} implementation.
+ */
+@Test(groups = "live", singleThreaded = true, testName = "AzureComputeSecurityGroupExtensionLiveTest")
+public class AzureComputeSecurityGroupExtensionLiveTest extends BaseSecurityGroupExtensionLiveTest {
+
+ public AzureComputeSecurityGroupExtensionLiveTest() {
+ provider = "azurecompute";
+ }
+
+ @Override
+ protected Iterable<Module> setupModules() {
+ return ImmutableSet.of(getLoggingModule(), credentialStoreModule, getSshModule());
+ }
+
+ protected Module getSshModule() {
+ return new SshjSshClientModule();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiLiveTest.java
index fb0e915..fcb83b2 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiLiveTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiLiveTest.java
@@ -17,48 +17,36 @@
package org.jclouds.azurecompute.features;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.jclouds.azurecompute.domain.CloudService.Status.UNRECOGNIZED;
import static org.jclouds.util.Predicates2.retry;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
-
import java.util.List;
import java.util.logging.Logger;
import org.jclouds.azurecompute.domain.CloudService;
import org.jclouds.azurecompute.domain.CloudService.Status;
-import org.jclouds.azurecompute.domain.Operation;
import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest;
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;
-@Test(groups = "live", testName = "CloudServiceApiLiveTest")
+@Test(groups = "live", testName = "CloudServiceApiLiveTest", singleThreaded = true)
public class CloudServiceApiLiveTest extends BaseAzureComputeApiLiveTest {
- public static final String CLOUD_SERVICE = (System.getProperty("user.name") + "-jclouds-cloudService").toLowerCase();
+ private static final String CLOUD_SERVICE = (System.getProperty("user.name") + "cloudservice").toLowerCase();
- private Predicate<String> operationSucceeded;
private Predicate<CloudService> cloudServiceCreated;
private Predicate<CloudService> cloudServiceGone;
- private String location;
-
@BeforeClass(groups = { "integration", "live" })
public void setup() {
super.setup();
- // TODO: filter locations on those who have compute
- location = Iterables.get(api.getLocationApi().list(), 0).name();
- operationSucceeded = retry(new Predicate<String>() {
- public boolean apply(String input) {
- return api.getOperationApi().get(input).status() == Operation.Status.SUCCEEDED;
- }
- }, 600, 5, 5, SECONDS);
cloudServiceCreated = retry(new Predicate<CloudService>() {
public boolean apply(CloudService input) {
return api().get(input.name()).status() == Status.CREATED;
@@ -93,6 +81,12 @@ public class CloudServiceApiLiveTest extends BaseAzureComputeApiLiveTest {
}
@Test(dependsOnMethods = "testCreate")
+ public void testGet() {
+ CloudService foundCloudService = api().get(cloudService.name());
+ assertThat(foundCloudService).isEqualToComparingFieldByField(cloudService);
+ }
+
+ @Test(dependsOnMethods = "testGet")
public void testDelete() {
String requestId = api().delete(cloudService.name());
assertTrue(operationSucceeded.apply(requestId), requestId);
@@ -102,7 +96,7 @@ public class CloudServiceApiLiveTest extends BaseAzureComputeApiLiveTest {
Logger.getAnonymousLogger().info("cloudService deleted: " + cloudService);
}
- @Override @AfterClass(groups = "live")
+ @Override @AfterClass(groups = "live", alwaysRun = true)
protected void tearDown() {
String requestId = api().delete(CLOUD_SERVICE);
if (requestId != null) {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiMockTest.java
index a929fff..5e3028d 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/CloudServiceApiMockTest.java
@@ -17,21 +17,18 @@
package org.jclouds.azurecompute.features;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
import org.jclouds.azurecompute.xml.CloudServiceHandlerTest;
import org.jclouds.azurecompute.xml.ListCloudServicesHandlerTest;
import org.testng.annotations.Test;
-import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "CloudServiceApiMockTest")
public class CloudServiceApiMockTest extends BaseAzureComputeApiMockTest {
- public void listWhenFound() throws Exception {
+ public void testList() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/hostedservices.xml"));
@@ -46,22 +43,7 @@ public class CloudServiceApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void listWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- CloudServiceApi api = api(server.getUrl("/")).getCloudServiceApi();
-
- assertTrue(api.list().isEmpty());
-
- assertSent(server, "GET", "/services/hostedservices?embed-detail=true");
- } finally {
- server.shutdown();
- }
- }
-
- public void getWhenFound() throws Exception {
+ public void testGet() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/hostedservice.xml"));
@@ -76,22 +58,7 @@ public class CloudServiceApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void getWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- CloudServiceApi api = api(server.getUrl("/")).getCloudServiceApi();
-
- assertNull(api.get("myservice"));
-
- assertSent(server, "GET", "/services/hostedservices/myservice?embed-detail=true");
- } finally {
- server.shutdown();
- }
- }
-
- public void createWithLabelInLocation() throws Exception {
+ public void testCreateWithLabelInLocation() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -106,7 +73,7 @@ public class CloudServiceApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void deleteWhenFound() throws Exception {
+ public void testDelete() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -121,18 +88,4 @@ public class CloudServiceApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void deleteWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- CloudServiceApi api = api(server.getUrl("/")).getCloudServiceApi();
-
- assertNull(api.delete("myservice"));
-
- assertSent(server, "DELETE", "/services/hostedservices/myservice");
- } finally {
- server.shutdown();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/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
new file mode 100644
index 0000000..9b47cd7
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DeploymentApiLiveTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.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.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import java.util.logging.Logger;
+
+import org.jclouds.azurecompute.compute.AzureComputeServiceAdapter;
+import org.jclouds.azurecompute.domain.CloudService;
+import org.jclouds.azurecompute.domain.Deployment;
+import org.jclouds.azurecompute.domain.DeploymentParams;
+import org.jclouds.azurecompute.domain.OSImage;
+import org.jclouds.azurecompute.domain.RoleSize;
+import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest;
+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;
+
+@Test(groups = "live", testName = "DeploymentApiLiveTest", singleThreaded = true)
+public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+ private static final String CLOUD_SERVICE = (System.getProperty("user.name") + "cloudservice").toLowerCase();
+ private static final String DEPLOYMENT = DeploymentApiLiveTest.class.getSimpleName().toLowerCase();
+
+ private Predicate<Deployment> deploymentCreated;
+ private Predicate<Deployment> deploymentGone;
+
+ private Deployment deployment;
+ private CloudService cloudService;
+
+ @BeforeClass(groups = { "integration", "live" })
+ public void setup() {
+ super.setup();
+ cloudService = getOrCreateCloudService(CLOUD_SERVICE, location);
+
+ deploymentCreated = retry(new Predicate<Deployment>() {
+ public boolean apply(Deployment input) {
+ return api().get(input.name()).status() == Deployment.Status.RUNNING;
+ }
+ }, 600, 5, 5, SECONDS);
+ deploymentGone = retry(new Predicate<Deployment>() {
+ public boolean apply(Deployment input) {
+ return api().get(input.name()) == null;
+ }
+ }, 600, 5, 5, SECONDS);
+ }
+
+ public void testCreate() {
+ final DeploymentParams params = DeploymentParams.builder()
+ .name(DEPLOYMENT)
+ .os(OSImage.Type.LINUX)
+ .sourceImageName("b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20150123-en-us-30GB")
+ .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))
+ .build();
+ String requestId = api().create(params);
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+
+ deployment = api().get(DEPLOYMENT);
+ assertNotNull(deployment);
+ assertTrue(deploymentCreated.apply(deployment), deployment.toString());
+ assertThat(deployment.name()).isEqualTo(DEPLOYMENT);
+ assertThat(deployment.status()).isEqualTo(Deployment.Status.RUNNING);
+ assertThat(deployment.label()).isEqualTo(DEPLOYMENT);
+ assertThat(deployment.slot()).isEqualTo(Deployment.Slot.PRODUCTION);
+ assertThat(deployment.roles().size()).isEqualTo(1);
+ assertThat(deployment.roleInstanceList().size()).isEqualTo(1);
+ assertThat(deployment.virtualNetworkName()).isEqualTo(virtualNetworkSite.name());
+
+ }
+
+ @Test(dependsOnMethods = "testCreate")
+ public void testGet() {
+ Deployment foundDeployment = api().get(deployment.name());
+ assertThat(foundDeployment).isEqualToComparingFieldByField(deployment);
+ }
+
+ @Test(dependsOnMethods = "testGet")
+ public void testDelete() {
+ String requestId = api().delete(deployment.name());
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
+
+ assertTrue(deploymentGone.apply(deployment), deployment.toString());
+ Logger.getAnonymousLogger().info("deployment deleted: " + deployment);
+ }
+
+ @Override @AfterClass(groups = "live", alwaysRun = true)
+ protected void tearDown() {
+ super.tearDown();
+ if (api().get(DEPLOYMENT) != null) {
+ String requestId = api().delete(deployment.name());
+ operationSucceeded.apply(requestId);
+ Logger.getAnonymousLogger().info("deployment deleted: " + deployment);
+ }
+ if (api.getCloudServiceApi().get(CLOUD_SERVICE) != null) {
+ String requestId = api.getCloudServiceApi().delete(CLOUD_SERVICE);
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("cloudservice deleted: " + CLOUD_SERVICE);
+ }
+ }
+
+ private DeploymentApi api() {
+ return api.getDeploymentApiForService(cloudService.name());
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/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 f027932..86750cb 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,8 @@ 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 static org.testng.Assert.assertNull;
+
+import java.net.URI;
import org.jclouds.azurecompute.domain.DeploymentParams;
import org.jclouds.azurecompute.domain.OSImage;
@@ -29,28 +30,28 @@ import org.jclouds.azurecompute.xml.DeploymentHandlerTest;
import org.jclouds.azurecompute.xml.ListOSImagesHandlerTest;
import org.testng.annotations.Test;
-import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "DeploymentApiMockTest")
public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest {
- public void createLinux() throws Exception {
+ public void testCreateLinux() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
try {
DeploymentApi api = api(server.getUrl("/")).getDeploymentApiForService("myservice");
- OSImage OSImage = ListOSImagesHandlerTest.expected().get(5); // CentOS
+ OSImage OSImage = ListOSImagesHandlerTest.expected().get(5); // Centos
DeploymentParams params = DeploymentParams.builder()
- .name("mydeployment")
- .size(RoleSize.Type.MEDIUM)
- .sourceImageName(OSImage.name()).mediaLink(OSImage.mediaLink()).os(OSImage.os())
- .username("username").password("testpwd")
- .externalEndpoint(inboundTcpToLocalPort(80, 8080))
- .externalEndpoint(inboundUdpToLocalPort(53, 53)).build();
+ .name("mydeployment")
+ .size(RoleSize.Type.MEDIUM)
+ .sourceImageName(OSImage.name()).mediaLink(URI.create("https://mydeployment.blob.core.windows.net/vhds/disk-mydeployment.vhd")).os(OSImage.os())
+ .username("username").password("testpwd")
+ .virtualNetworkName("my-virtualNetworkName")
+ .externalEndpoint(inboundTcpToLocalPort(80, 8080))
+ .externalEndpoint(inboundUdpToLocalPort(53, 53)).build();
assertEquals(api.create(params), "request-1");
@@ -60,7 +61,7 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void createWindows() throws Exception {
+ public void testCreateWindows() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -70,12 +71,13 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest {
OSImage OSImage = ListOSImagesHandlerTest.expected().get(1); // Windows
DeploymentParams params = DeploymentParams.builder()
- .name("mydeployment")
- .size(RoleSize.Type.MEDIUM)
- .sourceImageName(OSImage.name()).mediaLink(OSImage.mediaLink()).os(OSImage.os())
- .username("username").password("testpwd")
- .externalEndpoint(inboundTcpToLocalPort(80, 8080))
- .externalEndpoint(inboundUdpToLocalPort(53, 53)).build();
+ .name("mydeployment")
+ .size(RoleSize.Type.MEDIUM)
+ .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();
assertEquals(api.create(params), "request-1");
@@ -85,7 +87,7 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void getWhenFound() throws Exception {
+ public void testGet() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/deployment.xml"));
@@ -100,22 +102,7 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void getWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- DeploymentApi api = api(server.getUrl("/")).getDeploymentApiForService("myservice");
-
- assertNull(api.get("mydeployment"));
-
- assertSent(server, "GET", "/services/hostedservices/myservice/deployments/mydeployment");
- } finally {
- server.shutdown();
- }
- }
-
- public void deleteWhenFound() throws Exception {
+ public void testDelete() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -130,18 +117,4 @@ public class DeploymentApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void deleteWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- DeploymentApi api = api(server.getUrl("/")).getDeploymentApiForService("myservice");
-
- assertNull(api.delete("mydeployment"));
-
- assertSent(server, "DELETE", "/services/hostedservices/myservice/deployments/mydeployment");
- } finally {
- server.shutdown();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/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 f4090bf..e943878 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java
@@ -59,6 +59,8 @@ public class DiskApiLiveTest extends BaseAzureComputeApiLiveTest {
}
}
+ // TODO testDeleteDisk, if we will need testCreateDisk
+
private void checkDisk(Disk disk) {
assertNotNull(disk.name(), "Name cannot be null for: " + disk);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
index 656428c..5a901aa 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
@@ -17,20 +17,17 @@
package org.jclouds.azurecompute.features;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
import org.jclouds.azurecompute.xml.ListDisksHandlerTest;
import org.testng.annotations.Test;
-import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "DiskApiMockTest")
public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
- public void listWhenFound() throws Exception {
+ public void testList() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/disks.xml"));
@@ -45,22 +42,7 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void listWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- DiskApi api = api(server.getUrl("/")).getDiskApi();
-
- assertTrue(api.list().isEmpty());
-
- assertSent(server, "GET", "/services/disks");
- } finally {
- server.shutdown();
- }
- }
-
- public void deleteWhenFound() throws Exception {
+ public void testDelete() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -75,18 +57,4 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void deleteWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- DiskApi api = api(server.getUrl("/")).getDiskApi();
-
- assertNull(api.delete("my-disk"));
-
- assertSent(server, "DELETE", "/services/disks/my-disk");
- } finally {
- server.shutdown();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/LocationApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/LocationApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/LocationApiMockTest.java
index 9360cb0..c6f1924 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/LocationApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/LocationApiMockTest.java
@@ -22,13 +22,12 @@ import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
import org.jclouds.azurecompute.xml.ListLocationsHandlerTest;
import org.testng.annotations.Test;
-import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "LocationApiMockTest")
public class LocationApiMockTest extends BaseAzureComputeApiMockTest {
- public void listWhenLocationsFound() throws Exception {
+ public void testList() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/locations.xml"));
@@ -43,18 +42,4 @@ public class LocationApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void listWhenLocationsNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- LocationApi api = api(server.getUrl("/")).getLocationApi();
-
- assertThat(api.list()).isEmpty();
-
- assertSent(server, "GET", "/locations");
- } finally {
- server.shutdown();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiMockTest.java
index 70c5ec6..3f2b196 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/OSImageApiMockTest.java
@@ -17,9 +17,6 @@
package org.jclouds.azurecompute.features;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
import java.net.URI;
import org.jclouds.azurecompute.domain.OSImage;
@@ -28,13 +25,12 @@ import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
import org.jclouds.azurecompute.xml.ListOSImagesHandlerTest;
import org.testng.annotations.Test;
-import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "OSImageApiMockTest")
public class OSImageApiMockTest extends BaseAzureComputeApiMockTest {
- public void listWhenFound() throws Exception {
+ public void testList() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/images.xml"));
@@ -49,22 +45,7 @@ public class OSImageApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void listWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- OSImageApi api = api(server.getUrl("/")).getOSImageApi();
-
- assertTrue(api.list().isEmpty());
-
- assertSent(server, "GET", "/services/images");
- } finally {
- server.shutdown();
- }
- }
-
- public void add() throws Exception {
+ public void testAdd() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -82,7 +63,7 @@ public class OSImageApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void update() throws Exception {
+ public void testUpdate() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -100,7 +81,7 @@ public class OSImageApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void deleteWhenFound() throws Exception {
+ public void testDelete() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -115,18 +96,4 @@ public class OSImageApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void deleteWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- OSImageApi api = api(server.getUrl("/")).getOSImageApi();
-
- assertNull(api.delete("myimage"));
-
- assertSent(server, "DELETE", "/services/images/myimage");
- } finally {
- server.shutdown();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/OperationApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/OperationApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/OperationApiMockTest.java
index dae2053..e3f2814 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/OperationApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/OperationApiMockTest.java
@@ -17,19 +17,17 @@
package org.jclouds.azurecompute.features;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
import org.jclouds.azurecompute.xml.OperationHandlerTest;
import org.testng.annotations.Test;
-import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "OperationApiMockTest")
public class OperationApiMockTest extends BaseAzureComputeApiMockTest {
- public void getWhenFound() throws Exception {
+ public void testGet() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(xmlResponse("/operation.xml"));
@@ -44,18 +42,4 @@ public class OperationApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void getWhenNotFound() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(new MockResponse().setResponseCode(404));
-
- try {
- OperationApi api = api(server.getUrl("/")).getOperationApi();
-
- assertNull(api.get("request-id"));
-
- assertSent(server, "GET", "/operations/request-id");
- } finally {
- server.shutdown();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/SubscriptionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/SubscriptionApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/SubscriptionApiLiveTest.java
new file mode 100644
index 0000000..0bbbdb2
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/SubscriptionApiLiveTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.features;
+
+import static org.testng.Assert.assertNotNull;
+import org.jclouds.azurecompute.domain.RoleSize;
+import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "live", testName = "SubscriptionApiLiveTest")
+public class SubscriptionApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+ @Test public void testList() {
+ for (RoleSize roleSize : api().listRoleSizes()) {
+ checkLocation(roleSize);
+ }
+ }
+
+ private void checkLocation(RoleSize roleSize) {
+ assertNotNull(roleSize.name(), "Name cannot be null for a Location.");
+ assertNotNull(roleSize.label(), "Label cannot be null for: " + roleSize);
+ assertNotNull(roleSize.cores(), "Cores cannot be null for: " + roleSize.name());
+ }
+
+ private SubscriptionApi api() {
+ return api.getSubscriptionApi();
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/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
new file mode 100644
index 0000000..d61f085
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiLiveTest.java
@@ -0,0 +1,161 @@
+/*
+ * 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.features;
+
+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 java.util.logging.Logger;
+
+import org.jclouds.azurecompute.compute.AzureComputeServiceAdapter;
+import org.jclouds.azurecompute.domain.CloudService;
+import org.jclouds.azurecompute.domain.Deployment;
+import org.jclouds.azurecompute.domain.Deployment.RoleInstance;
+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.internal.BaseAzureComputeApiLiveTest;
+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;
+
+@Test(groups = "live", testName = "VirtualMachineApiLiveTest", singleThreaded = true)
+public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+ private static final String CLOUD_SERVICE = (System.getProperty("user.name") + "-jclouds-cloudService").toLowerCase();
+ private static final String DEPLOYMENT = DeploymentApiLiveTest.class.getSimpleName().toLowerCase();
+
+ private String roleName;
+ private Predicate<String> roleInstanceReady;
+ private Predicate<String> roleInstanceStopped;
+ private CloudService cloudService;
+
+ @BeforeClass(groups = { "integration", "live" })
+ public void setup() {
+ super.setup();
+ cloudService = getOrCreateCloudService(CLOUD_SERVICE, location);
+
+ roleInstanceReady = retry(new Predicate<String>() {
+ @Override
+ public boolean apply(String input) {
+ RoleInstance roleInstance = getFirstRoleInstanceInDeployment(input);
+ return roleInstance != null && roleInstance.instanceStatus() == READY_ROLE;
+ }
+ }, 600, 5, 5, SECONDS);
+
+ roleInstanceStopped = retry(new Predicate<String>() {
+ @Override
+ public boolean apply(String input) {
+ RoleInstance roleInstance = getFirstRoleInstanceInDeployment(input);
+ return roleInstance != null && roleInstance.instanceStatus() == Deployment.InstanceStatus.STOPPED_VM;
+ }
+ }, 600, 5, 5, SECONDS);
+
+ final DeploymentParams params = DeploymentParams.builder()
+ .name(DEPLOYMENT)
+ .os(OSImage.Type.LINUX)
+ .sourceImageName("b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20150123-en-us-30GB")
+ .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))
+ .build();
+ getOrCreateDeployment(cloudService.name(), params);
+ RoleInstance roleInstance = getFirstRoleInstanceInDeployment(DEPLOYMENT);
+ assertTrue(roleInstanceReady.apply(DEPLOYMENT), roleInstance.toString());
+ roleName = roleInstance.roleName();
+ }
+
+ public void testUpdate() {
+ Role role = api().getRole(roleName);
+ String requestId = api().updateRole(roleName,
+ Role.create(
+ role.roleName(),
+ role.roleType(),
+ role.vmImage(),
+ role.mediaLocation(),
+ role.configurationSets(),
+ role.resourceExtensionReferences(),
+ role.availabilitySetName(),
+ role.dataVirtualHardDisks(),
+ role.osVirtualHardDisk(),
+ role.roleSize(),
+ role.provisionGuestAgent(),
+ role.defaultWinRmCertificateThumbprint()));
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
+ }
+
+ @Test(dependsOnMethods = "testUpdate")
+ public void testShutdown() {
+ String requestId = api().shutdown(roleName);
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
+
+ RoleInstance roleInstance = getFirstRoleInstanceInDeployment(DEPLOYMENT);
+ assertTrue(roleInstanceStopped.apply(DEPLOYMENT), roleInstance.toString());
+ Logger.getAnonymousLogger().info("roleInstance stopped: " + roleInstance);
+ }
+
+ @Test(dependsOnMethods = "testShutdown")
+ public void testStart() {
+ String requestId = api().start(roleName);
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
+
+ RoleInstance roleInstance = getFirstRoleInstanceInDeployment(DEPLOYMENT);
+ assertTrue(roleInstanceReady.apply(DEPLOYMENT), roleInstance.toString());
+ Logger.getAnonymousLogger().info("roleInstance started: " + roleInstance);
+ }
+
+ @Test(dependsOnMethods = "testStart")
+ public void testRestart() {
+ String requestId = api().restart(roleName);
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
+
+ RoleInstance roleInstance = getFirstRoleInstanceInDeployment(DEPLOYMENT);
+ assertTrue(roleInstanceReady.apply(DEPLOYMENT), roleInstance.toString());
+ Logger.getAnonymousLogger().info("roleInstance restarted: " + roleInstance);
+ }
+
+ @AfterClass(alwaysRun = true)
+ public void cleanup() {
+ if (api.getDeploymentApiForService(cloudService.name()).get(DEPLOYMENT) != null) {
+ String requestId = api.getDeploymentApiForService(cloudService.name()).delete(DEPLOYMENT);
+ operationSucceeded.apply(requestId);
+ Logger.getAnonymousLogger().info("deployment deleted: " + DEPLOYMENT);
+ }
+ }
+
+ private VirtualMachineApi api() {
+ return api.getVirtualMachineApiForDeploymentInService(DEPLOYMENT, cloudService.name());
+ }
+
+ private RoleInstance getFirstRoleInstanceInDeployment(String deployment) {
+ return Iterables.getOnlyElement(api.getDeploymentApiForService(cloudService.name()).get(deployment).roleInstanceList());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java
index 41cce90..6c1cc65 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java
@@ -18,7 +18,9 @@ package org.jclouds.azurecompute.features;
import static org.assertj.core.api.Assertions.assertThat;
+import org.jclouds.azurecompute.domain.Role;
import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
+import org.jclouds.azurecompute.xml.RoleHandlerTest;
import org.testng.annotations.Test;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@@ -26,7 +28,7 @@ import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "VirtualMachineApiMockTest")
public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest {
- public void start() throws Exception {
+ public void testStart() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -43,7 +45,7 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void restart() throws Exception {
+ public void testRestart() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -60,7 +62,7 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void shutdown() throws Exception {
+ public void testShutdown() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -77,7 +79,7 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void capture() throws Exception {
+ public void testCapture() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
@@ -94,6 +96,22 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest {
}
}
+ public void testUpdate() throws Exception {
+ MockWebServer server = mockAzureManagementServer();
+ server.enqueue(requestIdResponse("request-1"));
+
+ try {
+ VirtualMachineApi api = vmApi(server);
+
+ Role role = RoleHandlerTest.expected();
+ assertThat(api.updateRole("testvnetsg02", role)).isEqualTo("request-1");
+
+ assertSent(server, "PUT", "/services/hostedservices/my-service/deployments/mydeployment/roles/testvnetsg02");
+ } finally {
+ server.shutdown();
+ }
+ }
+
private VirtualMachineApi vmApi(MockWebServer server) {
return api(server.getUrl("/")).getVirtualMachineApiForDeploymentInService("mydeployment", "my-service");
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/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
new file mode 100644
index 0000000..601ea8b
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiLiveTest.java
@@ -0,0 +1,112 @@
+/*
+ * 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.features;
+
+import static com.google.common.base.CaseFormat.LOWER_UNDERSCORE;
+import static com.google.common.base.CaseFormat.UPPER_CAMEL;
+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.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.logging.Logger;
+
+import org.jclouds.azurecompute.domain.NetworkConfiguration;
+import org.jclouds.azurecompute.domain.NetworkConfiguration.VirtualNetworkConfiguration;
+import org.jclouds.azurecompute.domain.NetworkConfiguration.VirtualNetworkSite;
+import org.jclouds.azurecompute.domain.Operation;
+import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest;
+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.ImmutableList;
+
+@Test(groups = "live", testName = "VirtualNetworkApiLiveTest", singleThreaded = true)
+public class VirtualNetworkApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+ private NetworkConfiguration originalNetworkConfiguration;
+ private Predicate<String> operationSucceeded;
+
+ @BeforeClass
+ public void init() {
+ operationSucceeded = retry(new Predicate<String>() {
+ public boolean apply(String input) {
+ return api.getOperationApi().get(input).status() == Operation.Status.SUCCEEDED;
+ }
+ }, 600, 5, 5, SECONDS);
+
+ originalNetworkConfiguration = api().getNetworkConfiguration();
+ }
+
+ @AfterClass(alwaysRun = true)
+ public void cleanup() {
+ if (originalNetworkConfiguration != null) {
+ api().set(originalNetworkConfiguration);
+ } else {
+ api().set(NetworkConfiguration.create(VirtualNetworkConfiguration.create(null, ImmutableList.<VirtualNetworkSite>of())));
+ }
+ }
+
+ @Test public void testList() {
+ for (VirtualNetworkSite virtualNetworkSite : api().list()) {
+ checkVirtualNetworkSite(virtualNetworkSite);
+ }
+ }
+
+ private void checkVirtualNetworkSite(VirtualNetworkSite virtualNetworkSite) {
+ assertNotNull(virtualNetworkSite.name(), "Name cannot be null for a VirtualNetworkSite.");
+ assertNotNull(virtualNetworkSite.addressSpace(), "AddressSpace cannot be null for: " + virtualNetworkSite);
+ assertNotNull(virtualNetworkSite.subnets(), "Subnets cannot be null for: " + virtualNetworkSite);
+ }
+
+ @Test public void testSet() {
+ String id = "39d0d14b-fc1d-496f-8928-b5a13a6f4123";
+ final String name = UPPER_CAMEL.to(LOWER_UNDERSCORE, getClass().getSimpleName());
+ final String location = "West Europe";
+ final NetworkConfiguration.AddressSpace addressSpace = NetworkConfiguration.AddressSpace.create("10.0.0.1/20");
+ final ImmutableList<NetworkConfiguration.Subnet> subnets = ImmutableList.of(NetworkConfiguration.Subnet.create("Subnet-jclouds", "10.0.0.1/23", null));
+ final VirtualNetworkSite virtualNetworkSite = VirtualNetworkSite.create(id, name, location, addressSpace, subnets);
+ String requestId = api().set(NetworkConfiguration.create(VirtualNetworkConfiguration.create(null, ImmutableList.of(virtualNetworkSite))));
+ assertTrue(operationSucceeded.apply(requestId), requestId);
+ Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
+
+ final NetworkConfiguration networkConfiguration = api().getNetworkConfiguration();
+ assertThat(networkConfiguration.virtualNetworkConfiguration().dns()).isEqualTo(networkConfiguration.virtualNetworkConfiguration().dns());
+ assertThat(networkConfiguration.virtualNetworkConfiguration().virtualNetworkSites().size()).isEqualTo(1);
+ assertThat(networkConfiguration.virtualNetworkConfiguration().virtualNetworkSites().get(0).name()).isEqualTo(name);
+ assertThat(networkConfiguration.virtualNetworkConfiguration().virtualNetworkSites().get(0).location()).isEqualTo(location);
+ assertThat(networkConfiguration.virtualNetworkConfiguration().virtualNetworkSites().get(0).addressSpace()).isEqualTo(addressSpace);
+ assertThat(networkConfiguration.virtualNetworkConfiguration().virtualNetworkSites().get(0).subnets()).isEqualTo(subnets);
+ }
+
+ @Test(dependsOnMethods = "testSet")
+ public void testGetNetworkConfiguration() {
+ final NetworkConfiguration networkConfiguration = api().getNetworkConfiguration();
+ assertThat(networkConfiguration).isNotNull();
+ for (VirtualNetworkSite virtualNetworkSite : networkConfiguration.virtualNetworkConfiguration().virtualNetworkSites()) {
+ assertThat(virtualNetworkSite.name()).isNotEqualTo("not-existing");
+ }
+ }
+
+ private VirtualNetworkApi api() {
+ return api.getVirtualNetworkApi();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e97ddaee/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiMockTest.java
new file mode 100644
index 0000000..c55884d
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualNetworkApiMockTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.features;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.testng.Assert.assertEquals;
+import java.util.UUID;
+
+import org.jclouds.azurecompute.domain.NetworkConfiguration;
+import org.jclouds.azurecompute.domain.NetworkConfiguration.VirtualNetworkConfiguration;
+import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
+import org.jclouds.azurecompute.xml.ListVirtualNetworkSitesHandlerTest;
+import org.jclouds.azurecompute.xml.NetworkConfigurationHandlerTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+
+@Test(groups = "unit", testName = "VirtualNetworkApiMockTest")
+public class VirtualNetworkApiMockTest extends BaseAzureComputeApiMockTest {
+
+ public void testGetNetworkConfiguration() throws Exception {
+ MockWebServer server = mockAzureManagementServer();
+ server.enqueue(xmlResponse("/networkconfiguration.xml"));
+
+ try {
+ VirtualNetworkApi api = virtualNetworkApi(server);
+
+ assertEquals(api.getNetworkConfiguration(), NetworkConfigurationHandlerTest.expected());
+
+ assertSent(server, "GET", "/services/networking/media");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testSet() throws Exception {
+ MockWebServer server = mockAzureManagementServer();
+ server.enqueue(requestIdResponse("request-1"));
+
+ try {
+ VirtualNetworkApi api = virtualNetworkApi(server);
+
+ assertThat(api.set(NetworkConfiguration.create(
+ VirtualNetworkConfiguration.create(null,
+ ImmutableList.of(NetworkConfiguration.VirtualNetworkSite.create(
+ UUID.randomUUID().toString(),
+ "jclouds-virtual-network",
+ "West Europe",
+ NetworkConfiguration.AddressSpace.create("10.0.0.0/20"),
+ ImmutableList.of(NetworkConfiguration.Subnet.create("jclouds-1", "10.0.0.0/23",
+ null)))))))
+ ).isEqualTo("request-1");
+
+ assertSent(server, "PUT", "/services/networking/media");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testList() throws Exception {
+ MockWebServer server = mockAzureManagementServer();
+ server.enqueue(xmlResponse("/virtualnetworksites.xml"));
+
+ try {
+ VirtualNetworkApi api = virtualNetworkApi(server);
+
+ assertThat(api.list()).containsExactlyElementsOf(ListVirtualNetworkSitesHandlerTest.expected());
+
+ assertSent(server, "GET",
+ "/services/networking/virtualnetwork");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+
+ private VirtualNetworkApi virtualNetworkApi(MockWebServer server) {
+ return api(server.getUrl("/")).getVirtualNetworkApi();
+ }
+}