Skip to content

Commit 04ccb6f

Browse files
committed
Add replica related cmdlets
1 parent dfcc267 commit 04ccb6f

22 files changed

+5635
-7
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,10 @@ public void TestAzureRmSignalRUpdate() =>
5252
[Trait(Category.AcceptanceType, Category.CheckIn)]
5353
public void TestAzureRmSignalRCustomCertificateAndCustomDomain() =>
5454
TestRunner.RunTestScript("Test-AzureRmSignalRCustomCertificateAndCustomDomain");
55+
56+
[Fact]
57+
[Trait(Category.AcceptanceType, Category.CheckIn)]
58+
public void TestAzSignalRReplica() =>
59+
TestRunner.RunTestScript("Test-AzSignalRReplica");
5560
}
5661
}

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

Lines changed: 133 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ function Test-AzureRmSignalR
7373
$newKeys1 = Get-AzSignalRKey -ResourceGroupName $resourceGroupName -Name $signalrName
7474
Assert-NotNull $newKeys1
7575

76-
if( $env:AZURE_TEST_MODE -eq "Record")
76+
if( GetTestMode -eq "Record")
7777
{
7878
Assert-AreNotEqual $keys.PrimaryKey $newKeys1.PrimaryKey
7979
Assert-AreNotEqual $keys.PrimaryConnectionString $newKeys1.PrimaryConnectionString
@@ -89,7 +89,7 @@ function Test-AzureRmSignalR
8989
Assert-NotNull $newKeys2
9090
Assert-AreEqual $newKeys1.PrimaryKey $newKeys2.PrimaryKey
9191
Assert-AreEqual $newKeys1.PrimaryConnectionString $newKeys2.PrimaryConnectionString
92-
if( $env:AZURE_TEST_MODE -eq "Record")
92+
if( GetTestMode -eq "Record")
9393
{
9494
Assert-AreNotEqual $newKeys1.SecondaryKey $newKeys2.SecondaryKey
9595
Assert-AreNotEqual $newKeys1.SecondaryConnectionString $newKeys2.SecondaryConnectionString
@@ -159,7 +159,7 @@ function Test-AzureRmSignalRWithDefaultArgs
159159
# The following two lines don't work in "playback" mode because all the connection strings are sanitized to the same value.
160160
# If test mode is playback , skip the test
161161

162-
if( $env:AZURE_TEST_MODE -eq "Record" )
162+
if( GetTestMode -eq "Record" )
163163
{
164164
Assert-AreNotEqual $keys.PrimaryKey $newKeys1.PrimaryKey
165165
Assert-AreNotEqual $keys.PrimaryConnectionString $newKeys1.PrimaryConnectionString
@@ -544,6 +544,136 @@ function Test-AzureRmSignalRCustomCertificateAndCustomDomain
544544
}
545545
}
546546

547+
<#
548+
.SYNOPSIS
549+
Test replica cmdlets for SignalR.
550+
#>
551+
function Test-AzSignalRReplica
552+
{
553+
$location = Get-ProviderLocation "Microsoft.SignalRService/SignalR"
554+
$nameSuffix = "replica-test"
555+
$resourceGroupName = "powershellsignalrreplicatest"
556+
$signalrName = "powershellsignalrreplicatest1"
557+
$replicaName1 = "replica1-11111"
558+
$replicaName2 = "replica2-22222"
559+
560+
try
561+
{
562+
# Setup - Create resource group and SignalR service (Premium required for replicas)
563+
# New-AzResourceGroup -Name $resourceGroupName -Location $location # Don't create resource group in the test, otherwise it would be cleaned up by "ResourceCleanerDelegatingHandler" in Azure PowerShell test framwork. Setup the resource group in advance.
564+
$signalr = New-AzSignalR -ResourceGroupName $resourceGroupName -Name $signalrName -Sku "Premium_P1" -Location $location
565+
566+
# Test Create replica using SignalR object parameter set
567+
$replica1 = $signalr | New-AzSignalRReplica -Name $replicaName1 -Location "West US 2" -UnitCount 2
568+
Assert-NotNull $replica1
569+
Assert-AreEqual $replicaName1 $replica1.Name
570+
Assert-LocationEqual "West US 2" $replica1.Location
571+
Assert-AreEqual 2 $replica1.Sku.Capacity
572+
573+
# Replica may be in "updating" internally, wait until update finishes.
574+
if( GetTestMode -eq "Record")
575+
{
576+
Start-Sleep -Seconds 120
577+
}
578+
579+
$replica2 = $signalr | New-AzSignalRReplica -Name $replicaName2 -Location "East US 2"
580+
Assert-NotNull $replica2
581+
Assert-AreEqual $replicaName2 $replica2.Name
582+
Assert-AreEqual 1 $replica2.Sku.Capacity
583+
584+
# Test Get replica using SignalR object parameter set
585+
$retrievedReplica = $signalr | Get-AzSignalRReplica -Name $replicaName1
586+
Assert-NotNull $retrievedReplica
587+
Assert-AreEqual $replicaName1 $retrievedReplica.Name
588+
589+
# Test List all replicas using SignalR object parameter set
590+
$replicas = $signalr | Get-AzSignalRReplica
591+
Assert-NotNull $replicas
592+
Assert-AreEqual 2 $replicas.Count
593+
594+
# Replica may be in "updating" internally, wait until update finishes.
595+
if( GetTestMode -eq "Record")
596+
{
597+
Start-Sleep -Seconds 120
598+
}
599+
600+
# Test Update replica using InputObject parameter set
601+
$updatedReplica = $replica1 | Update-AzSignalRReplica -RegionEndpointEnabled "Disabled"
602+
Assert-AreEqual "Disabled" $updatedReplica.RegionEndpointEnabled
603+
604+
# Replica may be in "updating" internally, wait until update finishes.
605+
if( GetTestMode -eq "Record")
606+
{
607+
Start-Sleep -Seconds 120
608+
}
609+
610+
# Test Stop replica using InputObject parameter set
611+
$result = $replica1 | Stop-AzSignalRReplica -PassThru
612+
Assert-True { $result }
613+
614+
# Replica may be in "updating" internally, wait until update finishes.
615+
if( GetTestMode -eq "Record")
616+
{
617+
Start-Sleep -Seconds 120
618+
}
619+
620+
# Test Start replica using InputObject parameter set
621+
$stoppedReplica = Get-AzSignalRReplica -ResourceGroupName $resourceGroupName -SignalRName $signalrName -Name $replicaName1
622+
$result = $stoppedReplica | Start-AzSignalRReplica -PassThru
623+
Assert-True { $result }
624+
625+
# Replica may be in "updating" internally, wait until update finishes.
626+
if( GetTestMode -eq "Record")
627+
{
628+
Start-Sleep -Seconds 120
629+
}
630+
631+
# Test Restart replica using InputObject parameter set
632+
$result = $replica2 | Restart-AzSignalRReplica -PassThru
633+
Assert-True { $result }
634+
635+
# Replica may be in "updating" internally, wait until update finishes.
636+
if( GetTestMode -eq "Record")
637+
{
638+
Start-Sleep -Seconds 120
639+
}
640+
641+
# Test Remove replica using InputObject parameter set
642+
$result = $replica1 | Remove-AzSignalRReplica -PassThru
643+
Assert-True { $result }
644+
645+
# Replica may be in "updating" internally, wait until update finishes.
646+
if( GetTestMode -eq "Record")
647+
{
648+
Start-Sleep -Seconds 120
649+
}
650+
651+
# Test Remove replica using SignalR object parameter set
652+
$result = $signalr | Remove-AzSignalRReplica -Name $replicaName2 -PassThru
653+
Assert-True { $result }
654+
655+
# Replica may be in "updating" internally, wait until update finishes.
656+
if( GetTestMode -eq "Record")
657+
{
658+
Start-Sleep -Seconds 120
659+
}
660+
661+
# Verify replicas are removed
662+
$replicas = Get-AzSignalRReplica -ResourceGroupName $resourceGroupName -SignalRName $signalrName
663+
Assert-AreEqual 0 $replicas.Count
664+
665+
} finally
666+
{
667+
# Cleanup - Remove any remaining resources
668+
try {
669+
# Get-AzSignalRReplica -ResourceGroupName $resourceGroupName -SignalRName $signalrName | Remove-AzSignalRReplica
670+
} catch {
671+
# Ignore cleanup errors
672+
}
673+
# Remove-AzResourceGroup -Name $resourceGroupName -Force
674+
}
675+
}
676+
547677
function New-Environment
548678
{
549679
param (

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,19 @@ function Get-ProviderLocation([string]$provider)
7474

7575
return "East US"
7676
}
77+
78+
<#
79+
.SYNOPSIS
80+
Gets the current test mode, either "Record" or "Playback"
81+
#>
82+
function GetTestMode()
83+
{
84+
if( $env:AZURE_TEST_MODE -eq "Record" )
85+
{
86+
return "Record"
87+
}
88+
else
89+
{
90+
return "Playback"
91+
}
92+
}

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

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

src/SignalR/SignalR/Az.SignalR.psd1

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,9 @@ CmdletsToExport = 'Get-AzSignalR', 'Get-AzSignalRKey', 'Get-AzSignalRUsage',
9292
'New-AzSignalR', 'New-AzSignalRKey', 'Remove-AzSignalR',
9393
'Restart-AzSignalR', 'Set-AzSignalRUpstream', 'Test-AzSignalRName',
9494
'Update-AzSignalR', 'Update-AzSignalRNetworkAcl',
95-
'New-AzSignalRCustomDomain', 'Get-AzSignalRCustomDomain',
96-
'Remove-AzSignalRCustomDomain', 'Update-AzSignalRCustomDomain',
97-
'New-AzSignalRCustomCertificate', 'Get-AzSignalRCustomCertificate',
98-
'Remove-AzSignalRCustomCertificate'
95+
'New-AzSignalRCustomDomain', 'Get-AzSignalRCustomDomain', 'Remove-AzSignalRCustomDomain', 'Update-AzSignalRCustomDomain',
96+
'New-AzSignalRCustomCertificate', 'Get-AzSignalRCustomCertificate', 'Remove-AzSignalRCustomCertificate',
97+
'Get-AzSignalRReplica', 'New-AzSignalRReplica', 'Remove-AzSignalRReplica', 'Restart-AzSignalRReplica', 'Start-AzSignalRReplica', 'Stop-AzSignalRReplica', 'Update-AzSignalRReplica'
9998

10099
# Variables to export from this module
101100
# VariablesToExport = @()

src/SignalR/SignalR/ChangeLog.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
* Added cmdlets for managing replicas:
22+
- Get-AzSignalRReplica: get replica(s) for SignalR
23+
- New-AzSignalRReplica: create a new replica for SignalR
24+
- Remove-AzSignalRReplica: remove a replica from SignalR
25+
- Restart-AzSignalRReplica: restart a SignalR replica
26+
- Start-AzSignalRReplica: start a SignalR replica
27+
- Stop-AzSignalRReplica: stop a SignalR replica
28+
- Update-AzSignalRReplica: update a SignalR replica
2129

2230
## Version 2.2.0
2331
* Added cmdlets for managing custom domains: `New-AzSignalRCustomDomain`, `Get-AzSignalRCustomDomain`, `Remove-AzSignalRCustomDomain`, `Update-AzSignalRCustomDomain`
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
using System;
16+
using System.Linq;
17+
using System.Management.Automation;
18+
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
19+
using Microsoft.Azure.Commands.SignalR.Models;
20+
using Microsoft.Azure.Commands.SignalR.Properties;
21+
22+
namespace Microsoft.Azure.Commands.SignalR.Cmdlets
23+
{
24+
[Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "SignalRReplica", DefaultParameterSetName = ResourceGroupParameterSet)]
25+
[OutputType(typeof(PSReplicaResource))]
26+
public class GetAzureRmSignalRReplica : SignalRCmdletBase, ISignalRChildResource
27+
{
28+
[Parameter(Mandatory = false, ParameterSetName = ResourceGroupParameterSet, HelpMessage = "The resource group name. The default one will be used if not specified.")]
29+
[ValidateNotNullOrEmpty()]
30+
[ResourceGroupCompleter]
31+
public override string ResourceGroupName { get; set; }
32+
33+
[Parameter(Mandatory = true, ParameterSetName = ResourceGroupParameterSet, HelpMessage = "The SignalR service name.")]
34+
[ValidateNotNullOrEmpty()]
35+
[ResourceNameCompleter(Constants.SignalRResourceType, nameof(ResourceGroupName))]
36+
public string SignalRName { get; set; }
37+
38+
[ValidateNotNullOrEmpty()]
39+
[Parameter(Mandatory = false, ParameterSetName = ResourceGroupParameterSet, HelpMessage = "The name of the replica")]
40+
[Parameter(Mandatory = false, ParameterSetName = SignalRObjectParameterSet, HelpMessage = "The name of the replica")]
41+
public string Name { get; set; }
42+
43+
[Parameter(Mandatory = true, ParameterSetName = ResourceIdParameterSet, HelpMessage = "The resource ID of a replica", ValueFromPipelineByPropertyName = true)]
44+
[ValidateNotNullOrEmpty()]
45+
public string ResourceId { get; set; }
46+
47+
[Parameter(Mandatory = true, ParameterSetName = SignalRObjectParameterSet, ValueFromPipeline = true, HelpMessage = "The SignalR resource object.")]
48+
[ValidateNotNull]
49+
public PSSignalRResource SignalRObject { get; set; }
50+
51+
[Parameter(Mandatory = false, HelpMessage = "Run the cmdlet in background job.")]
52+
public SwitchParameter AsJob { get; set; }
53+
54+
public override void ExecuteCmdlet()
55+
{
56+
base.ExecuteCmdlet();
57+
RunCmdlet(() =>
58+
{
59+
switch (ParameterSetName)
60+
{
61+
case ResourceGroupParameterSet:
62+
ResolveResourceGroupName();
63+
break;
64+
case SignalRObjectParameterSet:
65+
this.LoadFromSignalRResourceId(SignalRObject.Id);
66+
break;
67+
case ResourceIdParameterSet:
68+
this.LoadFromChildResourceId(ResourceId, Constants.SignalRReplicaResourceType);
69+
break;
70+
default:
71+
throw new ArgumentException(Resources.ParameterSetError);
72+
}
73+
if (Name == null)
74+
{
75+
var result = Microsoft.Azure.Management.SignalR.SignalRReplicasOperationsExtensions.List(Client.SignalRReplicas, ResourceGroupName, SignalRName);
76+
WriteObject(result.Select(r => new PSReplicaResource(r)), true);
77+
}
78+
else
79+
{
80+
var result = Microsoft.Azure.Management.SignalR.SignalRReplicasOperationsExtensions.Get(Client.SignalRReplicas, ResourceGroupName, SignalRName, Name);
81+
WriteObject(new PSReplicaResource(result));
82+
}
83+
});
84+
}
85+
}
86+
}

0 commit comments

Comments
 (0)