private bool AddResourceProvider(Provider provider, Dictionary<string, List<string>> locationMap) { if (locationMap == null || provider == null) { return false; } var providersLocations = provider.ResourceTypes .CoalesceEnumerable() .SelectMany(type => type.Locations) .Distinct(StringComparer.InvariantCultureIgnoreCase); providersLocations.ForEach(location => { if (!locationMap.ContainsKey(location)) { locationMap[location] = new List<string>(); } if (!locationMap[location].Contains(provider.Namespace)) { locationMap[location].Add(provider.Namespace); } }); return true; }
public void GetsResourceProviderTests() { // setup return values const string RegisteredProviderNamespace = "Providers.Test1"; const string UnregisteredProviderNamespace = "Providers.Test2"; const string ResourceTypeName = "TestResource1"; var unregisteredProvider = new Provider { Namespace = UnregisteredProviderNamespace, RegistrationState = "Unregistered", ResourceTypes = new[] { new ProviderResourceType { Locations = new[] {"West US", "East US", "South US"}, Name = "TestResource2" } } }; var result = new ProviderListResult { NextLink = null, Providers = new[] { new Provider { Namespace = RegisteredProviderNamespace, RegistrationState = ResourcesClient.RegisteredStateName, ResourceTypes = new[] { new ProviderResourceType { Locations = new[] { "West US", "East US" }, Name = ResourceTypeName, } } }, unregisteredProvider, } }; this.providerOperationsMock .Setup(f => f.ListAsync(It.IsAny<ProviderListParameters>(), It.IsAny<CancellationToken>())) .Returns(() => Task.FromResult(result)); // 1. List only registered providers this.commandRuntimeMock .Setup(m => m.WriteObject(It.IsAny<object>())) .Callback((object obj) => { Assert.IsType<PSResourceProvider[]>(obj); var providers = (PSResourceProvider[])obj; Assert.Equal(1, providers.Length); var provider = providers.Single(); Assert.Equal(RegisteredProviderNamespace, provider.ProviderNamespace); Assert.Equal(ResourcesClient.RegisteredStateName, provider.RegistrationState); Assert.Equal(1, provider.ResourceTypes.Length); var resourceType = provider.ResourceTypes.Single(); Assert.Equal(ResourceTypeName, resourceType.ResourceTypeName); Assert.Equal(2, resourceType.Locations.Length); }); this.cmdlet.ParameterSetOverride = GetAzureProviderCmdlet.ListAvailableParameterSet; this.cmdlet.ExecuteCmdlet(); this.VerifyListCallPatternAndReset(); // 2. List all providers this.cmdlet.ListAvailable = true; this.commandRuntimeMock .Setup(m => m.WriteObject(It.IsAny<object>())) .Callback((object obj) => { Assert.IsType<PSResourceProvider[]>(obj); var providers = (PSResourceProvider[])obj; Assert.Equal(2, providers.Length); }); this.cmdlet.ExecuteCmdlet(); this.VerifyListCallPatternAndReset(); // 3. List a single provider by name this.cmdlet.ProviderNamespace = UnregisteredProviderNamespace; this.providerOperationsMock .Setup(f => f.GetAsync(It.IsAny<string>(), It.IsAny<CancellationToken>())) .Returns(() => Task.FromResult(new ProviderGetResult { Provider = unregisteredProvider, RequestId = "requestId", StatusCode = HttpStatusCode.OK, })); this.commandRuntimeMock .Setup(m => m.WriteObject(It.IsAny<object>())) .Callback((object obj) => { Assert.IsType<PSResourceProvider[]>(obj); var providers = (PSResourceProvider[])obj; Assert.Equal(1, providers.Length); var provider = providers.Single(); Assert.Equal(UnregisteredProviderNamespace, provider.ProviderNamespace); }); this.cmdlet.ParameterSetOverride = GetAzureProviderCmdlet.IndividualProviderParameterSet; this.cmdlet.ExecuteCmdlet(); this.VerifyGetCallPatternAndReset(); // 4. List only registered providers with location this.cmdlet.Location = "South US"; this.cmdlet.ListAvailable = false; this.cmdlet.ProviderNamespace = null; this.commandRuntimeMock .Setup(m => m.WriteObject(It.IsAny<object>())) .Callback((object obj) => { Assert.IsType<PSResourceProvider[]>(obj); var providers = (PSResourceProvider[])obj; Assert.Equal(0, providers.Length); }); this.cmdlet.ParameterSetOverride = GetAzureProviderCmdlet.ListAvailableParameterSet; this.cmdlet.ExecuteCmdlet(); this.VerifyListCallPatternAndReset(); // 5. List all providers this.cmdlet.ListAvailable = true; this.cmdlet.Location = "South US"; this.cmdlet.ProviderNamespace = null; this.commandRuntimeMock .Setup(m => m.WriteObject(It.IsAny<object>())) .Callback((object obj) => { var providers = (PSResourceProvider[])obj; Assert.Equal(0, providers.Length); var provider = providers.Single(); Assert.Equal(UnregisteredProviderNamespace, provider.ProviderNamespace); Assert.Equal(1, provider.ResourceTypes.Length); var resourceType = provider.ResourceTypes.Single(); Assert.Equal(ResourceTypeName, resourceType.ResourceTypeName); }); this.cmdlet.ExecuteCmdlet(); this.VerifyListCallPatternAndReset(); }
private bool IsProviderRegistered(Provider provider) { return string.Equals( ResourcesClient.RegisteredStateName, provider.RegistrationState, StringComparison.InvariantCultureIgnoreCase); }
public void RegisterResourceProviderTests() { const string ProviderName = "Providers.Test"; var provider = new Provider { Namespace = ProviderName, RegistrationState = ResourcesClient.RegisteredStateName, ResourceTypes = new[] { new ProviderResourceType { Locations = new[] {"West US", "East US"}, Name = "TestResource2" } } }; var registrationResult = new ProviderRegistionResult { Provider = provider, RequestId = "requestId", }; this.providerOperationsMock .Setup(client => client.RegisterAsync(It.IsAny<string>(), It.IsAny<CancellationToken>())) .Callback((string providerName, CancellationToken ignored) => Assert.Equal(ProviderName, providerName, StringComparer.InvariantCultureIgnoreCase)) .Returns(() => Task.FromResult(registrationResult)); this.providerOperationsMock .Setup(f => f.GetAsync(It.IsAny<string>(), It.IsAny<CancellationToken>())) .Returns(() => Task.FromResult(new ProviderGetResult { Provider = provider, RequestId = "requestId", StatusCode = HttpStatusCode.OK, })); this.cmdlet.Force = true; this.cmdlet.ProviderNamespace = ProviderName; // 1. register succeeds this.commandRuntimeMock .Setup(m => m.WriteObject(It.IsAny<object>())) .Callback((object obj) => { Assert.IsType<PSResourceProvider>(obj); var providerResult = (PSResourceProvider)obj; Assert.Equal(ProviderName, providerResult.ProviderNamespace, StringComparer.InvariantCultureIgnoreCase); }); registrationResult.StatusCode = HttpStatusCode.OK; this.cmdlet.ExecuteCmdlet(); this.VerifyCallPatternAndReset(succeeded: true); // 2. register fails w/ error registrationResult.StatusCode = HttpStatusCode.NotFound; registrationResult.Provider = null; try { this.cmdlet.ExecuteCmdlet(); Assert.False(true, "The cmdlet succeeded when it should have failed."); } catch (KeyNotFoundException) { this.VerifyCallPatternAndReset(succeeded: false); } }