Skip to content

Commit dc54a11

Browse files
authored
Merge pull request #7031 from cormacpayne/update-environments
Ensure that contexts are updated when an environment is updated
2 parents 24518a4 + 79598b8 commit dc54a11

File tree

3 files changed

+192
-0
lines changed

3 files changed

+192
-0
lines changed

build.proj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@
134134
<Target Name="Clean">
135135
<Message Importance="high" Text="Cleaning Cmdlets..." ContinueOnError="false" />
136136

137+
<!-- Clean out the NuGet cache -->
138+
<Exec ContinueOnError="false"
139+
Command="&quot;$(PowerShellCommand)&quot; -NonInteractive -NoLogo -NoProfile -Command &quot; $Path = Join-Path $env:USERPROFILE .nuget; if (Test-Path $Path) { Remove-Item $Path -Recurse } &quot;"/>
140+
137141
<!-- Clean each project -->
138142
<MSBuild Projects="@(CmdletSolutionsToBuild)"
139143
Targets="Clean"

src/ResourceManager/Profile/Commands.Profile.Test/EnvironmentCmdletTests.cs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Microsoft.Azure.Commands.Common.Authentication;
1616
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
1717
using Microsoft.Azure.Commands.Common.Authentication.Models;
18+
using Microsoft.Azure.Commands.Common.Authentication.ResourceManager;
1819
using Microsoft.Azure.Commands.Profile;
1920
using Microsoft.Azure.Commands.Profile.Models;
2021
using Microsoft.Azure.Commands.Profile.Utilities;
@@ -715,6 +716,104 @@ public void SetEnvironmentForStack()
715716
Assert.Equal(env3.GetEndpoint(AzureEnvironment.Endpoint.Gallery), cmdlet3.GalleryEndpoint);
716717
}
717718

