public void SetNSGOnNicByNameWithPreviousNSG()
        {
            // Setup

            this.networkingClientMock
                .Setup(c =>
                    c.NetworkSecurityGroups.AddToNetworkInterfaceAsync(
                        ServiceName,
                        DeploymentName,
                        RoleName,
                        NetworkInterfaceName,
                        It.IsAny<NetworkSecurityGroupAddAssociationParameters>(),
                        It.IsAny<CancellationToken>()))
                .ThrowsAsync(AlreadySetException);

            this.networkingClientMock
                .Setup(c =>
                    c.NetworkSecurityGroups.RemoveFromNetworkInterfaceAsync(
                        ServiceName,
                        DeploymentName,
                        RoleName,
                        NetworkInterfaceName,
                        CurrentNetworkSecurityGroup,
                        It.IsAny<CancellationToken>()))
                .Returns(() =>
                {
                    // after we remove the current association, Set shouldn't throw an exception any more
                    this.networkingClientMock
                    .Setup(c =>
                        c.NetworkSecurityGroups.AddToNetworkInterfaceAsync(
                        ServiceName,
                        DeploymentName,
                        RoleName,
                        NetworkInterfaceName,
                        It.IsAny<NetworkSecurityGroupAddAssociationParameters>(),
                        It.IsAny<CancellationToken>()))
                    .Returns(Task.Factory.StartNew(() => new Azure.OperationStatusResponse()));

                    return Task.Factory.StartNew(() => new Azure.OperationStatusResponse());
                });

            cmdlet = new SetAzureNetworkSecurityGroupAssociation
            {
                ServiceName = ServiceName,
                RoleName = RoleName,
                NetworkInterfaceName = NetworkInterfaceName,
                Name = NetworkSecurityGroupName,
                CommandRuntime = mockCommandRuntime,
                Client = this.client
            };
            cmdlet.SetParameterSet(SetAzureNetworkSecurityGroupAssociation.AddNetworkSecurityGroupAssociationToPaaSRole);

            // Action
            cmdlet.ExecuteCmdlet();

            // Assert
            #region Never called
            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.AddToSubnetAsync(
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<NetworkSecurityGroupAddAssociationParameters>(),
                    It.IsAny<CancellationToken>()),
                Times.Never);

            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.AddToRoleAsync(
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<NetworkSecurityGroupAddAssociationParameters>(),
                    It.IsAny<CancellationToken>()),
                Times.Never);
            #endregion

            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.AddToNetworkInterfaceAsync(
                    cmdlet.ServiceName,
                    DeploymentName,
                    RoleName,
                    NetworkInterfaceName,
                    It.Is<NetworkSecurityGroupAddAssociationParameters>(
                        parameters => string.Equals(NetworkSecurityGroupName, parameters.Name)),
                    It.IsAny<CancellationToken>()),
                Times.Exactly(2));

            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.RemoveFromNetworkInterfaceAsync(
                    cmdlet.ServiceName,
                    DeploymentName,
                    RoleName,
                    NetworkInterfaceName,
                    CurrentNetworkSecurityGroup,
                    It.IsAny<CancellationToken>()),
                Times.Once);

            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.GetForNetworkInterfaceAsync(
                    cmdlet.ServiceName,
                    DeploymentName,
                    RoleName,
                    NetworkInterfaceName,
                    It.IsAny<CancellationToken>()),
                Times.Once);

            computeClientMock.Verify(
                c => c.Deployments.GetBySlotAsync(
                    It.IsAny<string>(),
                    It.IsAny<DeploymentSlot>(),
                    It.IsAny<CancellationToken>()),
                Times.Once);

            Assert.Equal(0, mockCommandRuntime.OutputPipeline.Count);
        }
        public void SetNSGOnNicByNameNoPreviousNSG()
        {
            // Setup
            cmdlet = new SetAzureNetworkSecurityGroupAssociation
            {
                Name = NetworkSecurityGroupName,
                ServiceName = ServiceName,
                RoleName = RoleName,
                NetworkInterfaceName = NetworkInterfaceName,
                CommandRuntime = mockCommandRuntime,
                Client = this.client
            };
            cmdlet.SetParameterSet(SetAzureNetworkSecurityGroupAssociation.AddNetworkSecurityGroupAssociationToPaaSRole);

            // Action
            cmdlet.ExecuteCmdlet();

            // Assert

            #region Never called
            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.AddToRoleAsync(
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<NetworkSecurityGroupAddAssociationParameters>(),
                    It.IsAny<CancellationToken>()),
                Times.Never);

            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.AddToSubnetAsync(
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<NetworkSecurityGroupAddAssociationParameters>(),
                    It.IsAny<CancellationToken>()),
                Times.Never);
            #endregion

            computeClientMock.Verify(
                c => c.Deployments.GetBySlotAsync(
                    ServiceName,
                    DeploymentSlot.Production,
                    It.IsAny<CancellationToken>()),
                Times.Once);

            networkingClientMock.Verify(
                c => c.NetworkSecurityGroups.AddToNetworkInterfaceAsync(
                    ServiceName,
                    DeploymentName,
                    RoleName,
                    NetworkInterfaceName,
                    It.Is<NetworkSecurityGroupAddAssociationParameters>(
                        parameters => string.Equals(NetworkSecurityGroupName, parameters.Name)),
                    It.IsAny<CancellationToken>()),
                Times.Once);

            Assert.Equal(0, mockCommandRuntime.OutputPipeline.Count);
        }