Skip to content

Commit 8ab912a

Browse files
SiddharthChatrolaMsHovsep
authored andcommitted
Added validation for ResourceGroupName and Cache Name (#2696)
1 parent 929f3d8 commit 8ab912a

20 files changed

+116
-0
lines changed

src/ResourceManager/RedisCache/Commands.RedisCache.Test/Commands.RedisCache.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@
192192
<Compile Include="Properties\AssemblyInfo.cs" />
193193
<Compile Include="ScenarioTests\RedisCacheController.cs" />
194194
<Compile Include="ScenarioTests\RedisCacheTests.cs" />
195+
<Compile Include="ScenarioTests\UtilityTests.cs" />
195196
</ItemGroup>
196197
<ItemGroup>
197198
<ProjectReference Include="..\..\..\Common\Commands.Common.Authentication\Commands.Common.Authentication.csproj">
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Xunit;
7+
8+
namespace Microsoft.Azure.Commands.RedisCache.Test.ScenarioTests
9+
{
10+
public class UtilityTests
11+
{
12+
[Fact]
13+
public void ValidateResourceGroupAndResourceName_InvalidResourceGroup()
14+
{
15+
string resourceGroup = "subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/Default-Storage-NorthEurope";
16+
string name = "cache-name";
17+
18+
var ex = Assert.Throws<ArgumentException>(() => Utility.ValidateResourceGroupAndResourceName(resourceGroup, name));
19+
Assert.Contains("ResourceGroupName should not contain '/'. Name should be the plain, short name of the resource group, e.g. 'myResourceGroup'. (Not an Azure resource identifier.)", ex.Message);
20+
}
21+
22+
[Fact]
23+
public void ValidateResourceGroupAndResourceName_InvalidRedisCacheName_FullName()
24+
{
25+
string resourceGroup = "Default-Storage-NorthEurope";
26+
string name = "cache-name.redis.cache.windows.net";
27+
28+
var ex = Assert.Throws<ArgumentException>(() => Utility.ValidateResourceGroupAndResourceName(resourceGroup, name));
29+
Assert.Contains("Name should not contain '/' or '.'. Name should be the plain, short name of the redis cache, e.g. 'mycache'. (Not a fully qualified DNS name, and not an Azure resource identifier.)", ex.Message);
30+
}
31+
32+
[Fact]
33+
public void ValidateResourceGroupAndResourceName_InvalidRedisCacheName_ID()
34+
{
35+
string resourceGroup = "Default-Storage-NorthEurope";
36+
string name = "subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/Default-Storage-NorthEurope/cache-name";
37+
38+
var ex = Assert.Throws<ArgumentException>(() => Utility.ValidateResourceGroupAndResourceName(resourceGroup, name));
39+
Assert.Contains("Name should not contain '/' or '.'. Name should be the plain, short name of the redis cache, e.g. 'mycache'. (Not a fully qualified DNS name, and not an Azure resource identifier.)", ex.Message);
40+
}
41+
42+
[Fact]
43+
public void ValidateResourceGroupAndResourceName_Success()
44+
{
45+
string resourceGroup = "Default-Storage-NorthEurope";
46+
string name = "cache-name";
47+
48+
Utility.ValidateResourceGroupAndResourceName(resourceGroup, name);
49+
}
50+
}
51+
}

src/ResourceManager/RedisCache/Commands.RedisCache/Commands.RedisCache.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
<Compile Include="Models\RedisCacheClient.cs" />
175175
<Compile Include="Models\RedisCacheCmdletBase.cs" />
176176
<Compile Include="Models\SizeConverter.cs" />
177+
<Compile Include="Models\Utility.cs" />
177178
<Compile Include="Properties\AssemblyInfo.cs" />
178179
<Compile Include="Properties\Resources.Designer.cs">
179180
<AutoGen>True</AutoGen>

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/ExportAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public class ExportAzureRedisCache : RedisCacheCmdletBase
4646

4747
public override void ExecuteCmdlet()
4848
{
49+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4950
CacheClient.ExportToCache(ResourceGroupName, Name, Container, Prefix, Format);
5051

5152
if (PassThru)

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/GetAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class GetAzureRedisCache : RedisCacheCmdletBase
3636

3737
public override void ExecuteCmdlet()
3838
{
39+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
3940
if (!string.IsNullOrEmpty(ResourceGroupName) && !string.IsNullOrEmpty(Name))
4041
{
4142
// Get for single cache

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/GetAzureRedisCacheKey.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class GetAzureRedisCacheKey : RedisCacheCmdletBase
3030

3131
public override void ExecuteCmdlet()
3232
{
33+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
3334
RedisListKeysResult keysResponse = CacheClient.GetAccessKeys(ResourceGroupName, Name);
3435
WriteObject(new RedisAccessKeys()
3536
{

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/GetAzureRedisCachePatchSchedule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class GetAzureRedisCachePatchSchedule : RedisCacheCmdletBase
3535

3636
public override void ExecuteCmdlet()
3737
{
38+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
3839
IList<ScheduleEntry> response = CacheClient.GetPatchSchedules(ResourceGroupName, Name);
3940
List<PSScheduleEntry> returnValue = new List<PSScheduleEntry>();
4041
foreach (var schedule in response)

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/ImportAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public class ImportAzureRedisCache : RedisCacheCmdletBase
4545

4646
public override void ExecuteCmdlet()
4747
{
48+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4849
if (!Force.IsPresent)
4950
{
5051
ConfirmAction(

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/NewAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public class NewAzureRedisCache : RedisCacheCmdletBase
8080

8181
public override void ExecuteCmdlet()
8282
{
83+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
8384
if (!string.IsNullOrEmpty(RedisVersion))
8485
{
8586
WriteWarning("The RedisVersion parameter has been deprecated. As such, it is no longer necessary to provide this parameter and any value specified is ignored.");

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/NewAzureRedisCacheKey.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class NewAzureRedisCacheKey : RedisCacheCmdletBase
4040

4141
public override void ExecuteCmdlet()
4242
{
43+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4344
RedisKeyType keyTypeToRegenerated = RedisKeyType.Primary;
4445
if (KeyType.Equals("Secondary"))
4546
{

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/NewAzureRedisCachePatchSchedule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class NewAzureRedisCachePatchSchedule : RedisCacheCmdletBase
3939

4040
public override void ExecuteCmdlet()
4141
{
42+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4243
// Convert from PSScheduleEntry to ScheduleEntry
4344
List<ScheduleEntry> requestData = new List<ScheduleEntry>();
4445
foreach (var schedule in Entries)

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/RemoveAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class RemoveAzureRedisCache : RedisCacheCmdletBase
3737

3838
public override void ExecuteCmdlet()
3939
{
40+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4041
ConfirmAction(
4142
Force.IsPresent,
4243
string.Format(Resources.RemovingRedisCache, Name),

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/RemoveAzureRedisCacheDiagnostics.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class RemoveAzureRedisCacheDiagnostics : RedisCacheCmdletBase
3838

3939
public override void ExecuteCmdlet()
4040
{
41+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4142
RedisCacheAttributes cache = new RedisCacheAttributes(CacheClient.GetCache(ResourceGroupName, Name), ResourceGroupName);
4243
ConfirmAction(
4344
string.Format(Resources.RemoveRedisCacheDiagnostics, Name),

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/RemoveAzureRedisCachePatchSchedule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class RemoveAzureRedisCachePatchSchedule : RedisCacheCmdletBase
3535

3636
public override void ExecuteCmdlet()
3737
{
38+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
3839
CacheClient.RemovePatchSchedules(ResourceGroupName, Name);
3940
}
4041
}

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/ResetAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class ResetAzureRedisCache : RedisCacheCmdletBase
4747

4848
public override void ExecuteCmdlet()
4949
{
50+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
5051
if (!Force.IsPresent)
5152
{
5253
ConfirmAction(

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/SetAzureRedisCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class SetAzureRedisCache : RedisCacheCmdletBase
6262

6363
public override void ExecuteCmdlet()
6464
{
65+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
6566
if (!string.IsNullOrEmpty(MaxMemoryPolicy))
6667
{
6768
throw new ArgumentException(Resources.MaxMemoryPolicyException);

src/ResourceManager/RedisCache/Commands.RedisCache/Commands/SetAzureRedisCacheDiagnostics.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public override void ExecuteCmdlet()
4343

4444
private string GetStorageAccountName(string storageAccountId)
4545
{
46+
Utility.ValidateResourceGroupAndResourceName(ResourceGroupName, Name);
4647
if (string.IsNullOrEmpty(storageAccountId))
4748
{
4849
throw new ArgumentException(Resources.StorageAccountIdException);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Microsoft.Azure.Commands.RedisCache.Properties;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace Microsoft.Azure.Commands.RedisCache
9+
{
10+
public class Utility
11+
{
12+
public static void ValidateResourceGroupAndResourceName(string resourceGroupName, string name)
13+
{
14+
if (resourceGroupName != null && resourceGroupName.Contains("/"))
15+
{
16+
throw new ArgumentException(Resources.InvalidResourceGroupName);
17+
}
18+
19+
if (name != null && (name.Contains("/") || name.Contains(".")))
20+
{
21+
throw new ArgumentException(Resources.InvalidRedisCacheName);
22+
}
23+
}
24+
}
25+
}

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

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ResourceManager/RedisCache/Commands.RedisCache/Properties/Resources.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,10 @@
156156
<data name="StorageAccountIdException" xml:space="preserve">
157157
<value>StorageAccountId is not valid ARM resource Id.</value>
158158
</data>
159+
<data name="InvalidRedisCacheName" xml:space="preserve">
160+
<value>Name should not contain '/' or '.'. Name should be the plain, short name of the redis cache, e.g. 'mycache'. (Not a fully qualified DNS name, and not an Azure resource identifier.)</value>
161+
</data>
162+
<data name="InvalidResourceGroupName" xml:space="preserve">
163+
<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>
164+
</data>
159165
</root>

0 commit comments

Comments
 (0)