719+
[Fact]
720+
[Trait(Category.AcceptanceType, Category.CheckIn)]
721+
public void SetEnvironmentForMultipleContexts()
722+
{
723+
// Add new environment
724+
Mock<ICommandRuntime> commandRuntimeMock = new Mock<ICommandRuntime>();
725+
SetupConfirmation(commandRuntimeMock);
726+
var cmdlet = new AddAzureRMEnvironmentCommand()
727+
{
728+
CommandRuntime = commandRuntimeMock.Object,
729+
Name = "Katal",
730+
ARMEndpoint = "https://management.azure.com/",
731+
AzureKeyVaultDnsSuffix = "vault.local.azurestack.external",
732+
AzureKeyVaultServiceEndpointResourceId = "https://vault.local.azurestack.external"
733+
734+
};
735+
var dict = new Dictionary<string, object>
736+
{
737+
{ "ARMEndpoint", "https://management.azure.com/" },
738+
{ "AzureKeyVaultDnsSuffix", "vault.local.azurestack.external" },
739+
{ "AzureKeyVaultServiceEndpointResourceId", "https://vault.local.azurestack.external" }
740+
};
741+
742+
cmdlet.SetBoundParameters(dict);
743+
cmdlet.SetParameterSet("ARMEndpoint");
744+
cmdlet.InvokeBeginProcessing();
745+
cmdlet.ExecuteCmdlet();
746+
cmdlet.InvokeEndProcessing();
747+
var profileClient = new RMProfileClient(AzureRmProfileProvider.Instance.GetProfile<AzureRmProfile>());
748+
IAzureEnvironment env = AzureRmProfileProvider.Instance.Profile.Environments.First((e) => string.Equals(e.Name, "KaTaL", StringComparison.OrdinalIgnoreCase));
749+
Assert.Equal(env.Name, cmdlet.Name);
750+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultDnsSuffix), dict["AzureKeyVaultDnsSuffix"]);
751+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId), dict["AzureKeyVaultServiceEndpointResourceId"]);
752+
753+
// Create contexts using the new environment
754+
var profile = new AzureRmProfile();
755+
string contextName1;
756+
var context1 = (new AzureContext { Environment = env })
757+
.WithAccount(new AzureAccount { Id = "[email protected]" })
758+
.WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.com" })
759+
.WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 1" });
760+
profile.TryAddContext(context1, out contextName1);
761+
string contextName2;
762+
var context2 = (new AzureContext { Environment = env })
763+
.WithAccount(new AzureAccount { Id = "[email protected]" })
764+
.WithTenant(new AzureTenant { Id = Guid.NewGuid().ToString(), Directory = "contoso.cn" })
765+
.WithSubscription(new AzureSubscription { Id = Guid.NewGuid().ToString(), Name = "Contoso Subscription 2" });
766+
profile.TryAddContext(context2, out contextName2);
767+
profile.TrySetDefaultContext(context1);
768+
AzureRmProfileProvider.Instance.Profile = profile;
769+
770+
// Update the environment with new endpoints
771+
commandRuntimeMock = new Mock<ICommandRuntime>();
772+
SetupConfirmation(commandRuntimeMock);
773+
var cmdlet2 = new AddAzureRMEnvironmentCommand()
774+
{
775+
CommandRuntime = commandRuntimeMock.Object,
776+
Name = "Katal",
777+
ARMEndpoint = "https://management.azure.com/",
778+
AzureKeyVaultDnsSuffix = "adminvault.local.azurestack.external",
779+
AzureKeyVaultServiceEndpointResourceId = "https://adminvault.local.azurestack.external"
780+
};
781+
782+
dict.Clear();
783+
dict = new Dictionary<string, object>
784+
{
785+
{ "ARMEndpoint", "https://management.azure.com/" },
786+
{ "AzureKeyVaultDnsSuffix", "adminvault.local.azurestack.external" },
787+
{ "AzureKeyVaultServiceEndpointResourceId", "https://adminvault.local.azurestack.external" }
788+
};
789+
790+
cmdlet2.SetBoundParameters(dict);
791+
cmdlet2.SetParameterSet("ARMEndpoint");
792+
cmdlet2.InvokeBeginProcessing();
793+
cmdlet2.ExecuteCmdlet();
794+
cmdlet2.InvokeEndProcessing();
795+
796+
profileClient = new RMProfileClient(AzureRmProfileProvider.Instance.GetProfile<AzureRmProfile>());
797+
env = AzureRmProfileProvider.Instance.Profile.Environments.First((e) => string.Equals(e.Name, "KaTaL", StringComparison.OrdinalIgnoreCase));
798+
Assert.Equal(env.Name, cmdlet.Name);
799+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultDnsSuffix), dict["AzureKeyVaultDnsSuffix"]);
800+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId), dict["AzureKeyVaultServiceEndpointResourceId"]);
801+
802+
// Validate that the endpoints were updated in the contexts
803+
profile = (AzureRmProfile)AzureRmProfileProvider.Instance.Profile;
804+
Assert.NotNull(profile);
805+
Assert.NotNull(profile.Contexts);
806+
Assert.NotEmpty(profile.Contexts);
807+
foreach (var context in profile.Contexts.Values)
808+
{
809+
Assert.NotNull(context);
810+
Assert.NotNull(context.Environment);
811+
Assert.Equal(context.Environment.Name, env.Name);
812+
Assert.Equal(context.Environment.AzureKeyVaultDnsSuffix, env.AzureKeyVaultDnsSuffix);
813+
Assert.Equal(context.Environment.AzureKeyVaultServiceEndpointResourceId, env.AzureKeyVaultServiceEndpointResourceId);
814+
}
815+
}
816+
718817
[Fact]
719818
[Trait(Category.AcceptanceType, Category.CheckIn)]
720819
public void RemovesAzureEnvironment()

