public void LocalNetworkGatewayAPIsTests()
        {
            using (NetworkTestClient networkTestClient = new NetworkTestClient())
            {
                string localnetGatewayName = "coexistenceLocalnetGateway";

                // 1.CreateLocalNetworkGateway API
                var param = new LocalNetworkGatewayCreateParameters()
                    {
                        AddressSpace = new LazyList<string>() { addressSpace },
                        GatewayName = localnetGatewayName,
                        IpAddress = localNetworkGatewayIpAddress,
                    };

                LocalNetworkGatewayCreateResponse localNetworkGatewayCreateResponse = networkTestClient.Gateways.CreateLocalNetworkGateway(param);
                Assert.NotNull(localNetworkGatewayCreateResponse);
                Assert.Equal(HttpStatusCode.OK, localNetworkGatewayCreateResponse.StatusCode);
                Assert.NotNull(localNetworkGatewayCreateResponse.LocalNetworkGatewayId);

                // 2.Listvirtualnetworkgateways API
                ListLocalNetworkGatewaysResponse listLocalNetworkGatewaysResponse = networkTestClient.Gateways.ListLocalNetworkGateways();
                Assert.NotNull(listLocalNetworkGatewaysResponse);
                Assert.Equal(HttpStatusCode.OK, listLocalNetworkGatewaysResponse.StatusCode);

                ListLocalNetworkGatewaysResponse.LocalNetworkGateway localNetworkGateway = listLocalNetworkGatewaysResponse.LocalNetworkGateways.First();
                Assert.Equal(localnetGatewayName, localNetworkGateway.GatewayName);
                Assert.Equal(localNetworkGatewayIpAddress, localNetworkGateway.IpAddress);
                Assert.True(localNetworkGateway.AddressSpace.Contains(addressSpace), "CreateLocalNetworkGateway API failed as AddressSpace parameter is not set properly!");

                string localnetGatewayId = listLocalNetworkGatewaysResponse.LocalNetworkGateways.First(localnetGateway =>
                    localnetGateway.GatewayName.Equals(localnetGatewayName)).Id.ToString();
                Assert.True(!string.IsNullOrEmpty(localnetGatewayId), "CreateLocalNetworkGateway API Failed as local network gateway: "
                    + localnetGatewayName + "not found!");

                // 3.UpdateLocalNetworkGateway API
                addressSpace = "200.168.0.0/24";
                UpdateLocalNetworkGatewayParameters parameters = new UpdateLocalNetworkGatewayParameters()
                {
                    AddressSpace = new List<string>(new string[] { addressSpace })
                };
                AzureOperationResponse updateLocalNetworkGatewayResponse = networkTestClient.Gateways.UpdateLocalNetworkGateway(localnetGatewayId, parameters);
                Assert.NotNull(updateLocalNetworkGatewayResponse);
                Assert.Equal(HttpStatusCode.OK, updateLocalNetworkGatewayResponse.StatusCode);

                // 4.GetLocalNetworkGateway API
                LocalNetworkGatewayGetResponse localNetworkGatewayGetResponse = networkTestClient.Gateways.GetLocalNetworkGateway(localnetGatewayId);
                Assert.NotNull(localNetworkGatewayGetResponse);
                Assert.Equal(HttpStatusCode.OK, localNetworkGatewayGetResponse.StatusCode);
                Assert.Equal(localnetGatewayName, localNetworkGatewayGetResponse.GatewayName);
                Assert.Equal(localNetworkGatewayIpAddress, localNetworkGatewayGetResponse.IpAddress);
                Assert.True(localNetworkGatewayGetResponse.AddressSpace.Contains(addressSpace), "UpdateLocalNetworkGateway API failed!");

                // 5.DeleteLocalNetworkGateway API
                AzureOperationResponse deleteLocalNetworkGatewayResponse = networkTestClient.Gateways.DeleteLocalNetworkGateway(localnetGatewayId);
                Assert.NotNull(deleteLocalNetworkGatewayResponse);
                Assert.Equal(HttpStatusCode.OK, deleteLocalNetworkGatewayResponse.StatusCode);

                listLocalNetworkGatewaysResponse = networkTestClient.Gateways.ListLocalNetworkGateways();
                Assert.NotNull(listLocalNetworkGatewaysResponse);
                Assert.Equal(HttpStatusCode.OK, listLocalNetworkGatewaysResponse.StatusCode);
                Assert.False(listLocalNetworkGatewaysResponse.LocalNetworkGateways.Any(localnetGateway => localnetGateway.GatewayName.Equals(localnetGatewayName)),
                "Local network gateway: " + localnetGatewayName + " is not deleted even after DeleteLocalNetworkGateway API call!");
            }
        }
        public void LocalNetworkGatewayAPITestsWithBgp()
        {
            using (NetworkTestClient networkTestClient = new NetworkTestClient())
            {
                // CreateLocalNetworkGateway, with BGP settings
                string localNetworkGatewayName = "BgpLocalNetworkGateway";
                uint localNetworkGatewayAsn = 1234;
                string localNetworkGatewayBgpPeeringAddress = "192.168.1.2";
                int localNetworkGatewayPeerWeight = 5;

                LocalNetworkGatewayCreateParameters createParameters = new LocalNetworkGatewayCreateParameters()
                {
                    AddressSpace = new LazyList<string>() { addressSpace },
                    GatewayName = localNetworkGatewayName,
                    IpAddress = localNetworkGatewayIpAddress,
                    BgpSettings = new BgpSettings()
                    {
                        Asn = localNetworkGatewayAsn,
                        BgpPeeringAddress = localNetworkGatewayBgpPeeringAddress,
                        PeerWeight = localNetworkGatewayPeerWeight,
                    }
                };

                LocalNetworkGatewayCreateResponse localNetworkGatewayCreateResponse = networkTestClient.Gateways.CreateLocalNetworkGateway(createParameters);
                Assert.NotNull(localNetworkGatewayCreateResponse);
                Assert.Equal(HttpStatusCode.OK, localNetworkGatewayCreateResponse.StatusCode);
                Assert.NotNull(localNetworkGatewayCreateResponse.LocalNetworkGatewayId);

                // Call ListLocalNetworkGateways, find one with a matching name to get the ID
                ListLocalNetworkGatewaysResponse lngListResponse = networkTestClient.Gateways.ListLocalNetworkGateways();
                ListLocalNetworkGatewaysResponse.LocalNetworkGateway localNetworkGateway = null;

                foreach (ListLocalNetworkGatewaysResponse.LocalNetworkGateway lng in lngListResponse.LocalNetworkGateways)
                {
                    if (lng.GatewayName.Equals(localNetworkGatewayName))
                    {
                        localNetworkGateway = lng;
                        break;
                    }
                }

                Assert.NotNull(localNetworkGateway);
                string localNetworkGatewayId = localNetworkGateway.Id.ToString();

                // BgpSettings should be respected
                // If generated code would generate an equals method, that would have been convenient.
                Assert.Equal(localNetworkGateway.BgpSettings.Asn, localNetworkGatewayAsn);
                Assert.True(localNetworkGateway.BgpSettings.BgpPeeringAddress.Equals(localNetworkGatewayBgpPeeringAddress));
                Assert.Equal(localNetworkGateway.BgpSettings.PeerWeight, localNetworkGatewayPeerWeight);

                // Try an update, with different BgpSettings
                localNetworkGatewayAsn = 5678;
                UpdateLocalNetworkGatewayParameters updateParameters = new UpdateLocalNetworkGatewayParameters()
                {
                    AddressSpace = new List<string>(new string[] { addressSpace }),
                    BgpSettings = new BgpSettings()
                    {
                        Asn = localNetworkGatewayAsn,
                        BgpPeeringAddress = localNetworkGatewayBgpPeeringAddress,
                        PeerWeight = localNetworkGatewayPeerWeight
                    }
                };

                AzureOperationResponse updateLocalNetworkGatewayResponse = networkTestClient.Gateways.UpdateLocalNetworkGateway(localNetworkGatewayId, updateParameters);
                Assert.NotNull(updateLocalNetworkGatewayResponse);
                Assert.Equal(HttpStatusCode.OK, updateLocalNetworkGatewayResponse.StatusCode);

                // Call GetLocalNetworkGateway again, and make sure the updated ASN shows up
                LocalNetworkGatewayGetResponse lngGetResponse = networkTestClient.Gateways.GetLocalNetworkGateway(localNetworkGatewayId);
                Assert.NotNull(lngGetResponse);
                Assert.NotNull(lngGetResponse.BgpSettings);
                Assert.Equal(lngGetResponse.BgpSettings.Asn, localNetworkGatewayAsn);

                // Delete
                AzureOperationResponse deleteLocalNetworkGatewayResponse = networkTestClient.Gateways.DeleteLocalNetworkGateway(localNetworkGatewayId);
                Assert.NotNull(deleteLocalNetworkGatewayResponse);
                Assert.Equal(HttpStatusCode.OK, deleteLocalNetworkGatewayResponse.StatusCode);

                // Call list again and make sure the local network gateway isn't there anymore
                lngListResponse = networkTestClient.Gateways.ListLocalNetworkGateways();
                localNetworkGateway = null;

                foreach (ListLocalNetworkGatewaysResponse.LocalNetworkGateway lng in lngListResponse.LocalNetworkGateways)
                {
                    if (lng.GatewayName.Equals(localNetworkGatewayName))
                    {
                        localNetworkGateway = lng;
                        break;
                    }
                }

                Assert.Null(localNetworkGateway);
            }
        }
 /// <summary>
 /// The Update Local Network Gateway operation updates a local network
 /// gateway
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.Network.IGatewayOperations.
 /// </param>
 /// <param name='gatewayId'>
 /// Required. The virtual network for this gateway.
 /// </param>
 /// <param name='parameters'>
 /// Required. Parameters supplied to update the Local Network Gateway
 /// operation.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static Task<AzureOperationResponse> UpdateLocalNetworkGatewayAsync(this IGatewayOperations operations, string gatewayId, UpdateLocalNetworkGatewayParameters parameters)
 {
     return operations.UpdateLocalNetworkGatewayAsync(gatewayId, parameters, CancellationToken.None);
 }
 public AzureOperationResponse UpdateLocalNetworkGateway(string gatewayId, UpdateLocalNetworkGatewayParameters parameters)
 {
     return gatewayClient.UpdateLocalNetworkGateway(gatewayId, parameters);
 }
 /// <summary>
 /// The Update Local Network Gateway operation updates a local network
 /// gateway
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.Network.IGatewayOperations.
 /// </param>
 /// <param name='gatewayId'>
 /// Required. The virtual network for this gateway.
 /// </param>
 /// <param name='parameters'>
 /// Required. Parameters supplied to update the Local Network Gateway
 /// operation.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static AzureOperationResponse UpdateLocalNetworkGateway(this IGatewayOperations operations, string gatewayId, UpdateLocalNetworkGatewayParameters parameters)
 {
     return Task.Factory.StartNew((object s) => 
     {
         return ((IGatewayOperations)s).UpdateLocalNetworkGatewayAsync(gatewayId, parameters);
     }
     , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }