public void ResizeGatewayWithNotProvisionedGateway()
        {
            using (NetworkTestClient networkTestClient = new NetworkTestClient())
            {
                networkTestClient.Gateways.EnsureNoGatewayExists();
                networkTestClient.EnsureSiteToSiteNetworkConfigurationExists();

                ResizeGatewayParameters parameters = new ResizeGatewayParameters()
                {
                    GatewaySKU = GatewaySKU.HighPerformance,
                };

                try
                {
                    networkTestClient.Gateways.ResizeGateway(NetworkTestConstants.VirtualNetworkSiteName, parameters);
                    Assert.True(false, "ResizeGateway should have thrown a CloudException when the virtual network gateway was not provisioned.");
                }
                catch (Hyak.Common.CloudException e)
                {
                    Assert.Equal("BadRequest", e.Error.Code);
                    Assert.Equal("The current provisioning status of the gateway prevents this operation.", e.Error.Message);
                    Assert.NotNull(e.Response);
                    Assert.Equal("Bad Request", e.Response.ReasonPhrase);
                    Assert.Equal(HttpStatusCode.BadRequest, e.Response.StatusCode);
                }
            }
        }
        public ResizeGateway(IGatewayOperations gatewayClient, string virtualNetworkSiteName, ResizeGatewayParameters parameters)
        {
            this.gatewayClient = gatewayClient;
            this.virtualNetworkSiteName = virtualNetworkSiteName;
            this.parameters = parameters;

            if (string.IsNullOrWhiteSpace(virtualNetworkSiteName) == false)
            {
                oldGetResponse = gatewayClient.Get(virtualNetworkSiteName);
            }
        }
        public void Undo()
        {
            if (parameters != null &&
                oldGetResponse != null &&
                oldGetResponse.State == GatewayProvisioningEventStates.Provisioned &&
                string.Equals(oldGetResponse.GatewaySKU, parameters.GatewaySKU, StringComparison.InvariantCultureIgnoreCase) == false)
            {
                ResizeGatewayParameters oldResizeParameters = new ResizeGatewayParameters()
                {
                    GatewaySKU = oldGetResponse.GatewaySKU,
                };

                gatewayClient.Resize(virtualNetworkSiteName, oldResizeParameters);
            }
        }
 /// <summary>
 /// The Begin Resize Virtual network Gateway operation resizes an
 /// existing gateway to a different GatewaySKU.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.Network.IGatewayOperations.
 /// </param>
 /// <param name='networkName'>
 /// Required. The name of the virtual network for this gateway.
 /// </param>
 /// <param name='parameters'>
 /// Required. Parameters supplied to the Begin Resize Virtual Network
 /// Gateway operation.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static Task<GatewayOperationResponse> BeginResizeAsync(this IGatewayOperations operations, string networkName, ResizeGatewayParameters parameters)
 {
     return operations.BeginResizeAsync(networkName, parameters, CancellationToken.None);
 }
 /// <summary>
 /// The Begin Resize Virtual network Gateway operation resizes an
 /// existing gateway to a different GatewaySKU.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.Network.IGatewayOperations.
 /// </param>
 /// <param name='networkName'>
 /// Required. The name of the virtual network for this gateway.
 /// </param>
 /// <param name='parameters'>
 /// Required. Parameters supplied to the Begin Resize Virtual Network
 /// Gateway operation.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static GatewayOperationResponse BeginResize(this IGatewayOperations operations, string networkName, ResizeGatewayParameters parameters)
 {
     return Task.Factory.StartNew((object s) => 
     {
         return ((IGatewayOperations)s).BeginResizeAsync(networkName, parameters);
     }
     , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }
 public GatewayGetOperationStatusResponse ResizeVirtualNetworkGateway(string gatewayId, ResizeGatewayParameters parameters)
 {
     return gatewayClient.ResizeVirtualNetworkGateway(gatewayId, parameters);
 }
        public GatewayGetOperationStatusResponse ResizeGateway(string virtualNetworkSiteName, ResizeGatewayParameters parameters)
        {
            ResizeGateway operation = new ResizeGateway(gatewayClient, virtualNetworkSiteName, parameters);

            testClient.InvokeTestOperation(operation);

            return operation.InvokeResponse;
        }
 /// <summary>
 /// The Begin Resize Virtual network Gateway operation resizes an
 /// existing gateway to a different GatewaySKU.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.Network.IGatewayOperations.
 /// </param>
 /// <param name='gatewayId'>
 /// Required. The virtual network for this gateway id.
 /// </param>
 /// <param name='parameters'>
 /// Required. Parameters supplied to the Begin Resize Virtual Network
 /// Gateway operation.
 /// </param>
 /// <returns>
 /// A standard service response including an HTTP status code and
 /// request ID.
 /// </returns>
 public static Task<GatewayOperationResponse> BeginResizeVirtualNetworkGatewayAsync(this IGatewayOperations operations, string gatewayId, ResizeGatewayParameters parameters)
 {
     return operations.BeginResizeVirtualNetworkGatewayAsync(gatewayId, parameters, CancellationToken.None);
 }
 /// <summary>
 /// The Begin Resize Virtual network Gateway operation resizes an
 /// existing gateway to a different GatewaySKU.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.Network.IGatewayOperations.
 /// </param>
 /// <param name='gatewayId'>
 /// Required. The virtual network for this gateway id.
 /// </param>
 /// <param name='parameters'>
 /// Required. Parameters supplied to the Resize Virtual Network Gateway
 /// operation.
 /// </param>
 /// <returns>
 /// The response body contains the status of the specified asynchronous
 /// operation, indicating whether it has succeeded, is in progress, or
 /// has failed. Note that this status is distinct from the HTTP status
 /// code returned for the Get Operation Status operation itself. If
 /// the asynchronous operation succeeded, the response body includes
 /// the HTTP status code for the successful request. If the
 /// asynchronous operation failed, the response body includes the HTTP
 /// status code for the failed request, and also includes error
 /// information regarding the failure.
 /// </returns>
 public static GatewayGetOperationStatusResponse ResizeVirtualNetworkGateway(this IGatewayOperations operations, string gatewayId, ResizeGatewayParameters parameters)
 {
     return Task.Factory.StartNew((object s) => 
     {
         return ((IGatewayOperations)s).ResizeVirtualNetworkGatewayAsync(gatewayId, parameters);
     }
     , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }
        public void VirtualNetworkGatewayAPIsTests()
        {
            using (NetworkTestClient networkTestClient = new NetworkTestClient())
            {
                string virtualNetworkSiteName = "coexistenceVirtualNetworkSiteName";
                string vnetGatewayName = "coexistenceVnetGateway";

                networkTestClient.EnsureNoNetworkConfigurationExists(virtualNetworkSiteName);

                // 1.CreateVirtualnetworkGateway API
                networkTestClient.SetNetworkConfiguration(NetworkTestConstants.CoexistenceFeatureNetworkConfigurationParameters);
                NetworkListResponse listResponse = networkTestClient.ListNetworkConfigurations();
                Assert.NotNull(listResponse);
                Assert.True(listResponse.VirtualNetworkSites.Any(vnet => vnet.Name.Equals(virtualNetworkSiteName)),
                    "Virtual network:" + virtualNetworkSiteName + " is not found!");
                string vnetId = listResponse.First(vnet => vnet.Name.Equals(virtualNetworkSiteName)).Id;

                GatewayGetOperationStatusResponse response =
                    networkTestClient.Gateways.CreateVirtualNetworkGateway(
                        virtualNetworkSiteName,
                        new VirtualNetworkGatewayCreateParameters()
                        {
                            GatewayName = vnetGatewayName,
                            GatewayType = GatewayType.DynamicRouting
                        });
                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.HttpStatusCode);

                // 2.Listvirtualnetworkgateways API
                ListVirtualNetworkGatewaysResponse listVirtualNetworkGatewaysResponse = networkTestClient.Gateways.ListVirtualNetworkGateways();
                Assert.True(listVirtualNetworkGatewaysResponse.VirtualNetworkGateways.Count >= 1);
                string vnetGatewayId = listVirtualNetworkGatewaysResponse.VirtualNetworkGateways.First(vnetGateway => vnetGateway.GatewayName.Equals(vnetGatewayName)).GatewayId.ToString();

                // 3.Getvirtualnetworkgateway API
                VirtualNetworkGatewayGetResponse virtualNetworkGatewayGetResponse = networkTestClient.Gateways.GetVirtualNetworkGateway(vnetGatewayId);
                Assert.NotNull(virtualNetworkGatewayGetResponse);
                Assert.Equal(HttpStatusCode.OK, virtualNetworkGatewayGetResponse.StatusCode);
                Assert.Equal(vnetGatewayName, virtualNetworkGatewayGetResponse.GatewayName);
                Assert.Equal(GatewaySKU.Default, virtualNetworkGatewayGetResponse.GatewaySKU);
                Assert.Equal(GatewayType.DynamicRouting, virtualNetworkGatewayGetResponse.GatewayType);

                // 4.ResizeVirtualnetworkGateway API
                ResizeGatewayParameters parameters = new ResizeGatewayParameters()
                {
                    GatewaySKU = GatewaySKU.HighPerformance
                };
                response = networkTestClient.Gateways.ResizeVirtualNetworkGateway(vnetGatewayId, parameters);
                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.HttpStatusCode);

                virtualNetworkGatewayGetResponse = networkTestClient.Gateways.GetVirtualNetworkGateway(vnetGatewayId);
                Assert.NotNull(virtualNetworkGatewayGetResponse);
                Assert.Equal(HttpStatusCode.OK, virtualNetworkGatewayGetResponse.StatusCode);
                Assert.Equal(vnetGatewayName, virtualNetworkGatewayGetResponse.GatewayName);
                Assert.Equal(GatewaySKU.HighPerformance, virtualNetworkGatewayGetResponse.GatewaySKU);

                // 5.ResetVirtualnetworkGateway API
                ResetGatewayParameters resetGatewayParameters = new ResetGatewayParameters();
                response = networkTestClient.Gateways.ResetVirtualNetworkGateway(vnetGatewayId, resetGatewayParameters);
                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.HttpStatusCode);

                // 6.DeleteVirtualNetworkGateway API
                response = networkTestClient.Gateways.DeleteVirtualNetworkGateway(vnetGatewayId);
                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.HttpStatusCode);

                listVirtualNetworkGatewaysResponse = networkTestClient.Gateways.ListVirtualNetworkGateways();
                Assert.False(listVirtualNetworkGatewaysResponse.VirtualNetworkGateways.Any(vnetGateway => vnetGateway.GatewayName.Equals(vnetGatewayName)),
                    "Virtual network: " + virtualNetworkSiteName + " gateway: " + vnetGatewayName + " is not deleted even after DeleteVirtualNetworkGateway API call!");
            }
        }
        public void ResizeStaticRoutingGateway()
        {
            using (NetworkTestClient networkTestClient = new NetworkTestClient())
            {
                networkTestClient.Gateways.EnsureStaticRoutingGatewayExists();

                ResizeGatewayParameters parameters = new ResizeGatewayParameters()
                {
                    GatewaySKU = GatewaySKU.HighPerformance,
                };

                try
                {
                    networkTestClient.Gateways.ResizeGateway(NetworkTestConstants.VirtualNetworkSiteName, parameters);
                    Assert.True(false, "ResizeGateway should have thrown a CloudException when it was run against a StaticRouting gateway.");
                }
                catch (Hyak.Common.CloudException e)
                {
                    Assert.Equal("BadRequest", e.Error.Code);
                    Assert.Equal("The current operation or request is invalid against Static-Routing gateway.", e.Error.Message);
                    Assert.NotNull(e.Response);
                    Assert.Equal("Bad Request", e.Response.ReasonPhrase);
                    Assert.Equal(HttpStatusCode.BadRequest, e.Response.StatusCode);
                }
            }
        }
        private void ResizeGateway(string startSKU, string targetSKU)
        {
            using (NetworkTestClient networkTestClient = new NetworkTestClient())
            {
                networkTestClient.Gateways.EnsureDynamicRoutingGatewayExists(startSKU);

                ResizeGatewayParameters parameters = new ResizeGatewayParameters()
                {
                    GatewaySKU = targetSKU,
                };

                GatewayGetOperationStatusResponse resizeResponse = networkTestClient.Gateways.ResizeGateway(NetworkTestConstants.VirtualNetworkSiteName, parameters);
                Assert.NotNull(resizeResponse);
                Assert.Equal(HttpStatusCode.OK, resizeResponse.HttpStatusCode);

                GatewayGetResponse response = networkTestClient.Gateways.GetGateway(NetworkTestConstants.VirtualNetworkSiteName);
                Assert.NotNull(response);
                Assert.Equal(GatewayProvisioningEventStates.Provisioned, response.State);
                Assert.Equal(targetSKU, response.GatewaySKU);
            }
        }