Skip to content

Commit ef3db25

Browse files
committed
Added validation on -Size parameter for Set-AzRedisCache and New-AzRedisCache cmdlets
1 parent a28b98e commit ef3db25

File tree

8 files changed

+101
-5
lines changed

8 files changed

+101
-5
lines changed

src/RedisCache/RedisCache.Test/ScenarioTests/Utilitytests.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Microsoft.WindowsAzure.Commands.ScenarioTest;
1+
using Microsoft.Azure.Commands.RedisCache.Models;
2+
using Microsoft.Azure.Management.Redis.Models;
3+
using Microsoft.WindowsAzure.Commands.ScenarioTest;
24
using System;
35
using Xunit;
46

@@ -48,5 +50,37 @@ public void ValidateResourceGroupAndResourceName_Success()
4850

4951
Utility.ValidateResourceGroupAndResourceName(resourceGroup, name);
5052
}
53+
54+
[Fact]
55+
[Trait(Category.AcceptanceType, Category.CheckIn)]
56+
public void ValidateSize_InvalidSizePremium()
57+
{
58+
string sku = "Premium";
59+
string size = "C1";
60+
61+
var ex = Assert.Throws<ArgumentException>(() => SizeConverter.ValidateSize(size.ToUpper(), SkuName.Premium.Equals(sku)));
62+
Assert.Contains("Invalid Size. Example for valid values: For Standard or Basic Sku: (C0, C1, C2, C3, C4, C5, C6), for Premium Sku: (P1, P2, P3, P4, P5)", ex.Message);
63+
}
64+
65+
[Fact]
66+
[Trait(Category.AcceptanceType, Category.CheckIn)]
67+
public void ValidateSize_InvalidSizeStandard()
68+
{
69+
string sku = "Standard";
70+
string size = "P1";
71+
72+
var ex = Assert.Throws<ArgumentException>(() => SizeConverter.ValidateSize(size.ToUpper(), SkuName.Premium.Equals(sku)));
73+
Assert.Contains("Invalid Size. Example for valid values: For Standard or Basic Sku: (C0, C1, C2, C3, C4, C5, C6), for Premium Sku: (P1, P2, P3, P4, P5)", ex.Message);
74+
}
75+
76+
[Fact]
77+
[Trait(Category.AcceptanceType, Category.CheckIn)]
78+
public void ValidateSize_Success()
79+
{
80+
string sku = "Premium";
81+
string size = "P1";
82+
83+
SizeConverter.ValidateSize(size.ToUpper(), SkuName.Premium.Equals(sku));
84+
}
5185
}
5286
}

src/RedisCache/RedisCache/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+
* Added validation on `-Size` parameter for `Set-AzRedisCache` and `New-AzRedisCache` cmdlets
2122

2223
## Version 1.1.1
2324
* Updated `Set-AzRedisCache` reference documentation to include missing values for `-Size` parameter

src/RedisCache/RedisCache/Commands/NewAzureRedisCache.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class NewAzureRedisCache : RedisCacheCmdletBase
4242
public string Location { get; set; }
4343