src/ResourceManager/Profile/Commands.Profile.Test/LoginCmdletTests.cs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,5 +463,94 @@ public void LoginUsingSkipValidation()
463463
Assert.Equal(AzureRmProfileProvider.Instance.Profile.DefaultContext.Subscription.Id, cmdlt.Subscription);
464464
Assert.Equal(AzureRmProfileProvider.Instance.Profile.DefaultContext.Tenant.Id, cmdlt.TenantId);
465465
}
466+
467+
[Fact]
468+
[Trait(Category.AcceptanceType, Category.LiveOnly)]
469+
public void AddEnvironmentUpdatesContext()
470+
{
471+
var cmdlet = new AddAzureRMEnvironmentCommand()
472+
{
473+
CommandRuntime = commandRuntimeMock,
474+
Name = "Katal",
475+
ARMEndpoint = "https://management.azure.com/",
476+
AzureKeyVaultDnsSuffix = "vault.local.azurestack.external",
477+
AzureKeyVaultServiceEndpointResourceId = "https://vault.local.azurestack.external"
478+
479+
};
480+
var dict = new Dictionary<string, object>
481+
{
482+
{ "ARMEndpoint", "https://management.azure.com/" },
483+
{ "AzureKeyVaultDnsSuffix", "vault.local.azurestack.external" },
484+
{ "AzureKeyVaultServiceEndpointResourceId", "https://vault.local.azurestack.external" }
485+
};
486+
487+
cmdlet.SetBoundParameters(dict);
488+
cmdlet.SetParameterSet("ARMEndpoint");
489+
cmdlet.InvokeBeginProcessing();
490+
cmdlet.ExecuteCmdlet();
491+
cmdlet.InvokeEndProcessing();
492+
493+
commandRuntimeMock = new MockCommandRuntime();
494+
var profileClient = new RMProfileClient(AzureRmProfileProvider.Instance.GetProfile<AzureRmProfile>());
495+
IAzureEnvironment env = AzureRmProfileProvider.Instance.Profile.Environments.First((e) => string.Equals(e.Name, "KaTaL", StringComparison.OrdinalIgnoreCase));
496+
Assert.Equal(env.Name, cmdlet.Name);
497+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultDnsSuffix), dict["AzureKeyVaultDnsSuffix"]);
498+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId), dict["AzureKeyVaultServiceEndpointResourceId"]);
499+
500+
var cmdlet1 = new ConnectAzureRmAccountCommand();
501+
cmdlet1.CommandRuntime = commandRuntimeMock;
502+
cmdlet1.Environment = "Katal";
503+
504+
dict.Clear();
505+
dict = new Dictionary<string, object>
506+
{
507+
{ "Environment", cmdlet1.Environment }
508+
};
509+
510+
cmdlet1.SetBoundParameters(dict);
511+
cmdlet1.InvokeBeginProcessing();
512+
cmdlet1.ExecuteCmdlet();
513+
cmdlet1.InvokeEndProcessing();
514+
commandRuntimeMock = new MockCommandRuntime();
515+
516+
Assert.NotNull(AzureRmProfileProvider.Instance.Profile.DefaultContext);
517+
Assert.Equal(AzureRmProfileProvider.Instance.Profile.DefaultContext.Environment.Name, cmdlet1.Environment);
518+
519+
var cmdlet2 = new AddAzureRMEnvironmentCommand()
520+
{
521+
CommandRuntime = commandRuntimeMock,
522+
Name = "Katal",
523+
ARMEndpoint = "https://management.azure.com/",
524+
AzureKeyVaultDnsSuffix = "adminvault.local.azurestack.external",
525+
AzureKeyVaultServiceEndpointResourceId = "https://adminvault.local.azurestack.external"
526+
};
527+
528+
dict.Clear();
529+
dict = new Dictionary<string, object>
530+
{
531+
{ "ARMEndpoint", "https://management.azure.com/" },
532+
{ "AzureKeyVaultDnsSuffix", "adminvault.local.azurestack.external" },
533+
{ "AzureKeyVaultServiceEndpointResourceId", "https://adminvault.local.azurestack.external" }
534+
};
535+
536+
cmdlet2.SetBoundParameters(dict);
537+
cmdlet2.SetParameterSet("ARMEndpoint");
538+
cmdlet2.InvokeBeginProcessing();
539+
cmdlet2.ExecuteCmdlet();
540+
cmdlet2.InvokeEndProcessing();
541+
542+
profileClient = new RMProfileClient(AzureRmProfileProvider.Instance.GetProfile<AzureRmProfile>());
543+
env = AzureRmProfileProvider.Instance.Profile.Environments.First((e) => string.Equals(e.Name, "KaTaL", StringComparison.OrdinalIgnoreCase));
544+
Assert.Equal(env.Name, cmdlet.Name);
545+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultDnsSuffix), dict["AzureKeyVaultDnsSuffix"]);
546+
Assert.Equal(env.GetEndpoint(AzureEnvironment.Endpoint.AzureKeyVaultServiceEndpointResourceId), dict["AzureKeyVaultServiceEndpointResourceId"]);
547+
548+
var context = AzureRmProfileProvider.Instance.Profile.DefaultContext;
549+
Assert.NotNull(context);
550+
Assert.NotNull(context.Environment);
551+
Assert.Equal(context.Environment.Name, env.Name);
552+
Assert.Equal(context.Environment.AzureKeyVaultDnsSuffix, env.AzureKeyVaultDnsSuffix);
553+
Assert.Equal(context.Environment.AzureKeyVaultServiceEndpointResourceId, env.AzureKeyVaultServiceEndpointResourceId);
554+
}
466555
}
467556
}

0 commit comments

Comments
 (0)