Skip to content

Commit b26398d

Browse files
authored
Merge pull request #86 from SkillsFundingAgency/DASD-3585_AddStorageQueueMessage
Dasd 3585 add storage queue message
2 parents 39a3de6 + 796d64f commit b26398d

3 files changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<#
2+
.SYNOPSIS
3+
Add the specified content to an Azure Storage Queue
4+
5+
.DESCRIPTION
6+
Add the specified content to an Azure Storage Queue
7+
8+
.PARAMETER ResourceGroupName
9+
Resource group of the storage account
10+
11+
.PARAMETER StorageAccountName
12+
Storage account name
13+
14+
.PARAMETER StorageQueueName
15+
Storage queue where the message should be added
16+
17+
.PARAMETER MessageContent
18+
Any message content that should be added to the queue. Can be blank.
19+
20+
VSTS Variable with the Value '{"Release Definition":"$(Release.DefinitionName)","Release Name":"$(Release.ReleaseName)"}' produces a JSON formatted message
21+
with information about the release definition and name that the script was run from.
22+
23+
.EXAMPLE
24+
25+
.\Add-AzureStorageQueueMessage.ps1 -ResourceGroupName resourcegroupname `
26+
-StorageAccountName storageaccountname `
27+
-StorageQueueName storagequeuename `
28+
-MessageContent "{"Release Definition":"$(Release.DefinitionName)","Release Name":"$(Release.ReleaseName)"}"
29+
30+
#>
31+
[CmdletBinding()]
32+
Param(
33+
[Parameter(Mandatory = $true)]
34+
[String]$ResourceGroupName,
35+
[Parameter(Mandatory = $true)]
36+
[String]$StorageAccountName,
37+
[Parameter(Mandatory = $true)]
38+
[String]$StorageQueueName,
39+
[Parameter(Mandatory = $false)]
40+
[String]$MessageContent
41+
)
42+
try {
43+
44+
# Get the Storage account key
45+
$StorageAccountKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $($ResourceGroupName) -Name $($StorageAccountName)).Value[0]
46+
47+
# Set the Storage context
48+
$Context = New-AzureStorageContext -StorageAccountName $($StorageAccountName) -StorageAccountKey $StorageAccountKey
49+
50+
# Check whether the queue exists
51+
$Queue = Get-AzureStorageQueue -Name $($StorageQueueName) -Context $Context
52+
53+
if (!$Queue) {
54+
Write-Host "Specified storage queue $($StorageQueueName) doesn't exist in storage account $($StorageAccountName)"
55+
}
56+
else {
57+
if ($PSBoundParameters.ContainsKey('MessageContent')) {
58+
Write-Host "Supplied message content: $($MessageContent)"
59+
}
60+
else {
61+
Write-Host "Setting empty MessageContent"
62+
$MessageContent = ""
63+
}
64+
Write-Host "Adding message to queue"
65+
$Queue.CloudQueue.AddMessage($MessageContent)
66+
}
67+
}
68+
catch {
69+
throw "$_"
70+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
$Config = Get-Content $PSScriptRoot\..\Tests\Acceptance.Config.json -Raw | ConvertFrom-Json
2+
Push-Location -Path $PSScriptRoot\..\Infrastructure\Resources\
3+
Describe "Add-AzureStorageQueueMessage Tests" -Tag "Acceptance-ARM" {
4+
5+
$StorageAccountName = "$($Config.armStorageAccountName)$($Config.suffix)"
6+
$ResourceGroupName = "$($Config.resourceGroupName)$($Config.suffix)"
7+
$StorageQueueName = "$($Config.classicStorageQueueName)$($Config.suffix)"
8+
$StorageQueueMessage = "$($Config.classicStorageQueueMessage)$($Config.suffix)"
9+
10+
try {
11+
$null = New-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Location "West Europe" -Name $StorageAccountName -SkuName Standard_LRS
12+
$StorageAccountKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName)[0].Value
13+
$StorageAccountContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
14+
$Queue = New-AzureStorageQueue -Name $StorageQueueName -Context $StorageAccountContext
15+
} catch {
16+
throw $_
17+
}
18+
19+
It "Should complete succesfully and return one output with an empty message" {
20+
$null = .\Add-AzureStorageQueueMessage.ps1 -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName `
21+
-StorageQueueName $StorageQueueName
22+
$Output = $Queue.CloudQueue.GetMessage()
23+
$Queue.CloudQueue.DeleteMessage($Output)
24+
$Output.Count | Should Be 1
25+
$Output.AsString | Should Be
26+
}
27+
28+
It "Should complete succesfully and return one output with a specific message" {
29+
$Output = .\Add-AzureStorageQueueMessage.ps1 -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName `
30+
-StorageQueueName $StorageQueueName -MessageContent $StorageQueueMessage
31+
$Output = $Queue.CloudQueue.GetMessage()
32+
$Queue.CloudQueue.DeleteMessage($Output)
33+
$Output.Count | Should Be 1
34+
$Output.AsString | Should Be $StorageQueueMessage
35+
}
36+
37+
}
38+
39+
Pop-Location

Tests/Acceptance.Config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"classicStorageContainerName": "public",
77
"classicStorageTableName": "table1",
88
"classicStorageQueueName": "queue1",
9+
"classicStorageQueueMessage": "queuemessage",
910
"cloudServiceName": "devops-at-cs",
1011
"appInsightsName": "devops-at-ai",
1112
"appServiceName": "devops-at-as",

0 commit comments

Comments
 (0)