You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2018/06/13 12:22:40 UTC
jclouds git commit: Added Local Network Gateway API
Repository: jclouds
Updated Branches:
refs/heads/master 36353d615 -> ff93565b1
Added Local Network Gateway API
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/ff93565b
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/ff93565b
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/ff93565b
Branch: refs/heads/master
Commit: ff93565b1d923984de092f96ce0f0ed76b8f629a
Parents: 36353d6
Author: Ignasi Barrera <na...@apache.org>
Authored: Mon Jun 11 15:25:25 2018 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Jun 11 15:25:25 2018 +0200
----------------------------------------------------------------------
.../azurecompute/arm/AzureComputeApi.java | 9 ++
.../arm/AzureComputeProviderMetadata.java | 2 +
.../arm/domain/LocalNetworkGateway.java | 75 ++++++++++
.../domain/LocalNetworkGatewayProperties.java | 96 ++++++++++++
.../arm/features/LocalNetworkGatewayApi.java | 81 ++++++++++
.../features/AvailabilitySetApiMockTest.java | 2 +-
.../LocalNetworkGatewayApiLiveTest.java | 122 +++++++++++++++
.../LocalNetworkGatewayApiMockTest.java | 148 +++++++++++++++++++
.../resources/localnetworkgatewaycreate.json | 18 +++
.../test/resources/localnetworkgatewayget.json | 18 +++
.../test/resources/localnetworkgatewaylist.json | 22 +++
11 files changed, 592 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
index d62a5b7..a4b6282 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
@@ -28,6 +28,7 @@ import org.jclouds.azurecompute.arm.features.GraphRBACApi;
import org.jclouds.azurecompute.arm.features.ImageApi;
import org.jclouds.azurecompute.arm.features.JobApi;
import org.jclouds.azurecompute.arm.features.LoadBalancerApi;
+import org.jclouds.azurecompute.arm.features.LocalNetworkGatewayApi;
import org.jclouds.azurecompute.arm.features.LocationApi;
import org.jclouds.azurecompute.arm.features.MetricDefinitionsApi;
import org.jclouds.azurecompute.arm.features.MetricsApi;
@@ -263,6 +264,14 @@ public interface AzureComputeApi extends Closeable {
VaultApi getVaultApi(@PathParam("resourcegroup") String resourcegroup);
/**
+ * Management features for Local Network Gateways.
+ *
+ * @see <a href="https://docs.microsoft.com/en-us/rest/api/network-gateway/localnetworkgateways">docs</a>
+ */
+ @Delegate
+ LocalNetworkGatewayApi getLocalNetworkGatewayApi(@PathParam("resourcegroup") String resourcegroup);
+
+ /**
* Returns the information about the current service principal.
*/
@Provides
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index 2e51e69..3038f8e 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -45,6 +45,7 @@ import org.jclouds.azurecompute.arm.features.DiskApi;
import org.jclouds.azurecompute.arm.features.GraphRBACApi;
import org.jclouds.azurecompute.arm.features.ImageApi;
import org.jclouds.azurecompute.arm.features.LoadBalancerApi;
+import org.jclouds.azurecompute.arm.features.LocalNetworkGatewayApi;
import org.jclouds.azurecompute.arm.features.LocationApi;
import org.jclouds.azurecompute.arm.features.MetricDefinitionsApi;
import org.jclouds.azurecompute.arm.features.MetricsApi;
@@ -130,6 +131,7 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata {
properties.put(API_VERSION_PREFIX + VirtualMachineScaleSetApi.class.getSimpleName(), "2017-03-30");
properties.put(API_VERSION_PREFIX + GraphRBACApi.class.getSimpleName(), "1.6");
properties.put(API_VERSION_PREFIX + VaultApi.class.getSimpleName(), "2016-10-01");
+ properties.put(API_VERSION_PREFIX + LocalNetworkGatewayApi.class.getSimpleName(), "2018-02-01");
return properties;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java
new file mode 100644
index 0000000..b8e95ab
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java
@@ -0,0 +1,75 @@
+/*
+ * 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.arm.domain;
+
+import java.util.Map;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableMap;
+
+@AutoValue
+public abstract class LocalNetworkGateway {
+
+ @Nullable public abstract String id();
+ public abstract String name();
+ public abstract String location();
+ @Nullable public abstract String type();
+ @Nullable public abstract Map<String, String> tags();
+ @Nullable public abstract String etag();
+ public abstract LocalNetworkGatewayProperties properties();
+
+ LocalNetworkGateway() {
+
+ }
+
+ @SerializedNames({ "id", "name", "location", "type", "tags", "etag", "properties" })
+ public static LocalNetworkGateway create(String id, String name, String location, String type,
+ Map<String, String> tags, String etag, LocalNetworkGatewayProperties properties) {
+ return builder().id(id).name(name).location(location).type(type).tags(tags).etag(etag).properties(properties)
+ .build();
+ }
+
+ public abstract Builder toBuilder();
+
+ public static Builder builder() {
+ return new AutoValue_LocalNetworkGateway.Builder();
+ }
+
+ @AutoValue.Builder
+ public abstract static class Builder {
+ public abstract Builder id(String id);
+ public abstract Builder name(String name);
+ public abstract Builder location(String location);
+ public abstract Builder type(String type);
+ public abstract Builder tags(Map<String, String> tags);
+ public abstract Builder etag(String etag);
+ public abstract Builder properties(LocalNetworkGatewayProperties properties);
+
+ abstract String location();
+ abstract Map<String, String> tags();
+ abstract LocalNetworkGateway autoBuild();
+
+ public LocalNetworkGateway build() {
+ tags(tags() != null ? ImmutableMap.copyOf(tags()) : null);
+ location(location().toLowerCase()); // Avoid issues in regions such as CanadaEast
+ return autoBuild();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java
new file mode 100644
index 0000000..56b773f
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java
@@ -0,0 +1,96 @@
+/*
+ * 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.arm.domain;
+
+import java.util.List;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+
+@AutoValue
+public abstract class LocalNetworkGatewayProperties implements Provisionable {
+
+ @Nullable public abstract BGPSettings bgpSettings();
+ public abstract String gatewayIpAddress();
+ @Nullable public abstract AddressSpace localNetworkAddressSpace();
+ @Nullable public abstract String provisioningState();
+ @Nullable public abstract String resourceGuid();
+
+ @SerializedNames({ "bgpSettings", "gatewayIpAddress", "localNetworkAddressSpace", "provisioningState",
+ "resourceGuid" })
+ public static LocalNetworkGatewayProperties create(BGPSettings bgpSettings, String gatewayIpAddress,
+ AddressSpace localNetworkAddressSpace, String provisioningState, String resourceGuid) {
+ return builder().bgpSettings(bgpSettings).gatewayIpAddress(gatewayIpAddress)
+ .localNetworkAddressSpace(localNetworkAddressSpace).provisioningState(provisioningState)
+ .resourceGuid(resourceGuid).build();
+ }
+
+ LocalNetworkGatewayProperties() {
+
+ }
+
+ public abstract LocalNetworkGatewayProperties.Builder toBuilder();
+
+ public static LocalNetworkGatewayProperties.Builder builder() {
+ return new AutoValue_LocalNetworkGatewayProperties.Builder();
+ }
+
+ @AutoValue.Builder
+ public abstract static class Builder {
+ public abstract Builder bgpSettings(BGPSettings bgpSettings);
+ public abstract Builder gatewayIpAddress(String gatewayIpAddress);
+ public abstract Builder localNetworkAddressSpace(AddressSpace localNetworkAddressSpace);
+ public abstract Builder provisioningState(String provisioningState);
+ public abstract Builder resourceGuid(String resourceGuid);
+
+ public abstract LocalNetworkGatewayProperties build();
+ }
+
+ @AutoValue
+ public abstract static class BGPSettings {
+ public abstract int asn();
+ public abstract String bgpPeeringAddress();
+ public abstract int peerWeight();
+
+ @SerializedNames({ "asn", "bgpPeeringAddress", "peerWeight" })
+ public static LocalNetworkGatewayProperties.BGPSettings create(int asn, String bgpPeeringAddress, int peerWeight) {
+ return new AutoValue_LocalNetworkGatewayProperties_BGPSettings(asn, bgpPeeringAddress, peerWeight);
+ }
+
+ BGPSettings() {
+
+ }
+ }
+
+ @AutoValue
+ public abstract static class AddressSpace {
+ public abstract List<String> addressPrefixes();
+
+ @SerializedNames({ "addressPrefixes" })
+ public static LocalNetworkGatewayProperties.AddressSpace create(List<String> addressPrefixes) {
+ return new AutoValue_LocalNetworkGatewayProperties_AddressSpace(
+ addressPrefixes == null ? ImmutableList.<String> of() : ImmutableList.copyOf(addressPrefixes));
+ }
+
+ AddressSpace() {
+
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApi.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApi.java
new file mode 100644
index 0000000..a868e40
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApi.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.arm.features;
+
+import java.io.Closeable;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Named;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGateway;
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties;
+import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
+import org.jclouds.azurecompute.arm.functions.URIParser;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.oauth.v2.filters.OAuthFilter;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.rest.annotations.SelectJson;
+import org.jclouds.rest.binders.BindToJsonPayload;
+
+@Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/localNetworkGateways")
+@RequestFilters({ OAuthFilter.class, ApiVersionFilter.class })
+@Consumes(MediaType.APPLICATION_JSON)
+public interface LocalNetworkGatewayApi extends Closeable {
+
+ @Named("localnetworkgateway:list")
+ @GET
+ @SelectJson("value")
+ @Fallback(EmptyListOnNotFoundOr404.class)
+ List<LocalNetworkGateway> list();
+
+ @Named("localnetworkgateway:get")
+ @Path("/{name}")
+ @GET
+ @Fallback(NullOnNotFoundOr404.class)
+ LocalNetworkGateway get(@PathParam("name") String name);
+
+ @Named("localnetworkgateway:createOrUpdate")
+ @MapBinder(BindToJsonPayload.class)
+ @Path("/{name}")
+ @PUT
+ LocalNetworkGateway createOrUpdate(@PathParam("name") String name, @PayloadParam("location") String location,
+ @Nullable @PayloadParam("tags") Map<String, String> tags,
+ @PayloadParam("properties") LocalNetworkGatewayProperties properties);
+
+ @Named("localnetworkgateway:delete")
+ @Path("/{name}")
+ @DELETE
+ @ResponseParser(URIParser.class)
+ @Fallback(NullOnNotFoundOr404.class)
+ URI delete(@PathParam("name") String name);
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java
index 430c32f..a20407b 100644
--- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java
+++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java
@@ -138,7 +138,7 @@ public class AvailabilitySetApiMockTest extends BaseAzureComputeApiMockTest {
assertSent(server, "DELETE", path);
}
- public void deleteSubnetResourceDoesNotExist() throws InterruptedException {
+ public void deleteAvailabilitySetDoesNotExist() throws InterruptedException {
server.enqueue(response204());
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiLiveTest.java
new file mode 100644
index 0000000..301df03
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiLiveTest.java
@@ -0,0 +1,122 @@
+/*
+ * 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.arm.features;
+
+import static com.google.common.collect.Iterables.any;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.net.URI;
+
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGateway;
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties;
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties.AddressSpace;
+import org.jclouds.azurecompute.arm.domain.Provisionable;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+@Test(groups = "live", testName = "LocalNetworkGatewayApiLiveTest", singleThreaded = true)
+public class LocalNetworkGatewayApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+ private String name;
+
+ @BeforeClass
+ @Override
+ public void setup() {
+ super.setup();
+ createTestResourceGroup();
+ name = "jclouds-" + RAND;
+ }
+
+ @Test
+ public void createLocalNetworkGateway() {
+ AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24"));
+ LocalNetworkGatewayProperties props = LocalNetworkGatewayProperties.builder().gatewayIpAddress("1.2.3.4")
+ .localNetworkAddressSpace(localAddresses).build();
+
+ LocalNetworkGateway gw = api().createOrUpdate(name, LOCATION, null, props);
+
+ assertNotNull(gw);
+ assertEquals(gw.name(), name);
+ assertNotNull(gw.properties());
+ assertNotNull(gw.properties().gatewayIpAddress());
+ assertEquals(gw.properties().gatewayIpAddress(), "1.2.3.4");
+ assertNotNull(gw.properties().localNetworkAddressSpace());
+ assertTrue(gw.properties().localNetworkAddressSpace().addressPrefixes().contains("192.168.0.0/24"));
+ }
+
+ @Test(dependsOnMethods = "createLocalNetworkGateway")
+ public void getLocalNetworkGateway() {
+ assertNotNull(api().get(name));
+ }
+
+ @Test(dependsOnMethods = "createLocalNetworkGateway")
+ public void listLocalNetworkGateways() {
+ assertTrue(any(api().list(), new Predicate<LocalNetworkGateway>() {
+ @Override
+ public boolean apply(LocalNetworkGateway input) {
+ return name.equals(input.name());
+ }
+ }));
+ }
+
+ @Test(dependsOnMethods = "createLocalNetworkGateway")
+ public void updateLocalNetworkGateway() {
+ // Make sure the resource is fully provisioned before modifying it
+ waitUntilAvailable(name);
+
+ LocalNetworkGateway gw = api().get(name);
+ AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24", "192.168.1.0/24"));
+ gw = api().createOrUpdate(name, LOCATION, ImmutableMap.of("foo", "bar"),
+ gw.properties().toBuilder().localNetworkAddressSpace(localAddresses).build());
+
+ assertNotNull(gw);
+ assertTrue(gw.tags().containsKey("foo"));
+ assertEquals(gw.tags().get("foo"), "bar");
+ assertTrue(gw.properties().localNetworkAddressSpace().addressPrefixes().contains("192.168.0.0/24"));
+ assertTrue(gw.properties().localNetworkAddressSpace().addressPrefixes().contains("192.168.1.0/24"));
+ }
+
+ @Test(dependsOnMethods = { "getLocalNetworkGateway", "listLocalNetworkGateways", "updateLocalNetworkGateway" }, alwaysRun = true)
+ public void deleteLocalNetworkGateway() {
+ // Make sure the resource is fully provisioned before deleting it
+ waitUntilAvailable(name);
+ URI uri = api().delete(name);
+ assertResourceDeleted(uri);
+ }
+
+ private LocalNetworkGatewayApi api() {
+ return api.getLocalNetworkGatewayApi(resourceGroupName);
+ }
+
+ private boolean waitUntilAvailable(final String name) {
+ return resourceAvailable.apply(new Supplier<Provisionable>() {
+ @Override
+ public Provisionable get() {
+ LocalNetworkGateway gw = api().get(name);
+ return gw == null ? null : gw.properties();
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiMockTest.java
new file mode 100644
index 0000000..840c872
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocalNetworkGatewayApiMockTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.arm.features;
+
+import static com.google.common.collect.Iterables.isEmpty;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import java.net.URI;
+import java.util.List;
+
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGateway;
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties;
+import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties.AddressSpace;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = "unit", testName = "LocalNetworkGatewayApiMockTest", singleThreaded = true)
+public class LocalNetworkGatewayApiMockTest extends BaseAzureComputeApiMockTest {
+
+ private final String subscriptionid = "SUBSCRIPTIONID";
+ private final String resourcegroup = "myresourcegroup";
+ private final String name = "mylocalgw";
+ private final String apiVersion = "api-version=2018-02-01";
+
+ public void createOrUpdateLocalNetworkGateway() throws InterruptedException {
+ server.enqueue(jsonResponse("/localnetworkgatewaycreate.json").setResponseCode(200));
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24"));
+ LocalNetworkGatewayProperties props = LocalNetworkGatewayProperties.builder().gatewayIpAddress("1.2.3.4")
+ .localNetworkAddressSpace(localAddresses).build();
+ LocalNetworkGateway gw = gwapi.createOrUpdate(name, "westeurope", null, props);
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways/%s?%s",
+ subscriptionid, resourcegroup, name, apiVersion);
+ String json = "{\"location\":\"westeurope\",\"properties\":{\"gatewayIpAddress\":\"1.2.3.4\",\"localNetworkAddressSpace\":{\"addressPrefixes\":[\"192.168.0.0/24\"]}}}";
+ assertSent(server, "PUT", path, json);
+
+ assertEquals(gw.name(), name);
+ assertNotNull(gw.properties());
+ assertNotNull(gw.properties().gatewayIpAddress());
+ assertEquals(gw.properties().gatewayIpAddress(), "1.2.3.4");
+ assertNotNull(gw.properties().localNetworkAddressSpace());
+ assertTrue(gw.properties().localNetworkAddressSpace().addressPrefixes().contains("192.168.0.0/24"));
+ }
+
+ public void getLocalNetworkGateway() throws InterruptedException {
+ server.enqueue(jsonResponse("/localnetworkgatewayget.json").setResponseCode(200));
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ LocalNetworkGateway gw = gwapi.get(name);
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways/%s?%s",
+ subscriptionid, resourcegroup, name, apiVersion);
+ assertSent(server, "GET", path);
+
+ assertEquals(gw.name(), name);
+ }
+
+ public void getLocalNetworkGatewayReturns404() throws InterruptedException {
+ server.enqueue(response404());
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ LocalNetworkGateway gw = gwapi.get(name);
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways/%s?%s",
+ subscriptionid, resourcegroup, name, apiVersion);
+ assertSent(server, "GET", path);
+
+ assertNull(gw);
+ }
+
+ public void listLocalNetworkGateways() throws InterruptedException {
+ server.enqueue(jsonResponse("/localnetworkgatewaylist.json").setResponseCode(200));
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ List<LocalNetworkGateway> gws = gwapi.list();
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways?%s",
+ subscriptionid, resourcegroup, apiVersion);
+ assertSent(server, "GET", path);
+
+ assertTrue(gws.size() > 0);
+ }
+
+ public void listLocalNetworkGatewaysReturns404() throws InterruptedException {
+ server.enqueue(response404());
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ List<LocalNetworkGateway> gws = gwapi.list();
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways?%s",
+ subscriptionid, resourcegroup, apiVersion);
+ assertSent(server, "GET", path);
+
+ assertTrue(isEmpty(gws));
+ }
+
+ public void deleteLocalNetworkGateway() throws InterruptedException {
+ server.enqueue(response202WithHeader());
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ URI uri = gwapi.delete(name);
+ assertNotNull(uri);
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways/%s?%s",
+ subscriptionid, resourcegroup, name, apiVersion);
+ assertSent(server, "DELETE", path);
+ }
+
+ public void deleteLocalNetworkGatewayDoesNotExist() throws InterruptedException {
+ server.enqueue(response204());
+ LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
+
+ URI uri = gwapi.delete(name);
+ assertNull(uri);
+
+ String path = String.format(
+ "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/localNetworkGateways/%s?%s",
+ subscriptionid, resourcegroup, name, apiVersion);
+ assertSent(server, "DELETE", path);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/test/resources/localnetworkgatewaycreate.json
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/resources/localnetworkgatewaycreate.json b/providers/azurecompute-arm/src/test/resources/localnetworkgatewaycreate.json
new file mode 100644
index 0000000..99efd0e
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/localnetworkgatewaycreate.json
@@ -0,0 +1,18 @@
+{
+ "name": "mylocalgw",
+ "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/Microsoft.Network/localNetworkGateways/mylocalgw",
+ "etag": "W/\"e76a6517-260a-4424-811b-b4d518109424\"",
+ "type": "Microsoft.Network/localNetworkGateways",
+ "location": "westeurope",
+ "properties": {
+ "provisioningState": "Updating",
+ "resourceGuid": "cd00ef09-fec6-4d6e-aa15-77cf06d14915",
+ "localNetworkAddressSpace": {
+ "addressPrefixes": [
+ "192.168.0.0/24"
+ ]
+ },
+ "gatewayIpAddress": "1.2.3.4"
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/test/resources/localnetworkgatewayget.json
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/resources/localnetworkgatewayget.json b/providers/azurecompute-arm/src/test/resources/localnetworkgatewayget.json
new file mode 100644
index 0000000..99efd0e
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/localnetworkgatewayget.json
@@ -0,0 +1,18 @@
+{
+ "name": "mylocalgw",
+ "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/Microsoft.Network/localNetworkGateways/mylocalgw",
+ "etag": "W/\"e76a6517-260a-4424-811b-b4d518109424\"",
+ "type": "Microsoft.Network/localNetworkGateways",
+ "location": "westeurope",
+ "properties": {
+ "provisioningState": "Updating",
+ "resourceGuid": "cd00ef09-fec6-4d6e-aa15-77cf06d14915",
+ "localNetworkAddressSpace": {
+ "addressPrefixes": [
+ "192.168.0.0/24"
+ ]
+ },
+ "gatewayIpAddress": "1.2.3.4"
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff93565b/providers/azurecompute-arm/src/test/resources/localnetworkgatewaylist.json
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/resources/localnetworkgatewaylist.json b/providers/azurecompute-arm/src/test/resources/localnetworkgatewaylist.json
new file mode 100644
index 0000000..d1c32ad
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/localnetworkgatewaylist.json
@@ -0,0 +1,22 @@
+{
+ "value": [
+ {
+ "name": "mylocalgw",
+ "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/myresourcegroup/providers/Microsoft.Network/localNetworkGateways/mylocalgw",
+ "etag": "W/\"e76a6517-260a-4424-811b-b4d518109424\"",
+ "type": "Microsoft.Network/localNetworkGateways",
+ "location": "westeurope",
+ "properties": {
+ "provisioningState": "Updating",
+ "resourceGuid": "cd00ef09-fec6-4d6e-aa15-77cf06d14915",
+ "localNetworkAddressSpace": {
+ "addressPrefixes": [
+ "192.168.0.0/24"
+ ]
+ },
+ "gatewayIpAddress": "1.2.3.4"
+ }
+ }
+ ]
+}
+