Skip to content

Commit 0744766

Browse files
authored
Fix update SignalR bugs and add tests (#16687)
* Fix `Update-AzSignalR` bug that resets resource states * Revert version update
1 parent fd5cb68 commit 0744766

File tree

10 files changed

+7877
-3848
lines changed

10 files changed

+7877
-3848
lines changed

src/SignalR/SignalR.Test/ScenarioTests/AzureRmSignalRTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,10 @@ public void TestAzureRmSignalRUpdateNetworkAcl() =>
5050
public void TestAzureRmSignalRSetUpstream() =>
5151
TestController.NewInstance.RunPowerShellTest(_logger, "Test-AzureRmSignalRSetUpstream");
5252

53+
[Fact]
54+
[Trait(Category.AcceptanceType, Category.CheckIn)]
55+
public void TestAzureRmSignalRUpdate() =>
56+
TestController.NewInstance.RunPowerShellTest(_logger, "Test-AzureRmSignalRUpdate");
57+
5358
}
5459
}

src/SignalR/SignalR.Test/ScenarioTests/AzureRmSignalRTests.ps1

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,58 @@ function Test-AzureRmSignalRSetUpstream {
308308
}
309309

310310
}
311-
function New-Environment {
311+
312+
<#
313+
.SYNOPSIS
314+
Test the Update SignalR cmdlet
315+
#>
316+
function Test-AzureRmSignalRUpdate
317+
{
318+
$location = Get-ProviderLocation "Microsoft.SignalRService/SignalR"
319+
$nameSuffix = "update-signalr"
320+
$resourceGroupName = Get-RandomResourceGroupName $nameSuffix
321+
$signalrName = Get-RandomSignalRName $nameSuffix
322+
323+
try
324+
{
325+
New-AzResourceGroup -Name $resourceGroupName -Location $location
326+
New-AzSignalR -ResourceGroupName $resourceGroupName -Name $signalrName
327+
$signalr = New-AzSignalR -ResourceGroupName $resourceGroupName -Name $signalrName
328+
329+
# a. Resource name parameter set
330+
$result = Update-AzSignalR -ResourceGroupName $resourceGroupName -Name $signalrName
331+
# verify nothing changed.
332+
Assert-AreEqualObjectProperties $signalr.Sku $result.Sku
333+
Assert-Null $result.Tag
334+
Assert-Null $result.Features
335+
Assert-AreEqualArray $signalr.Cors $result.Cors
336+
337+
$tag = New-Object System.Collections.Generic.Dictionary"[String,String]"
338+
$tag.Add("key1", "value1")
339+
$result = Update-AzSignalR -ResourceGroupName $resourceGroupName -Name $signalrName -UnitCount 2 -Tag $tag -ServiceMode "Serverless" -AllowedOrigin "https://bing.com","https://google.com"
340+
Assert-AreEqual 2 $result.Sku.Capacity
341+
Assert-AreEqual 1 $result.Tags.Count
342+
Assert-AreEqual "value1" $result.Tags["key1"]
343+
Assert-AreEqual "Serverless" $result.Features[0].value
344+
Assert-AreEqualArray "https://bing.com","https://google.com" $result.Cors.AllowedOrigins
345+
346+
# b. Resource ID parameter Set
347+
$result = Update-AzSignalR -ResourceId $signalr.Id -UnitCount 1 -Sku Free_F1
348+
Assert-AreEqual 1 $result.Sku.Capacity
349+
Assert-AreEqual "Free_F1" $result.Sku.Name
350+
351+
# c. InputObject parameter set
352+
$result = $( $signalr | Update-AzSignalR -UnitCount 2 -Sku "Standard_S1" )
353+
Assert-AreEqual 2 $result.Sku.Capacity
354+
Assert-AreEqual "Standard_S1" $result.Sku.Name
355+
} finally
356+
{
357+
Remove-AzResourceGroup -Name $resourceGroupName
358+
}
359+
}
360+
361+
function New-Environment
362+
{
312363
param (
313364
[string] $signalRName,
314365
[string] $resourceGroupName

src/SignalR/SignalR.Test/ScenarioTests/Common.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Gets a SignalR service name
1818
#>
1919
function Get-RandomSignalRName
2020
{
21-
param([string]$prefix = "signalr-test-")
21+
param([string]$prefix = "signalrps-test-")
2222
return $prefix + (getAssetName)
2323
}
2424

@@ -28,7 +28,7 @@ Gets a resource group name
2828
#>
2929
function Get-RandomResourceGroupName
3030
{
31-
param([string]$prefix = "signalr-test-rg-")
31+
param([string]$prefix = "signalrps-test-rg-")
3232
return $prefix + (getAssetName)
3333
}
3434

src/SignalR/SignalR.Test/SessionRecords/Microsoft.Azure.Commands.SignalR.Test.ScenarioTests.AzureRmSignalRTests/TestAzureRmSignalR.json

Lines changed: 602 additions & 758 deletions
Large diffs are not rendered by default.

src/SignalR/SignalR.Test/SessionRecords/Microsoft.Azure.Commands.SignalR.Test.ScenarioTests.AzureRmSignalRTests/TestAzureRmSignalRSetUpstream.json

Lines changed: 863 additions & 521 deletions
Large diffs are not rendered by default.

src/SignalR/SignalR.Test/SessionRecords/Microsoft.Azure.Commands.SignalR.Test.ScenarioTests.AzureRmSignalRTests/TestAzureRmSignalRUpdate.json

Lines changed: 3385 additions & 0 deletions
Large diffs are not rendered by default.

src/SignalR/SignalR.Test/SessionRecords/Microsoft.Azure.Commands.SignalR.Test.ScenarioTests.AzureRmSignalRTests/TestAzureRmSignalRUpdateNetworkAcl.json

Lines changed: 2421 additions & 1872 deletions
Large diffs are not rendered by default.

src/SignalR/SignalR.Test/SessionRecords/Microsoft.Azure.Commands.SignalR.Test.ScenarioTests.AzureRmSignalRTests/TestAzureRmSignalRWithDefaultArgs.json

Lines changed: 510 additions & 666 deletions
Large diffs are not rendered by default.

src/SignalR/SignalR/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
* Fixed the bug of "Update-AzSignalR" cmdlet that resets the resource states by mistake.
2122

2223
## Version 1.4.0
2324
* Added Web PubSub cmdlets

src/SignalR/SignalR/Cmdlets/UpdateAzureRmSignalR.cs

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414

1515
using System;
1616
using System.Collections.Generic;
17+
using System.Linq;
1718
using System.Management.Automation;
1819
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
1920
using Microsoft.Azure.Commands.SignalR.Models;
2021
using Microsoft.Azure.Commands.SignalR.Properties;
2122
using Microsoft.Azure.Management.SignalR;
2223
using Microsoft.Azure.Management.SignalR.Models;
2324
using Microsoft.WindowsAzure.Commands.Common.CustomAttributes;
24-
using Newtonsoft.Json;
2525

2626
namespace Microsoft.Azure.Commands.SignalR.Cmdlets
2727
{
@@ -30,7 +30,6 @@ namespace Microsoft.Azure.Commands.SignalR.Cmdlets
3030
[CmdletOutputBreakingChange(typeof(PSSignalRResource), DeprecatedOutputProperties = new String[] { nameof(PSSignalRResource.HostNamePrefix) })]
3131
public class UpdateAzureRmSignalR : SignalRCmdletBase, IWithInputObject, IWithResourceId
3232
{
33-
private const string DefaultSku = "Standard_S1";
3433
private const int DefaultUnitCount = 1;
3534

3635
[Parameter(
@@ -120,36 +119,45 @@ public override void ExecuteCmdlet()
120119
throw new ArgumentException(Resources.ParameterSetError);
121120
}
122121

122+
var signalR = Client.SignalR.Get(ResourceGroupName, Name);
123+
if (Sku != null)
124+
{
125+
signalR.Sku = new ResourceSku(Sku, capacity: UnitCount ?? DefaultUnitCount);
126+
}
127+
if (UnitCount.HasValue)
128+
{
129+
signalR.Sku.Capacity = UnitCount.Value;
130+
}
131+
if (Tag != null)
132+
{
133+
signalR.Tags = Tag;
134+
}
135+
if (ServiceMode != null)
136+
{
137+
AddOrUpdateServiceMode(signalR, ServiceMode);
138+
}
139+
if (AllowedOrigin != null)
140+
{
141+
signalR.Cors = new SignalRCorsSettings(ParseAndCheckAllowedOrigins(AllowedOrigin));
142+
}
123143
if (ShouldProcess($"SignalR service {ResourceGroupName}/{Name}", "update"))
124144
{
125-
PromptParameter(nameof(ResourceGroupName), ResourceGroupName);
126-
PromptParameter(nameof(Name), Name);
127-
PromptParameter(nameof(Sku), Sku, true, DefaultSku);
128-
PromptParameter(nameof(UnitCount), UnitCount, true, DefaultUnitCount);
129-
PromptParameter(nameof(Tag), Tag == null ? null : JsonConvert.SerializeObject(Tag));
130-
PromptParameter(nameof(ServiceMode), ServiceMode);
131-
132-
IList<string> origins = ParseAndCheckAllowedOrigins(AllowedOrigin);
133-
PromptParameter(nameof(AllowedOrigin), origins == null ? null : JsonConvert.SerializeObject(origins));
134-
135-
Sku = Sku ?? DefaultSku;
136-
UnitCount = UnitCount ?? DefaultUnitCount;
137-
138-
IList<SignalRFeature> features = ServiceMode == null ? null : new List<SignalRFeature> { new SignalRFeature(flag: FeatureFlags.ServiceMode, value: ServiceMode) };
139-
SignalRCorsSettings cors = AllowedOrigin == null ? null : new SignalRCorsSettings(allowedOrigins: origins);
140-
141-
var parameters = new SignalRResource(
142-
tags: Tag,
143-
sku: new ResourceSku(name: Sku, capacity: UnitCount),
144-
features: features,
145-
cors: cors);
146-
147-
Client.SignalR.Update(parameters, ResourceGroupName, Name);
148-
149-
var signalr = (Client.SignalR.Get(ResourceGroupName, Name));
150-
WriteObject(new PSSignalRResource(signalr));
145+
var result = Client.SignalR.Update(signalR, ResourceGroupName, Name);
146+
WriteObject(new PSSignalRResource(result));
147+
}
148+
else
149+
{
150+
WriteWarning("Update-AzSignalR cmdlet was not run actually.");
151+
WriteObject(new PSSignalRResource(signalR));
151152
}
152153
});
153154
}
155+
156+
private void AddOrUpdateServiceMode(SignalRResource signalR, string ServiceMode)
157+
{
158+
signalR.Features = signalR.Features?.SkipWhile(f => f.Flag.Equals(ServiceMode)).ToList() ??
159+
new List<SignalRFeature>();
160+
signalR.Features.Add(new SignalRFeature(FeatureFlags.ServiceMode, ServiceMode));
161+
}
154162
}
155163
}

0 commit comments

Comments
 (0)