Repository: jclouds
Updated Branches:
  refs/heads/master ec03b710a -> a540daf3d


This is the first commit of for SoftLayer Network API set

minor code improvement

Syntax fix with coding standards

- added more test coverage to NetworkApiMockTest class
- minor clean up
- minor code improvement


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a540daf3
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a540daf3
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a540daf3

Branch: refs/heads/master
Commit: a540daf3d67619eb2fb728b40b169d0418f10c2a
Parents: ec03b71
Author: William Chen <[email protected]>
Authored: Thu Nov 16 16:08:09 2017 +0800
Committer: Andrea Turli <[email protected]>
Committed: Wed Nov 22 14:32:22 2017 +0100

----------------------------------------------------------------------
 .../org/jclouds/softlayer/SoftLayerApi.java     |   7 +
 .../org/jclouds/softlayer/domain/Network.java   | 159 ++++++++
 .../org/jclouds/softlayer/domain/Subnet.java    | 162 ++++++++
 .../jclouds/softlayer/features/NetworkApi.java  | 185 ++++++++++
 .../softlayer/features/NetworkApiLiveTest.java  | 207 +++++++++++
 .../softlayer/features/NetworkApiMockTest.java  | 370 +++++++++++++++++++
 .../test/resources/network_createObject.json    |   7 +
 .../test/resources/network_createSubnet.json    |  18 +
 .../src/test/resources/network_get_153001.json  |   8 +
 .../src/test/resources/network_list.json        |  41 ++
 .../resources/network_subnet_get_1592631.json   |  26 ++
 11 files changed, 1190 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerApi.java
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerApi.java 
b/providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerApi.java
index 5c57918..14c0171 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerApi.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/SoftLayerApi.java
@@ -19,6 +19,7 @@ package org.jclouds.softlayer;
 import org.jclouds.rest.annotations.Delegate;
 import org.jclouds.softlayer.features.AccountApi;
 import org.jclouds.softlayer.features.DatacenterApi;
+import org.jclouds.softlayer.features.NetworkApi;
 import org.jclouds.softlayer.features.SoftwareDescriptionApi;
 import org.jclouds.softlayer.features.VirtualGuestApi;
 import org.jclouds.softlayer.features.VirtualGuestBlockDeviceTemplateGroupApi;
