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();
        }
Ejemplo n.º 3
0
 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);
            }
        }