4444
[Parameter(ValueFromPipelineByPropertyName = true, Mandatory = false, HelpMessage = "Size of redis cache. Valid values: P1,P2, P3, P4, P5, C0, C1, C2, C3, C4, C5, C6, 250MB, 1GB, 2.5GB, 6GB, 13GB, 26GB, 53GB, 120GB")]
45-
[PSArgumentCompleter(SizeConverter.P1String, SizeConverter.P2String, SizeConverter.P3String, SizeConverter.P4String, SizeConverter.P5String,
45+
[PSArgumentCompleter, ValidateSet(SizeConverter.P1String, SizeConverter.P2String, SizeConverter.P3String, SizeConverter.P4String, SizeConverter.P5String,
4646
SizeConverter.C0String, SizeConverter.C1String, SizeConverter.C2String, SizeConverter.C3String, SizeConverter.C4String, SizeConverter.C5String, SizeConverter.C6String,
4747
SizeConverter.MB250, SizeConverter.GB1, SizeConverter.GB2_5, SizeConverter.GB6, SizeConverter.GB13, SizeConverter.GB26, SizeConverter.GB53, SizeConverter.GB120)]
4848
public string Size { get; set; }
@@ -86,11 +86,15 @@ public override void ExecuteCmdlet()
8686

8787
if (string.IsNullOrEmpty(Size))
8888
{
89-
Size = SizeConverter.C1String;
89+
if (SkuStrings.Premium.Equals(Sku, StringComparison.OrdinalIgnoreCase))
90+
Size = SizeConverter.P1String;
91+
else
92+
Size = SizeConverter.C1String;
9093
}
9194
else
9295
{
9396
Size = SizeConverter.GetSizeInRedisSpecificFormat(Size, SkuStrings.Premium.Equals(Sku));
97+
SizeConverter.ValidateSize(Size.ToUpper(), SkuStrings.Premium.Equals(Sku));
9498
}
9599

96100
int skuCapacity = 1;

src/RedisCache/RedisCache/Commands/SetAzureRedisCache.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class SetAzureRedisCache : RedisCacheCmdletBase
3636
public string Name { get; set; }
3737

3838
[Parameter(ValueFromPipelineByPropertyName = true, Mandatory = false, HelpMessage = "Size of redis cache. Valid values: P1,P2, P3, P4, P5, C0, C1, C2, C3, C4, C5, C6, 250MB, 1GB, 2.5GB, 6GB, 13GB, 26GB, 53GB, 120GB")]
39-
[PSArgumentCompleter(SizeConverter.P1String, SizeConverter.P2String, SizeConverter.P3String, SizeConverter.P4String, SizeConverter.P5String,
39+
[PSArgumentCompleter, ValidateSet(SizeConverter.P1String, SizeConverter.P2String, SizeConverter.P3String, SizeConverter.P4String, SizeConverter.P5String,
4040
SizeConverter.C0String, SizeConverter.C1String, SizeConverter.C2String, SizeConverter.C3String, SizeConverter.C4String, SizeConverter.C5String, SizeConverter.C6String,
4141
SizeConverter.MB250, SizeConverter.GB1, SizeConverter.GB2_5, SizeConverter.GB6, SizeConverter.GB13, SizeConverter.GB26, SizeConverter.GB53, SizeConverter.GB120)]
4242
public string Size { get; set; }
@@ -95,6 +95,7 @@ public override void ExecuteCmdlet()
9595
else
9696
{
9797
Size = SizeConverter.GetSizeInRedisSpecificFormat(Size, SkuStrings.Premium.Equals(Sku));
98+
SizeConverter.ValidateSize(Size.ToUpper(), SkuStrings.Premium.Equals(Sku));
9899
skuFamily = Size.Substring(0, 1);
99100
int.TryParse(Size.Substring(1), out skuCapacity);
100101
}

src/RedisCache/RedisCache/Models/SizeConverter.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
namespace Microsoft.Azure.Commands.RedisCache.Models
1616
{
17+
using Microsoft.Azure.Commands.RedisCache.Properties;
18+
using System;
1719
using System.Collections.Generic;
1820

1921
internal static class SizeConverter
@@ -41,6 +43,26 @@ internal static class SizeConverter
4143
public const string P4String = "P4";
4244
public const string P5String = "P5";
4345

46+
private static IList<string> CList = new List<string>()
47+
{
48+
C0String,
49+
C1String,
50+
C2String,
51+
C3String,
52+
C4String,
53+
C5String,
54+
C6String
55+
};
56+
57+
private static IList<string> PList = new List<string>()
58+
{
59+
P1String,
60+
P2String,
61+
P3String,
62+
P4String,
63+
P5String
64+
};
65+
4466
private static Dictionary<string, string> skuStringToActualSize = new Dictionary<string, string>{
4567
{ C0String, MB250 },
4668
{ C1String, GB1 },
@@ -120,5 +142,12 @@ public static string GetSizeInUserSpecificFormat(string skuFamily, int skuCapaci
120142
}
121143
return null;
122144
}
145+
146+
public static void ValidateSize(string size, bool isPremiumCache)
147+
{
148+
if((isPremiumCache && !PList.Contains(size)) || (!isPremiumCache && !CList.Contains(size))) {
149+
throw new ArgumentException(Resources.InvalidSize);
150+
}
151+
}
123152
}
124153
}

src/RedisCache/RedisCache/Properties/Resources.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/RedisCache/RedisCache/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@
162162
<data name="InvalidResourceGroupName" xml:space="preserve">
163163
<value>ResourceGroupName should not contain '/'. Name should be the plain, short name of the resource group, e.g. 'myResourceGroup'. (Not an Azure resource identifier.)</value>
164164
</data>
165+
<data name="InvalidSize" xml:space="preserve">
166+
<value>Invalid Size. Example for valid values: For Standard or Basic Sku: (C0, C1, C2, C3, C4, C5, C6), for Premium Sku: (P1, P2, P3, P4, P5)</value>
167+
</data>
165168
<data name="PatchScheduleNotFound" xml:space="preserve">
166169
<value>There are no patch schedules found for redis cache '{0}'.</value>
167170
</data>

src/RedisCache/RedisCache/RedisCache.csproj

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,19 @@
1515
<PackageReference Include="Microsoft.Azure.Management.Redis" Version="4.4.1" />
1616
</ItemGroup>
1717

18+
<ItemGroup>
19+
<Compile Update="Properties\Resources.Designer.cs">
20+
<DesignTime>True</DesignTime>
21+
<AutoGen>True</AutoGen>
22+
<DependentUpon>Resources.resx</DependentUpon>
23+
</Compile>
24+
</ItemGroup>
25+
26+
<ItemGroup>
27+
<EmbeddedResource Update="Properties\Resources.resx">
28+
<Generator>ResXFileCodeGenerator</Generator>
29+
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
30+
</EmbeddedResource>
31+
</ItemGroup>
32+
1833
</Project>

0 commit comments

Comments
 (0)