@@ -56,4 +57,10 @@ public interface SoftLayerApi extends Closeable {
     */
    @Delegate
    AccountApi getAccountApi();
+
+   /**
+    * Provides access to Network features.
+    */
+   @Delegate
+   NetworkApi getNetworkApi();
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Network.java
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Network.java 
b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Network.java
new file mode 100644
index 0000000..5be402f
--- /dev/null
+++ 
b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Network.java
@@ -0,0 +1,159 @@
+/*
+ * 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.softlayer.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+/**
+ * Class Network
+ *
+ * @see <a href= 
"http://sldn.softlayer.com/reference/datatypes/SoftLayer_Network"; />
+ */
+
+@AutoValue
+public abstract class Network {
+
+   public abstract long accountId();
+   public abstract long id();
+   public abstract int cidr();
+   public abstract String networkIdentifier();
+   @Nullable
+   public abstract String name();
+   @Nullable
+   public abstract String notes();
+   @Nullable
+   public abstract List<Subnet> subnets();
+
+   @SerializedNames({"accountId", "id", "cidr", "networkIdentifier", "name", 
"notes", "subnets"})
+   public static Network create(final long id, final long accountId, int cidr, 
String networkIdentifier, String name,
+                                String notes, List<Subnet> subnets) {
+      return new AutoValue_Network(id, accountId, cidr, networkIdentifier, 
name, notes,
+                                    subnets == null ? ImmutableList.<Subnet> 
of() : ImmutableList.copyOf(subnets));
+   }
+
+   Network() {}
+
+   @AutoValue
+   public abstract static class CreateNetwork {
+
+      public abstract String networkIdentifier();
+      public abstract String name();
+      public abstract int cidr();
+      @Nullable
+      public abstract String notes();
+
+      @SerializedNames({"networkIdentifier", "name", "cidr", "notes"})
+      private static CreateNetwork create(final String networkIdentifier, 
final String name, final int cidr, @Nullable final String notes) {
+         return builder()
+                 .networkIdentifier(networkIdentifier)
+                 .name(name)
+                 .cidr(cidr)
+                 .notes(notes)
+                 .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Network_CreateNetwork.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder networkIdentifier(String networkIdentifier);
+         public abstract Builder name(String name);
+         public abstract Builder cidr(int cidr);
+         @Nullable
+         public abstract Builder notes(String notes);
+
+         abstract CreateNetwork autoBuild();
+
+         public CreateNetwork build() {
+            return autoBuild();
+         }
+      }
+   }
+
+   @AutoValue
+   public abstract static class EditNetwork {
+
+      public abstract String name();
+      public abstract String notes();
+      public abstract long id();
+
+      @SerializedNames({"name", "notes", "id"})
+      private static EditNetwork create(final String name, final String notes, 
final long id) {
+         return builder()
+                 .name(name)
+                 .notes(notes)
+                 .id(id)
+                 .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Network_EditNetwork.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder name(String name);
+         public abstract Builder notes(String notes);
+         public abstract Builder id(long id);
+
+         abstract EditNetwork autoBuild();
+
+         public EditNetwork build() {
+            return autoBuild();
+         }
+      }
+   }
+
+   @AutoValue
+   public abstract static class DeleteNetwork {
+
+      public abstract long id();
+
+      @SerializedNames({"id"})
+      private static DeleteNetwork create(final long id) {
+         return builder()
+                 .id(id)
+                 .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Network_DeleteNetwork.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder id(long id);
+
+         abstract DeleteNetwork autoBuild();
+
+         public DeleteNetwork build() {
+            return autoBuild();
+         }
+      }
+   }
+}
+

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Subnet.java
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Subnet.java 
b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Subnet.java
new file mode 100644
index 0000000..598f660
--- /dev/null
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Subnet.java
@@ -0,0 +1,162 @@
+/*
+ * 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.softlayer.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+
+/**
+ * Class SecurityGroup
+ *
+ * @see <a href= 
"http://sldn.softlayer.com/reference/datatypes/softlayer_network_subnet"; />
+ */
+
+@AutoValue
+public abstract class Subnet {
+
+   public abstract String boradcastAddress();
+   public abstract int cidr();
+   public abstract String gateway();
+   public abstract long id();
+   public abstract boolean isCustomerOwned();
+   public abstract boolean isCustomerRoutable();
+   @Nullable
+   public abstract Date modifyDate();
+   public abstract String netmask();
+   public abstract String networkIdentifier();
+   public abstract long networkVlanId();
+   @Nullable
+   public abstract String note();
+   public abstract String sortOrder();
+   @Nullable
+   public abstract String subnetType();
+   public abstract String totalIpAddresses();
+   public abstract String usableIpAddressCount();
+   public abstract int version();
+   @Nullable
+   public abstract String addressSpace();
+
+   @SerializedNames({"broadcastAddress", "cidr", "gateway", "id", 
"isCustomerOwned", "isCustomerRoutable", "modifyDate",
+                     "netmask", "networkIdentifier", "networkVlanId", "note", 
"sortOrder", "subnetType", "totalIpAddresses",
+                     "usableIpAddressCount", "version", "addressSpace"})
+   public static Subnet create(String broadcastAddress, int cidr, String 
gateway, final long id, boolean isCustomerOwned, boolean isCustomerRoutable,
+                               Date modifyDate, String netmask, String 
networkIdentifier, long networkVlanId, String note, String sortOrder, String 
subnetType,
+                               String totalIpAddresses, String 
usableIpAddressCount, int version, String addressSpace) {
+      return new AutoValue_Subnet(broadcastAddress, cidr, gateway, id, 
isCustomerOwned, isCustomerRoutable, modifyDate, netmask,
+              networkIdentifier, networkVlanId, note, sortOrder, subnetType, 
totalIpAddresses, usableIpAddressCount, version, addressSpace);
+   }
+
+   Subnet() {}
+
+   @AutoValue
+   public abstract static class CreateSubnet {
+
+      public abstract String networkIdentifier();
+      public abstract String note();
+      public abstract int cidr();
+
+      @SerializedNames({"networkIdentifier", "note", "cidr"})
+      private static CreateSubnet create(final String networkIdentifier, final 
String note, final int cidr) {
+         return builder()
+                 .networkIdentifier(networkIdentifier)
+                 .cidr(cidr)
+                 .note(note)
+                 .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Subnet_CreateSubnet.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder networkIdentifier(String networkIdentifier);
+         public abstract Builder note(String note);
+         public abstract Builder cidr(int cidr);
+
+         abstract CreateSubnet autoBuild();
+
+         public CreateSubnet build() {
+            return autoBuild();
+         }
+      }
+   }
+
+   @AutoValue
+   public abstract static class DeleteSubnet {
+
+      public abstract long id();
+
+      @SerializedNames({"id"})
+      private static DeleteSubnet create(final long id) {
+         return builder()
+                 .id(id)
+                 .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Subnet_DeleteSubnet.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder id(long id);
+
+         abstract DeleteSubnet autoBuild();
+
+         public DeleteSubnet build() {
+            return autoBuild();
+         }
+      }
+   }
+
+   @AutoValue
+   public abstract static class CreateDatacenterName {
+      public abstract String name();
+
+      @SerializedNames({"name"})
+      public static CreateDatacenterName create(String name) {
+         return builder()
+                 .name(name)
+                 .build();
+      }
+
+      CreateDatacenterName() {}
+
+      public static Builder builder() {
+         return new AutoValue_Subnet_CreateDatacenterName.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder name(String name);
+
+         abstract CreateDatacenterName autoBuild();
+
+         public CreateDatacenterName build() {
+            return autoBuild();
+         }
+      }
+   }
+}
+

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/main/java/org/jclouds/softlayer/features/NetworkApi.java
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/main/java/org/jclouds/softlayer/features/NetworkApi.java
 
b/providers/softlayer/src/main/java/org/jclouds/softlayer/features/NetworkApi.java
new file mode 100644
index 0000000..a05e00e
--- /dev/null
+++ 
b/providers/softlayer/src/main/java/org/jclouds/softlayer/features/NetworkApi.java
@@ -0,0 +1,185 @@
+/*
+ * 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.softlayer.features;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.http.filters.BasicAuthentication;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.QueryParams;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.WrapWith;
+import org.jclouds.softlayer.domain.Network;
+import org.jclouds.softlayer.domain.Subnet;
+
+import javax.inject.Named;
+import javax.ws.rs.Path;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.DELETE;
+
+import javax.ws.rs.core.MediaType;
+import java.io.Closeable;
+import java.util.List;
+
+/**
+ * Provides access to Network via their REST API.
+ * <p/>
+ * @see <a href="http://sldn.softlayer.com/article/REST"; />
+ */
+@RequestFilters(BasicAuthentication.class)
+@Path("/v{jclouds.api-version}")
+@Consumes(MediaType.APPLICATION_JSON)
+public interface NetworkApi extends Closeable {
+
+   String NAME_MASK = "mask.subnets";
+
+   /**
+    * returns a list of networks belong to the account
+    * @return an account's associated network objects.
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/getallobjects";
 />
+    */
+   @GET
+   @Named("Network:getAlllObjects")
+   @Path("/SoftLayer_Network/getAllObjects")
+   @Produces(MediaType.APPLICATION_JSON)
+   @QueryParams(keys = "objectMask", values = NAME_MASK)
+   @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class)
+   List<Network> listNetworks();
+
+   /**
+    * returns the name of the network of the given id
+    * @param id id of the network
+    * @return String or null
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/getname"; />
+    */
+   @GET
+   @Named("Network:getName")
+   @Path("/SoftLayer_Network/{id}/getName")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Fallback(NullOnNotFoundOr404.class)
+   String getName(@PathParam("id") long id);
+
+   /**
+    * returns the notes of the network of the given id
+    * @param id id of the network
+    * @return String or null
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/getnotes"; 
/>
+    */
+   @GET
+   @Named("Network:getNotes")
+   @Path("/SoftLayer_Network/{id}/getNotes")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Fallback(NullOnNotFoundOr404.class)
+   String getNotes(@PathParam("id") long id);
+
+   /**
+    * returns the details of the network of the given id
+    * @param id id of the network
+    * @return String or null
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/getObject"; 
/>
+    */
+   @GET
+   @Named("Network:getObject")
+   @Path("/SoftLayer_Network/{id}/getObject")
+   @Produces(MediaType.APPLICATION_JSON)
+   @QueryParams(keys = "objectMask", values = NAME_MASK)
+   @Fallback(NullOnNotFoundOr404.class)
+   Network getNetwork(@PathParam("id") long id);
+
+   /**
+    * returns the subnets of the network of the given id
+    * @param id id of the network
+    * @return list of subnets under the network or null
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/getSubnet"; 
/>
+    */
+   @GET
+   @Named("Network:getSubnets")
+   @Path("/SoftLayer_Network/{id}/getSubnets")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class)
+   List<Subnet> getSubnets(@PathParam("id") long id);
+
+   /**
+    * creates a network
+    * @param networkToBeCreated the network creation definition of 
Network.CreateNetwork
+    * @return Network created
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/SoftLayer_network/createObject";
 />
+    */
+   @POST
+   @Named("network:createObject")
+   @Path("/SoftLayer_Network/createObject")
+   @Produces(MediaType.APPLICATION_JSON)
+   Network createNetwork(@WrapWith("parameters") List<Network.CreateNetwork> 
networkToBeCreated);
+
+   /**
+    * modifies a network with the given id
+    * @param id the id of the network to be edited
+    * @param networkToBeEdited the network edition definition of 
Network.EditNetwork
+    * @return true when edition was successful and false for unsuccessful 
edition
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/SoftLayer_network/editObject";
 />
+    */
+   @PUT
+   @Named("Network:editObject")
+   @Path("/SoftLayer_Network/{id}/editObject")
+   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
+   boolean editNetwork(@PathParam("id") long id, @WrapWith("parameters") 
List<Network.EditNetwork> networkToBeEdited);
+
+   /**
+    * deletes a network with the given id
+    * @param id the id of the network to be deleted
+    * @return boolean value true for successful deletion and false for failed 
deletion
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/SoftLayer_network/deleteObject";
 />
+    */
+   @DELETE
+   @Named("network:deleteObject")
+   @Path("/SoftLayer_Network/{id}")
+   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
+   boolean deleteNetwork(@PathParam("id") long id);
+
+   /**
+    * creates a subnet on the given network
+    * @param id the id of the network to be edited
+    * @param subnetToBeCreated the subnet creation definition of 
Subnet.CreateSubnet
+    * @return subnet created
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/createSubnet";
 />
+    */
+   @POST
+   @Named("Network:createSubnet")
+   @Path("/SoftLayer_Network/{id}/createSubnet")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Fallback(NullOnNotFoundOr404.class)
+   Subnet createSubnet(@PathParam("id") long id, @WrapWith("parameters") 
List<Object> subnetToBeCreated);
+
+   /**
+    * removes the subnet of the given network
+    * @param id id of the targeted seurity group
+    * @param subnetToBeDeleted the subnet deletion definition of 
Subnet.DeleteSubnet
+    * @reutrn boolean value true for successful deletion and false for failed 
deletion
+    * @see <a 
href="http://sldn.softlayer.com/reference/services/softlayer_network/deleteSubnet";
 />
+    */
+   @POST
+   @Named("Network:deleteSubnet")
+   @Path("/SoftLayer_Network/{id}/deleteSubnet")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
+   boolean deleteSubnet(@PathParam("id") long id, @WrapWith("parameters") 
List<Subnet.DeleteSubnet> subnetToBeDeleted);
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiLiveTest.java
 
