AzSDK.Test/TestCases/SVT/ServiceBus/ServiceBusResource.ps1

Set-StrictMode -Version Latest 
class ServiceBusResource:TestResource{

    hidden [PSObject] $QueueName = 'azsdktestqueue';
    hidden [PSObject] $QueueAuthRule = 'queueSend';
    hidden [PSObject] $QueueAuthRulePermission = 'Send';

    ServiceBusResource([TestCase] $testcase, [TestSettings] $testsettings):Base($testcase, $testsettings){
     
    }

#Setting the properties as required by this resource type.
    [void]SetDerivedResourceProps(){
        $this.ResourceName = "azsdktestservicebus" #Else set the default resource name
        $this.ResourceType = "Microsoft.ServiceBus/namespaces" 
    }

    #Checks and deploys the service bus if it does not exist.
    [void] InitializeResource( ){
        if(!$this.IfResourceExists()){
            $this.DeployServiceBus()    
        }
    }

    #Deploy the service bus
    [void]DeployServiceBus()
    {
        try
        {
            $nameSpace = New-AzureRmServiceBusNamespace -Location "Southeast Asia" -ResourceGroupName $this.ResourceGroupName `
                    -NamespaceName $this.ResourceName -SkuName Basic
            $this.ProvisioningState = $nameSpace.ProvisioningState
            if($nameSpace.ProvisioningState -eq "Succeeded")
            {
                [CommonHelper]::Log("NameSpace "+$this.ResourceName + " is successfully deployed", [MessageType]::Information)
                New-AzureRmServiceBusQueue -ResourceGroup $this.ResourceGroupName -NamespaceName $this.ResourceName -QueueName $this.QueueName -EnablePartitioning $false
            }
        }
        catch{
            [CommonHelper]::Log("Error while deploying the Service Bus: " + $this.ResourceName, [MessageType]::Error)
        }
    }

    #Set Service bus access policies
    [void]AddQueueAccessPolicies()
    {
        try
        {
            New-AzureRmServiceBusQueueAuthorizationRule -ResourceGroup $this.ResourceGroupName -NamespaceName $this.ResourceName `
                            -QueueName $this.QueueName -AuthorizationRuleName $this.QueueAuthRule -Rights $this.QueueAuthRulePermission
            [CommonHelper]::Log("Successfully set the authorization rules for queue: "+$this.QueueName, [MessageType]::Information)
        }
        catch
        {
            [CommonHelper]::Log("Error while setting authorization rules for queue: " + $this.QueueName, [MessageType]::Error)
        }
    }

    #Remove service bus access policies
    [void]RemoveQueueAccessPolicies()
    {
        try
        {
            $queuePolicies = Get-AzureRmServiceBusQueueAuthorizationRule -ResourceGroup $this.ResourceGroupName `
                                        -NamespaceName $this.ResourceName -QueueName $this.QueueName
            if(($queuePolicies|Measure-Object).count -gt 0)
            {
                $queuePolicies | ForEach-Object{
                        Remove-AzureRmServiceBusQueueAuthorizationRule -ResourceGroup $this.ResourceGroupName `
                            -NamespaceName $this.ResourceName -QueueName $this.QueueName -AuthorizationRuleName $_.Name
                }
            }

            [CommonHelper]::Log("Successfully removed access policy from queue: "+$this.QueueName, [MessageType]::Information)
        }
        catch
        {
            [CommonHelper]::Log("Error while removing access policy from queue: " + $this.QueueName, [MessageType]::Error)
        }
    }
}