b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiLiveTest.java
new file mode 100644
index 0000000..638e3ac
--- /dev/null
+++ 
b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiLiveTest.java
@@ -0,0 +1,207 @@
+/*
+ * 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.softlayer.features;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import org.jclouds.softlayer.domain.Network;
+import org.jclouds.softlayer.domain.Subnet;
+import org.jclouds.softlayer.domain.Datacenter;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertNull;
+
+/**
+ * Tests behavior of {@code NetworkApi}
+ */
+@Test(groups = "live")
+public class NetworkApiLiveTest extends BaseSoftLayerApiLiveTest {
+
+   private NetworkApi networkApi;
+
+   private Network network = null;
+   private Subnet subnet = null;
+
+   private Datacenter datacenter = null;
+
+   @BeforeClass(groups = {"integration", "live"})
+   @Override
+   public void setup() {
+      super.setup();
+
+      networkApi = api.getNetworkApi();
+
+      datacenter = Iterables.get(api.getDatacenterApi().listDatacenters(), 0);
+      assertNotNull(datacenter, "Datacenter must not be null");
+   }
+
+   @Test
+   public void testCreateNetwork() throws Exception {
+      Network.CreateNetwork createNetwork = Network.CreateNetwork.builder()
+              .networkIdentifier("192.168.253.0")
+              .name("NetworkApiLiveTestNetwork")
+              .cidr(24)
+              .notes("this is a test network from jclouds NetworkApiLiveTest.")
+              .build();
+
+      network = networkApi.createNetwork(ImmutableList.of(createNetwork));
+
+      checkNetwork(network);
+   }
+
+   @Test(dependsOnMethods = "testCreateNetwork")
+   public void testListNetworks() throws Exception {
+      List<Network> response = networkApi.listNetworks();
+      assertNotNull(response, "listNetworks returns null");
+
+      boolean found = false;
+
+      for (Network n : response) {
+         Network newDetails = networkApi.getNetwork(n.id());
+         assertEquals(n.id(), newDetails.id());
+         checkNetwork(newDetails);
+         if (n.id() == network.id()) {
+            found = true;
+            assertEquals(n.cidr(), network.cidr());
+            assertEquals(n.networkIdentifier(), network.networkIdentifier());
+            assertEquals(n.name(), n.name());
+         }
+      }
+
+      assertTrue(found, "List Networks didn't return created network.");
+   }
+
+   @Test(dependsOnMethods = "testCreateNetwork")
+   public void testGetNetwork() throws Exception {
+      Network found = networkApi.getNetwork(network.id());
+      assertEquals(found, network);
+      checkNetwork(found);
+      assertEquals(found.networkIdentifier(), "192.168.253.0");
+      assertEquals(found.name(), "NetworkApiLiveTestNetwork");
+      assertEquals(found.cidr(), 24);
+      assertEquals(found.notes(), "this is a test network from jclouds 
NetworkApiLiveTest.");
+   }
+
+   @Test(dependsOnMethods = "testCreateNetwork")
+   public void testGetName() throws Exception {
+      String name = networkApi.getName(network.id());
+
+      assertEquals(name, "NetworkApiLiveTestNetwork");
+   }
+
+   @Test(dependsOnMethods = "testCreateNetwork")
+   public void testGetNotes() throws Exception {
+      String notes = networkApi.getNotes(network.id());
+
+      assertEquals(notes, "this is a test network from jclouds 
NetworkApiLiveTest.");
+   }
+
+   @Test(dependsOnMethods = "testCreateNetwork")
+   public void testCreateSubnet() throws Exception {
+      Subnet.CreateSubnet createSubnet = Subnet.CreateSubnet.builder()
+              .networkIdentifier("192.168.253.0")
+              .cidr(28)
+              .note("This is a test subnet from NetworkApiLiveTest")
+              .build();
+
+      Subnet.CreateDatacenterName createDatacenterName = 
Subnet.CreateDatacenterName.builder()
+              .name("dal10.pod01")
+              .build();
+
+      List<Object> parameters = new ArrayList<Object>();
+      parameters.add(createSubnet);
+      parameters.add(createDatacenterName);
+
+      subnet = networkApi.createSubnet(network.id(), parameters);
+
+      network = networkApi.getNetwork(network.id());
+      assertEquals(network.subnets().size(), 1);
+   }
+
+   @Test(dependsOnMethods = "testCreateSubnet")
+   public void testGetSubnets() throws Exception {
+      List<Subnet> subnets = networkApi.getSubnets(network.id());
+
+      assertEquals(subnets.size(), 1);
+      assertEquals(subnets.get(0).id(), subnet.id());
+      assertEquals(subnets.get(0).cidr(), subnet.cidr());
+      assertEquals(subnets.get(0).networkIdentifier(), 
subnet.networkIdentifier());
+      assertEquals(subnets.get(0).note(), subnet.note());
+   }
+
+   @Test(dependsOnMethods = "testGetSubnets")
+   public void testDeleteSubnet() throws Exception {
+      Subnet.DeleteSubnet deleteSubnet = Subnet.DeleteSubnet.builder()
+              .id(subnet.id())
+              .build();
+
+
+      List<Subnet.DeleteSubnet> parameters = new 
ArrayList<Subnet.DeleteSubnet>();
+      parameters.add(deleteSubnet);
+
+      boolean deletion = networkApi.deleteSubnet(network.id(), parameters);
+
+      assertTrue(deletion, "deletion of subnet failed");
+
+      List<Subnet> subnets = networkApi.getSubnets(network.id());
+      assertEquals(subnets.size(), 0);
+
+      subnet = null;
+   }
+
+   @Test(dependsOnMethods = "testGetNetwork")
+   public void testEditNetwork() throws Exception {
+      Network.EditNetwork editNetwork = Network.EditNetwork.builder()
+              .name("newNetworkApiLiveTestNetwork")
+              .notes("new notes")
+              .id(network.id())
+              .build();
+
+      boolean edit = networkApi.editNetwork(network.id(), 
ImmutableList.of(editNetwork));
+      assertTrue(edit, "edition failed");
+
+      Network newFound = networkApi.getNetwork(network.id());
+      assertEquals(newFound.name(), "newNetworkApiLiveTestNetwork");
+      assertEquals(newFound.notes(), "new notes");
+
+      network = newFound;
+   }
+
+   @Test(dependsOnMethods = "testDeleteSubnet")
+   public void testDeleteNetwork() throws Exception {
+      boolean deletion = networkApi.deleteNetwork(network.id());
+
+      Network found = networkApi.getNetwork(network.id());
+      assertNull(found, "deletion failed");
+
+      network = null;
+   }
+
+   private void checkNetwork(Network n) {
+      assertNotNull(n.id());
+      assertNotNull(n.name());
+      assertNotNull(n.networkIdentifier());
+      assertNotNull(n.cidr());
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiMockTest.java
 
b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiMockTest.java
new file mode 100644
index 0000000..5cf3e26
--- /dev/null
+++ 
b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/NetworkApiMockTest.java
@@ -0,0 +1,370 @@
+/*
+ * 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.softlayer.features;
+
+import com.google.common.collect.ImmutableList;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
+import org.jclouds.softlayer.SoftLayerApi;
+import org.jclouds.softlayer.config.SoftLayerParserModule;
+import org.jclouds.softlayer.domain.Network;
+import org.jclouds.softlayer.domain.Subnet;
+import org.jclouds.softlayer.internal.BaseSoftLayerMockTest;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.google.common.collect.Iterables.size;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertFalse;
+/**
+ * Mock tests for the {@link NetworkApi} class.
+ */
+@Test(groups = "unit", testName = "SecurityGroupApiMockTest")
+public class NetworkApiMockTest extends BaseSoftLayerMockTest {
+
+   public void testListNetworks() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody(payloadFromResource("/network_list.json")));
+      NetworkApi api = getNetworkApi(server);
+
+      Iterable<Network> networks = api.listNetworks();
+
+      try {
+         assertEquals(size(networks), 5);
+         assertEquals(server.getRequestCount(), 1);
+
+         assertSent(server, "GET", 
"/SoftLayer_Network/getAllObjects?objectMask=mask.subnets");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testEmptyListNetworks() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      try {
+         assertTrue(api.listNetworks().isEmpty());
+         assertSent(server, "GET", 
"/SoftLayer_Network/getAllObjects?objectMask=mask.subnets");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testCreateNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody(payloadFromResource("/network_createObject.json")));
+      NetworkApi api = getNetworkApi(server);
+
+      Network.CreateNetwork createNetwork = Network.CreateNetwork.builder()
+              .networkIdentifier("192.168.0.0")
+              .name("testNet")
+              .cidr(16)
+              .notes("testNotes")
+              .build();
+
+      Network network = api.createNetwork(ImmutableList.of(createNetwork));
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "POST", "/SoftLayer_Network/createObject");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody(payloadFromResource("/network_get_153001.json")));
+      NetworkApi api = getNetworkApi(server);
+
+      Network network = api.getNetwork(153001);
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "GET", 
"/SoftLayer_Network/153001/getObject?objectMask=mask.subnets");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetNullNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      try {
+         assertNull(api.getNetwork(153001));
+         assertSent(server, "GET", 
"/SoftLayer_Network/153001/getObject?objectMask=mask.subnets");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetName() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody("testNet"));
+      NetworkApi api = getNetworkApi(server);
+
+      String name = api.getName(153001);
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "GET", "/SoftLayer_Network/153001/getName");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetNullName() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      try {
+         assertNull(api.getName(153001));
+         assertSent(server, "GET", "/SoftLayer_Network/153001/getName");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetNotes() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody("testNotes"));
+      NetworkApi api = getNetworkApi(server);
+
+      String notes = api.getNotes(153001);
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "GET", "/SoftLayer_Network/153001/getNotes");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetNullNotes() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      try {
+         assertNull(api.getNotes(153001));
+         assertSent(server, "GET", "/SoftLayer_Network/153001/getNotes");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testCreateSubnet() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody(payloadFromResource("/network_createSubnet.json")));
+      NetworkApi api = getNetworkApi(server);
+
+      Subnet.CreateSubnet createSubnet = Subnet.CreateSubnet.builder()
+              .networkIdentifier("192.168.1.0")
+              .cidr(24)
+              .note("testNet test create subnet")
+              .build();
+
+      Subnet.CreateDatacenterName createDatacenterName = 
Subnet.CreateDatacenterName.builder()
+              .name("dal10.pod01")
+              .build();
+
+      List<Object> parameters = new ArrayList<Object>();
+      parameters.add(createSubnet);
+      parameters.add(createDatacenterName);
+
+      Subnet subnet = api.createSubnet(153001, parameters);
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "POST", "/SoftLayer_Network/153001/createSubnet");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testCreateSubnetOnNonExistingNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      Subnet.CreateSubnet createSubnet = Subnet.CreateSubnet.builder()
+              .networkIdentifier("192.168.1.0")
+              .cidr(24)
+              .note("testNet test create subnet")
+              .build();
+
+      Subnet.CreateDatacenterName createDatacenterName = 
Subnet.CreateDatacenterName.builder()
+              .name("dal10.pod01")
+              .build();
+
+      List<Object> parameters = new ArrayList<Object>();
+      parameters.add(createSubnet);
+      parameters.add(createDatacenterName);
+
+      Subnet subnet = api.createSubnet(153001, parameters);
+
+      try {
+         assertNull(subnet);
+         assertSent(server, "POST", "/SoftLayer_Network/153001/createSubnet");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetSubnets() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setBody(payloadFromResource("/network_subnet_get_1592631.json")));
+      NetworkApi api = getNetworkApi(server);
+
+      List<Subnet> subnets = api.getSubnets(153001);
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "GET", "/SoftLayer_Network/153001/getSubnets");
+         assertEquals(subnets.size(), 1);
+         assertEquals(subnets.get(0).id(), 1592631);
+         assertEquals(subnets.get(0).cidr(), 28);
+         assertEquals(subnets.get(0).networkIdentifier(), "192.168.253.0");
+         assertEquals(subnets.get(0).note(), "This is a test subnet from 
NetworkApiMockTest");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetSubnetsOnNonExistingNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      try {
+         assertTrue(api.getSubnets(153001).isEmpty());
+         assertSent(server, "GET", "/SoftLayer_Network/153001/getSubnets");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteSubnet() throws Exception {
+      MockWebServer server = mockWebServer(new MockResponse().setBody("true"));
+      NetworkApi api = getNetworkApi(server);
+
+      Subnet.DeleteSubnet deleteSubnet = Subnet.DeleteSubnet.builder()
+              .id(1592631)
+              .build();
+
+      List<Subnet.DeleteSubnet> parameters = new 
ArrayList<Subnet.DeleteSubnet>();
+      parameters.add(deleteSubnet);
+      boolean deletion = api.deleteSubnet(153001, parameters);
+
+      try {
+         assertTrue(deletion, "deletion failed");
+
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "POST", "/SoftLayer_Network/153001/deleteSubnet");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteNonExistingSubnet() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      Subnet.DeleteSubnet deleteSubnet = Subnet.DeleteSubnet.builder()
+              .id(1592631)
+              .build();
+
+      List<Subnet.DeleteSubnet> parameters = new 
ArrayList<Subnet.DeleteSubnet>();
+      parameters.add(deleteSubnet);
+      boolean deletion = api.deleteSubnet(153001, parameters);
+
+      try {
+         assertFalse(deletion);
+         assertSent(server, "POST", "/SoftLayer_Network/153001/deleteSubnet");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testEditNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new MockResponse().setBody("true"));
+      NetworkApi api = getNetworkApi(server);
+
+      Network.EditNetwork editNetwork = Network.EditNetwork.builder()
+              .name("newNetworkApiLiveTestNetwork")
+              .notes("new notes")
+              .id(153001)
+              .build();
+
+      boolean edit = api.editNetwork(153001, ImmutableList.of(editNetwork));
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "PUT", "/SoftLayer_Network/153001/editObject");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testEditNullNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      Network.EditNetwork editNetwork = Network.EditNetwork.builder()
+              .name("newNetworkApiLiveTestNetwork")
+              .notes("new notes")
+              .id(153001)
+              .build();
+
+      boolean edit = api.editNetwork(153001, ImmutableList.of(editNetwork));
+
+      try {
+         assertFalse(edit);
+         assertSent(server, "PUT", "/SoftLayer_Network/153001/editObject");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new MockResponse().setBody("true"));
+      NetworkApi api = getNetworkApi(server);
+
+      boolean deletion = api.deleteNetwork(153001);
+
+      try {
+         assertEquals(server.getRequestCount(), 1);
+         assertSent(server, "DELETE", "/SoftLayer_Network/153001");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteNonExistingNetwork() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(404));
+      NetworkApi api = getNetworkApi(server);
+
+      try {
+         assertFalse(api.deleteNetwork(153001));
+         assertSent(server, "DELETE", "/SoftLayer_Network/153001");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   private NetworkApi getNetworkApi(MockWebServer server) {
+      return api(SoftLayerApi.class, server.getUrl("/").toString(), new
+              JavaUrlHttpCommandExecutorServiceModule(), new 
SoftLayerParserModule()).getNetworkApi();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/resources/network_createObject.json
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/resources/network_createObject.json 
b/providers/softlayer/src/test/resources/network_createObject.json
new file mode 100644
index 0000000..8138bbe
--- /dev/null
+++ b/providers/softlayer/src/test/resources/network_createObject.json
@@ -0,0 +1,7 @@
+{
+  "accountId": 1186236,
+  "id": 153001,
+  "cidr": 16,
+  "name": "testNet",
+  "networkIdentifier": "192.168.0.0"
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/resources/network_createSubnet.json
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/resources/network_createSubnet.json 
b/providers/softlayer/src/test/resources/network_createSubnet.json
new file mode 100644
index 0000000..212e320
--- /dev/null
+++ b/providers/softlayer/src/test/resources/network_createSubnet.json
@@ -0,0 +1,18 @@
+{
+  "broadcastAddress": "192.168.1.255",
+  "cidr": 24,
+  "gateway": "192.168.1.1",
+  "id": 1581517,
+  "isCustomerOwned": true,
+  "isCustomerRoutable": false,
+  "modifyDate": null,
+  "netmask": "255.255.255.0",
+  "networkIdentifier": "192.168.1.0",
+  "networkVlanId": null,
+  "note": "testNet test create subnet",
+  "sortOrder": "4",
+  "totalIpAddresses": "256",
+  "usableIpAddressCount": "253",
+  "version": 4,
+  "addressSpace": "PRIVATE"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/resources/network_get_153001.json
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/resources/network_get_153001.json 
b/providers/softlayer/src/test/resources/network_get_153001.json
new file mode 100644
index 0000000..831fa0f
--- /dev/null
+++ b/providers/softlayer/src/test/resources/network_get_153001.json
@@ -0,0 +1,8 @@
+{
+  "accountId": 1186236,
+  "id": 153503,
+  "cidr": 16,
+  "name": "testNet",
+  "networkIdentifier": "192.168.0.0",
+  "notes": "this is a test network from JClouds NetworkApiMockTest."
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/resources/network_list.json
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/resources/network_list.json 
b/providers/softlayer/src/test/resources/network_list.json
new file mode 100644
index 0000000..596cb5c
--- /dev/null
+++ b/providers/softlayer/src/test/resources/network_list.json
@@ -0,0 +1,41 @@
+[
+  {
+    "accountId": 1186236,
+    "id": 153602,
+    "cidr": 24,
+    "name": "newNetworkApiLiveTestNetwork",
+    "networkIdentifier": "192.168.253.0",
+    "notes": "new notes"
+  },
+  {
+    "accountId": 1186236,
+    "id": 7505,
+    "cidr": 16,
+    "name": "ADN-public",
+    "networkIdentifier": "10.0.0.0",
+    "notes": "This network is available for testing and demo purposes.  
Anything here will be automatically removed periodically"
+  },
+  {
+    "accountId": 1186236,
+    "id": 12202,
+    "cidr": 24,
+    "name": "testNet",
+    "networkIdentifier": "10.0.0.0"
+  },
+  {
+    "accountId": 1186236,
+    "id": 6802,
+    "cidr": 24,
+    "name": "mcltn-172-31-1",
+    "networkIdentifier": "172.31.1.0",
+    "notes": "mcltn network"
+  },
+  {
+    "accountId": 1186236,
+    "id": 6932,
+    "cidr": 16,
+    "name": "khoa_network",
+    "networkIdentifier": "10.0.0.0",
+    "notes": "Khoa's first test network"
+  }
+]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a540daf3/providers/softlayer/src/test/resources/network_subnet_get_1592631.json
----------------------------------------------------------------------
diff --git 
a/providers/softlayer/src/test/resources/network_subnet_get_1592631.json 
b/providers/softlayer/src/test/resources/network_subnet_get_1592631.json
new file mode 100644
index 0000000..ee44bd5
--- /dev/null
+++ b/providers/softlayer/src/test/resources/network_subnet_get_1592631.json
@@ -0,0 +1,26 @@
+[
+  {
+    "broadcastAddress": "192.168.253.15",
+    "cidr": 28,
+    "gateway": "192.168.253.1",
+    "id": 1592631,
+    "isCustomerOwned": true,
+    "isCustomerRoutable": false,
+    "modifyDate": "2017-11-09T08:07:22-06:00",
+    "netmask": "255.255.255.240",
+    "networkIdentifier": "192.168.253.0",
+    "networkVlanId": 2188589,
+    "note": "This is a test subnet from NetworkApiMockTest",
+    "sortOrder": "1",
+    "subnetType": "ADDITIONAL_PRIMARY",
+    "totalIpAddresses": "16",
+    "usableIpAddressCount": "13",
+    "version": 4,
+    "datacenter": {
+      "id": 1441195,
+      "longName": "Dallas 10",
+      "name": "dal10",
+      "statusId": 2
+    }
+  }
+]
\ No newline at end of file

Reply via email to