public async Task GenerateProductApisTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateProductApisTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedServiceApisApiClient         = MockApisClient.GetMockedApiClientWithDefaultValues();
            var mockedServiceApisProductsApiClient = MockProductsClient.GetMockedApiClientWithDefaultValues();

            var productApisExtractor = new ProductApisExtractor(
                this.GetTestLogger <ProductApisExtractor>(),
                mockedServiceApisProductsApiClient,
                mockedServiceApisApiClient,
                new TemplateBuilder());

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                productApisExtractor: productApisExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var productApisTemplate = await extractorExecutor.GenerateProductApisTemplateAsync(
                singleApiName : It.IsAny <string>(),
                multipleApiNames : It.IsAny <List <string> >(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.ProductAPIs)).Should().BeTrue();

            productApisTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            productApisTemplate.TypedResources.ProductApis.Count().Should().Be(2);
            productApisTemplate.Resources.Count().Should().Be(2);

            var productApi1 = productApisTemplate.TypedResources.ProductApis.First();

            productApi1.ApiVersion.Should().Be(GlobalConstants.ApiVersion);
            productApi1.Name.Should().NotBeNullOrEmpty();
            productApi1.Type.Should().Be(ResourceTypeConstants.ProductApi);
            productApi1.Properties.DisplayName.Should().NotBeNullOrEmpty();
            productApi1.Properties.Description.Should().NotBeNullOrEmpty();

            var productApi2 = productApisTemplate.TypedResources.ProductApis.Last();

            productApi2.ApiVersion.Should().Be(GlobalConstants.ApiVersion);
            productApi2.Name.Should().NotBeNullOrEmpty();
            productApi2.Type.Should().Be(ResourceTypeConstants.ProductApi);
            productApi2.Properties.DisplayName.Should().NotBeNullOrEmpty();
            productApi2.Properties.Description.Should().NotBeNullOrEmpty();
            productApi2.DependsOn.Should().NotBeNullOrEmpty();
        }
コード例 #2
0
        public async Task GenerateBackendTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateBackendTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockPolicyExtractor = new Mock <IPolicyExtractor>(MockBehavior.Strict);

            mockPolicyExtractor
            .Setup(x => x.GetCachedPolicyContent(It.IsAny <PolicyTemplateResource>(), It.IsAny <string>()))
            .Returns((PolicyTemplateResource policy, string _) => $"mock-response-from-policy-{policy.Name}");

            var mockBackendClient = MockBackendClient.GetMockedApiClientWithDefaultValues();
            var backendExtractor  = new BackendExtractor(
                this.GetTestLogger <BackendExtractor>(),
                new TemplateBuilder(),
                mockPolicyExtractor.Object,
                mockBackendClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                backendExtractor: backendExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var backendTemplate = await extractorExecutor.GenerateBackendTemplateAsync(
                singleApiName : null,
                new List <PolicyTemplateResource>(),
                new List <NamedValueTemplateResource>(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.Backends)).Should().BeTrue();

            backendTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            backendTemplate.Parameters.Should().ContainKey(ParameterNames.BackendSettings);

            backendTemplate.TypedResources.Backends.Should().HaveCount(1);
            backendTemplate.Resources.Should().HaveCount(1);

            backendTemplate.TypedResources.Backends.First().Type.Should().Be(ResourceTypeConstants.Backend);
            backendTemplate.TypedResources.Backends.First().Name.Should().Contain(MockBackendClient.BackendName);

            var backendProperties = backendTemplate.TypedResources.Backends.First().Properties;

            backendProperties.Should().NotBeNull();
            backendProperties.Url.Should().Contain(ParameterNames.BackendSettings);
            backendProperties.Protocol.Should().Contain(ParameterNames.BackendSettings);
        }
        public async Task GenerateApiVersionSetTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateApiVersionSetTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedApiVersionSetClient = MockApiVersionSetClient.GetMockedApiClientWithDefaultValues();
            var apiVersionSetExtractor    = new ApiVersionSetExtractor(
                this.GetTestLogger <ApiVersionSetExtractor>(),
                new TemplateBuilder(),
                mockedApiVersionSetClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                apiVersionSetExtractor: apiVersionSetExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var apiVersionSetTemplate = await extractorExecutor.GenerateApiVersionSetTemplateAsync(
                singleApiName : It.IsAny <string>(),
                currentTestDirectory,
                apiTemplateResources : It.IsAny <List <ApiTemplateResource> >());

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.ApiVersionSets)).Should().BeTrue();

            apiVersionSetTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);

            apiVersionSetTemplate.TypedResources.ApiVersionSets.Count().Should().Be(2);
            apiVersionSetTemplate.Resources.Count().Should().Be(2);

            (apiVersionSetTemplate.Resources[0].Name.Contains(MockApiVersionSetClient.ApiVersionSetName1) ||
             apiVersionSetTemplate.Resources[1].Name.Contains(MockApiVersionSetClient.ApiVersionSetName1)).Should().BeTrue();
            (apiVersionSetTemplate.Resources[0].Name.Contains(MockApiVersionSetClient.ApiVersionSetName2) ||
             apiVersionSetTemplate.Resources[1].Name.Contains(MockApiVersionSetClient.ApiVersionSetName2)).Should().BeTrue();

            foreach (var templateResource in apiVersionSetTemplate.TypedResources.ApiVersionSets)
            {
                templateResource.Type.Should().Be(ResourceTypeConstants.ApiVersionSet);
                templateResource.Properties.Should().NotBeNull();

                templateResource.Properties.DisplayName.Should().NotBeNullOrEmpty();
                templateResource.Properties.Description.Should().NotBeNullOrEmpty();
                templateResource.Properties.VersionHeaderName.Should().NotBeNullOrEmpty();
                templateResource.Properties.VersioningScheme.Should().NotBeNullOrEmpty();
                templateResource.Properties.VersionQueryName.Should().NotBeNullOrEmpty();
            }
        }
コード例 #4
0
        public async Task GenerateAuthorizationServerTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateAuthorizationServerTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedAuthorizationServerClient = MockAuthorizationServerClient.GetMockedApiClientWithDefaultValues();
            var authorizationServerExtractor    = new AuthorizationServerExtractor(
                this.GetTestLogger <AuthorizationServerExtractor>(),
                new TemplateBuilder(),
                mockedAuthorizationServerClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                authorizationServerExtractor: authorizationServerExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var authorizationServerTemplate = await extractorExecutor.GenerateAuthorizationServerTemplateAsync(
                singleApiName : It.IsAny <string>(),
                currentTestDirectory,
                apiTemplateResources : It.IsAny <List <ApiTemplateResource> >());

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.AuthorizationServers)).Should().BeTrue();

            authorizationServerTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            authorizationServerTemplate.TypedResources.AuthorizationServers.Count().Should().Be(1);
            authorizationServerTemplate.Resources.Count().Should().Be(1);

            var authorizationResource = authorizationServerTemplate.TypedResources.AuthorizationServers.First();

            authorizationResource.Name.Should().Contain(MockAuthorizationServerClient.AuthorizationServerName1);
            authorizationResource.Type.Should().Contain(ResourceTypeConstants.AuthorizationServer);
            authorizationResource.Properties.Should().NotBeNull();

            authorizationResource.Properties.AuthorizationMethods.Any(x => x.Contains(MockAuthorizationServerClient.AuthorizationServerName1)).Should().BeTrue();
            authorizationResource.Properties.ClientAuthenticationMethod.Any(x => x.Contains(MockAuthorizationServerClient.AuthorizationServerName1)).Should().BeTrue();
            authorizationResource.Properties.DisplayName.Should().Contain(MockAuthorizationServerClient.AuthorizationServerName1);
            authorizationResource.Properties.TokenBodyParameters.Should().NotBeNull();
            authorizationResource.Properties.TokenEndpoint.Should().NotBeNull();
            authorizationResource.Properties.ClientRegistrationEndpoint.Should().NotBeNull();
            authorizationResource.Properties.AuthorizationEndpoint.Should().NotBeNull();
            authorizationResource.Properties.GrantTypes.Should().NotBeNullOrEmpty();
            authorizationResource.Properties.ClientId.Should().NotBeNullOrEmpty();
        }
コード例 #5
0
        public async Task GenerateGatewayApisTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateGatewayApisTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedGatewayClient = MockGatewayClient.GetMockedApiClientWithDefaultValues();
            var mockedApisClient    = MockApisClient.GetMockedApiClientWithDefaultValues();

            var gatewayApiExtractor = new GatewayApiExtractor(
                this.GetTestLogger <GatewayApiExtractor>(),
                new TemplateBuilder(),
                mockedGatewayClient,
                mockedApisClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                gatewayApiExtractor: gatewayApiExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var gatewayApiTemplate = await extractorExecutor.GenerateGatewayApiTemplateAsync(
                It.IsAny <string>(),
                It.IsAny <List <string> >(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.GatewayApi)).Should().BeTrue();

            gatewayApiTemplate.Should().NotBeNull();
            gatewayApiTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            gatewayApiTemplate.TypedResources.GatewayApis.Count().Should().Be(4);
            gatewayApiTemplate.Resources.Count().Should().Be(4);

            var gatewayResources = gatewayApiTemplate.TypedResources.GatewayApis;

            gatewayResources.Where(x => x.Name.Contains(MockGatewayClient.GatewayName1)).Count().Should().Be(2);
            gatewayResources.Where(x => x.Name.Contains(MockGatewayClient.GatewayName2)).Count().Should().Be(2);

            gatewayResources.All(x => x.ApiVersion == GlobalConstants.ApiVersion).Should().BeTrue();
            gatewayResources.All(x => x.Type == ResourceTypeConstants.GatewayApi).Should().BeTrue();
            gatewayResources.All(x => x.Properties is not null).Should().BeTrue();
        }
コード例 #6
0
        public async Task OutputFiles_HaveProperFieldsOrder()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(OutputFiles_HaveProperFieldsOrder));

            // it doesn't matter what template to check - calling policy extractor as an example
            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedPolicyApiClient = MockPolicyClient.GetMockedApiClientWithDefaultValues();
            var policyExtractor       = new PolicyExtractor(this.GetTestLogger <PolicyExtractor>(), mockedPolicyApiClient, new TemplateBuilder());

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                policyExtractor: policyExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var policyTemplate = await extractorExecutor.GeneratePolicyTemplateAsync(currentTestDirectory);

            // assert
            var outputGlobalServicePolicyFilePath = Path.Combine(currentTestDirectory, extractorParameters.FileNames.GlobalServicePolicy);

            File.Exists(outputGlobalServicePolicyFilePath).Should().BeTrue();

            var policyTemplateText = await File.ReadAllTextAsync(outputGlobalServicePolicyFilePath);

            var policyTemplateJson = JToken.Parse(policyTemplateText);

            var resourcesSection = policyTemplateJson["resources"].First;

            resourcesSection.Should().NotBeNull();

            var resourcesSectionText = resourcesSection.ToString();

            var apiVersionFieldPosition = resourcesSectionText.IndexOf("\"apiVersion\"");
            var typeFieldPosition       = resourcesSectionText.IndexOf("\"type\"");
            var nameFieldPosition       = resourcesSectionText.IndexOf("\"name\"");
            var propertiesFieldPosition = resourcesSectionText.IndexOf("\"properties\"");

            apiVersionFieldPosition.Should().BeLessThan(nameFieldPosition);
            typeFieldPosition.Should().BeLessThan(nameFieldPosition);
            nameFieldPosition.Should().BeLessThan(propertiesFieldPosition);
        }
        public async Task GenerateTagApiTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateTagApiTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedTagClient = MockTagClient.GetMockedApiClientWithDefaultValues();
            var mockedApiClient = MockApisClient.GetMockedApiClientWithDefaultValues();
            var tagApiExtractor = new TagApiExtractor(
                this.GetTestLogger <TagApiExtractor>(),
                new TemplateBuilder(),
                mockedApiClient,
                mockedTagClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                tagApiExtractor: tagApiExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var tagApiTemplate = await extractorExecutor.GenerateTagApiTemplateAsync(
                It.IsAny <string>(),
                It.IsAny <List <string> >(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.TagApi)).Should().BeTrue();

            tagApiTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            tagApiTemplate.TypedResources.Tags.Count().Should().Be(4);
            tagApiTemplate.Resources.Count().Should().Be(4);

            var resources = tagApiTemplate.TypedResources;

            resources.Tags.Any(x => x.Name.Contains(MockTagClient.TagName1)).Should().BeTrue();
            resources.Tags.Any(x => x.Name.Contains(MockTagClient.TagName2)).Should().BeTrue();
            resources.Tags.All(x => x.ApiVersion == GlobalConstants.ApiVersion).Should().BeTrue();
            resources.Tags.All(x => !x.DependsOn.IsNullOrEmpty() && !string.IsNullOrEmpty(x.DependsOn.First())).Should().BeTrue();
        }
コード例 #8
0
        public async Task GenerateLoggersTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateLoggersTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedLoggerClient     = MockLoggerClient.GetMockedClientWithDiagnosticDependentValues();
            var mockedDiagnosticClient = MockDiagnosticClient.GetMockedApiClientWithDefaultValues();
            var loggerExtractor        = new LoggerExtractor(
                this.GetTestLogger <LoggerExtractor>(),
                new TemplateBuilder(),
                mockedLoggerClient,
                mockedDiagnosticClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                loggerExtractor: loggerExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var loggerTemplate = await extractorExecutor.GenerateLoggerTemplateAsync(
                new List <string> {
                MockApiName
            },
                It.IsAny <List <PolicyTemplateResource> >(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.Loggers)).Should().BeTrue();

            loggerTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            loggerTemplate.TypedResources.Loggers.Should().HaveCount(1);
            loggerTemplate.Resources.Should().NotBeNullOrEmpty();

            loggerTemplate.TypedResources.Loggers.First().Name.Should().Contain(MockLoggerClient.LoggerName);
            loggerTemplate.TypedResources.Loggers.First().Properties.LoggerType.Should().Be(MockDiagnosticClient.DefaultDiagnosticName);
        }
        public async Task GeneratePolicyTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GeneratePolicyTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedPolicyApiClient = MockPolicyClient.GetMockedApiClientWithDefaultValues();
            var policyExtractor       = new PolicyExtractor(this.GetTestLogger <PolicyExtractor>(), mockedPolicyApiClient, new TemplateBuilder());

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                policyExtractor: policyExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var policyTemplate = await extractorExecutor.GeneratePolicyTemplateAsync(currentTestDirectory);

            // policy template files exists
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.GlobalServicePolicy)).Should().BeTrue();
            // global service policy.xml
            File.Exists(Path.Combine(currentTestDirectory, PolicyExtractor.PoliciesDirectoryName, PolicyExtractor.GlobalServicePolicyFileName)).Should().BeTrue();

            policyTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            policyTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLBaseUrl);
            policyTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLSasToken);
            policyTemplate.TypedResources.Should().NotBeNull();
            policyTemplate.Resources.Count().Should().Be(1);

            var policyResource = policyTemplate.TypedResources.GlobalServicePolicy;

            policyResource.ApiVersion.Should().Be(GlobalConstants.ApiVersion);
            policyResource.Name.Should().NotBeNullOrEmpty();
            policyResource.Type.Should().Be(ResourceTypeConstants.GlobalServicePolicy);
            policyResource.Properties.Format.Should().NotBeNullOrEmpty();
            policyResource.Properties.PolicyContent.Should().NotBeNullOrEmpty();
        }
コード例 #10
0
        public async Task GenerateGroupsTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateGroupsTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedGroupsClient = MockGroupsClient.GetMockedApiClientWithDefaultValues();
            var groupExtractor     = new GroupExtractor(this.GetTestLogger <GroupExtractor>(), new TemplateBuilder(), mockedGroupsClient);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                groupExtractor: groupExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var groupTemplate = await extractorExecutor.GenerateGroupsTemplateAsync(currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.Groups)).Should().BeTrue();

            groupTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            groupTemplate.TypedResources.Groups.Count().Should().Be(2);
            groupTemplate.Resources.Count().Should().Be(2);

            (groupTemplate.Resources[0].Name.Contains(MockGroupsClient.GroupName1) || groupTemplate.Resources[1].Name.Contains(MockGroupsClient.GroupName1)).Should().BeTrue();
            (groupTemplate.Resources[0].Name.Contains(MockGroupsClient.GroupName2) || groupTemplate.Resources[1].Name.Contains(MockGroupsClient.GroupName2)).Should().BeTrue();

            foreach (var templateResource in groupTemplate.TypedResources.Groups)
            {
                templateResource.Type.Should().Be(ResourceTypeConstants.Group);
                templateResource.Should().NotBeNull();
                templateResource.Properties.Should().NotBeNull();
            }
        }
コード例 #11
0
        public async Task GeneratePolicyTemplates_GetCachedPolicy_FoundAndReturnedCorrectly()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GeneratePolicyTemplates_GetCachedPolicy_FoundAndReturnedCorrectly));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedPolicyApiClient = MockPolicyClient.GetMockedApiClientWithDefaultValues();
            var policyExtractor       = new PolicyExtractor(this.GetTestLogger <PolicyExtractor>(), mockedPolicyApiClient, new TemplateBuilder());

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                policyExtractor: policyExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            var policyTemplate = await extractorExecutor.GeneratePolicyTemplateAsync(currentTestDirectory);

            File.Exists(Path.Combine(currentTestDirectory, PolicyExtractor.PoliciesDirectoryName, PolicyExtractor.GlobalServicePolicyFileName)).Should().BeTrue();

            // try get global service policy from cache using full path of policy stored in object
            var globalServicePolicyContent1 = policyExtractor.GetCachedPolicyContent(policyTemplate.TypedResources.GlobalServicePolicy, currentTestDirectory);

            globalServicePolicyContent1.Should().Be(MockPolicyClient.GlobalPolicyContent);

            // try get global service policy from cache using path retrieving
            policyTemplate.TypedResources.GlobalServicePolicy.Properties.PolicyContentFileFullPath = string.Empty;
            var globalServicePolicyContent2 = policyExtractor.GetCachedPolicyContent(policyTemplate.TypedResources.GlobalServicePolicy, currentTestDirectory);

            globalServicePolicyContent2.Should().Be(MockPolicyClient.GlobalPolicyContent);
        }
コード例 #12
0
        public async Task GenerateProductsTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateProductsTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockedPolicyClient    = MockPolicyClient.GetMockedApiClientWithDefaultValues();
            var mockedPolicyExtractor = new PolicyExtractor(this.GetTestLogger <PolicyExtractor>(), mockedPolicyClient, new TemplateBuilder());

            var mockedApisClient     = MockApisClient.GetMockedApiClientWithDefaultValues();
            var mockedProductsClient = MockProductsClient.GetMockedApiClientWithDefaultValues();
            var mockedGroupsClient   = MockGroupsClient.GetMockedApiClientWithDefaultValues();
            var mockedTagClient      = MockTagClient.GetMockedApiClientWithDefaultValues();

            var productExtractor = new ProductExtractor(
                this.GetTestLogger <ProductExtractor>(),
                mockedPolicyExtractor,
                mockedProductsClient,
                mockedGroupsClient,
                mockedTagClient,
                new TemplateBuilder());

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                productExtractor: productExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var productTemplate = await extractorExecutor.GenerateProductsTemplateAsync(
                singleApiName : It.IsAny <string>(),
                currentTestDirectory,
                productApiResources : It.IsAny <List <ProductApiTemplateResource> >());

            // assert

            // generated product policy files
            var policyFileName = string.Format(PolicyExtractor.ProductPolicyFileNameFormat, MockProductsClient.ProductName1);

            File.Exists(Path.Combine(currentTestDirectory, PolicyExtractor.PoliciesDirectoryName, policyFileName)).Should().BeTrue();

            // generated product template files
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.Products)).Should().BeTrue();

            var templateParameters = productTemplate.Parameters;

            templateParameters.Should().ContainKey(ParameterNames.ApimServiceName);
            templateParameters.Should().ContainKey(ParameterNames.PolicyXMLBaseUrl);
            templateParameters.Should().ContainKey(ParameterNames.PolicyXMLSasToken);
            templateParameters.Should().ContainKey(ParameterNames.ServiceUrl);
            templateParameters.Should().ContainKey(ParameterNames.ApiLoggerId);

            var templateResources = productTemplate.Resources;

            // product resource
            var productResource = templateResources.First(x => x.Type == ResourceTypeConstants.Product);

            productResource.Name.Should().Contain(MockProductsClient.ProductName1);

            // group resources
            var groupResources = templateResources.Where(x => x.Type == ResourceTypeConstants.ProductGroup).ToList();

            groupResources.Should().HaveCount(2);
            (groupResources[0].Name.Contains(MockGroupsClient.GroupName1) || groupResources[1].Name.Contains(MockGroupsClient.GroupName1)).Should().BeTrue();
            (groupResources[0].Name.Contains(MockGroupsClient.GroupName2) || groupResources[1].Name.Contains(MockGroupsClient.GroupName2)).Should().BeTrue();

            // policy resources
            var policyResource = templateResources.First(x => x.Type == ResourceTypeConstants.ProductPolicy);

            policyResource.Name.Should().Contain(MockProductsClient.ProductName1);

            // tag resources
            var tagResources = templateResources.Where(x => x.Type == ResourceTypeConstants.ProductTag).ToList();

            tagResources.Should().HaveCount(2);
            (tagResources[0].Name.Contains(MockTagClient.TagName1) || tagResources[1].Name.Contains(MockTagClient.TagName1)).Should().BeTrue();
            (tagResources[0].Name.Contains(MockTagClient.TagName2) || tagResources[1].Name.Contains(MockTagClient.TagName2)).Should().BeTrue();
        }
コード例 #13
0
        public async Task GenerateMasterTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateMasterTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var masterTemplateExtractor = new MasterTemplateExtractor(
                this.GetTestLogger <MasterTemplateExtractor>(),
                new TemplateBuilder());

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                masterTemplateExtractor: masterTemplateExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            var tagTemplateResources = new TagTemplateResources()
            {
                Tags = new()
                {
                    new TagTemplateResource()
                    {
                        Name       = "my-tag",
                        Properties = new() { DisplayName = "my-display-tag" }
                    }
                }
            };

            // act
            var masterTemplate = await extractorExecutor.GenerateMasterTemplateAsync(
                currentTestDirectory,
                tagTemplateResources : tagTemplateResources);

            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.LinkedMaster)).Should().BeTrue();

            masterTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.LinkedTemplatesBaseUrl);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.LinkedTemplatesSasToken);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.LinkedTemplatesUrlQueryString);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.ServiceUrl);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.NamedValues);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.ApiLoggerId);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.LoggerResourceId);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.NamedValueKeyVaultSecrets);
            masterTemplate.Parameters.Should().ContainKey(ParameterNames.BackendSettings);

            masterTemplate.TypedResources.DeploymentResources.Should().HaveCount(1);
            masterTemplate.Resources.Should().HaveCount(1);

            var tagDeployment = masterTemplate.TypedResources.DeploymentResources.First();

            tagDeployment.Type.Should().Be(ResourceTypeConstants.ArmDeployments);
            tagDeployment.Properties.Should().NotBeNull();
        }
    }
コード例 #14
0
 public ExtractApplicationCommand(ILogger <ExtractApplicationCommand> logger, ExtractorExecutor extractorExecutor) : base()
 {
     this.logger            = logger;
     this.extractorExecutor = extractorExecutor;
 }
コード例 #15
0
        public async Task GenerateNamedValuesTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateNamedValuesTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false,
                toNotIncludeNamedValue: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            var mockPolicyExtractor = new Mock <IPolicyExtractor>(MockBehavior.Strict);

            mockPolicyExtractor
            .Setup(x => x.GetCachedPolicyContent(It.IsAny <PolicyTemplateResource>(), It.IsAny <string>()))
            .Returns((PolicyTemplateResource policy, string _) => $"mock-response-from-policy-{policy.Name}");

            var mockBackendExtractor = new Mock <IBackendExtractor>(MockBehavior.Strict);

            mockBackendExtractor
            .Setup(x => x.IsNamedValueUsedInBackends(
                       It.IsAny <string>(),
                       It.IsAny <List <PolicyTemplateResource> >(),
                       It.IsAny <string>(),
                       It.IsAny <string>(),
                       It.IsAny <ExtractorParameters>(),
                       It.IsAny <string>()))
            .ReturnsAsync(false);

            var mockedNamedValuesClient = MockNamedValuesClient.GetMockedApiClientWithDefaultValues();
            var namedValuesExtractor    = new NamedValuesExtractor(
                this.GetTestLogger <NamedValuesExtractor>(),
                new TemplateBuilder(),
                mockedNamedValuesClient,
                mockPolicyExtractor.Object,
                mockBackendExtractor.Object);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                namedValuesExtractor: namedValuesExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var namedValuesTemplate = await extractorExecutor.GenerateNamedValuesTemplateAsync(
                "some-single-api",
                new List <PolicyTemplateResource>()
            {
                new PolicyTemplateResource {
                    Name = MockNamedValuesClient.NamedValueName
                },
                new PolicyTemplateResource {
                    Name = MockNamedValuesClient.NamedValueDisplayName
                }
            },
                It.IsAny <List <LoggerTemplateResource> >(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.NamedValues)).Should().BeTrue();

            namedValuesTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            namedValuesTemplate.Parameters.Should().ContainKey(ParameterNames.NamedValues);
            namedValuesTemplate.Parameters.Should().ContainKey(ParameterNames.NamedValueKeyVaultSecrets);

            namedValuesTemplate.TypedResources.NamedValues.Should().HaveCount(1);
            namedValuesTemplate.Resources.Should().HaveCount(1);

            namedValuesTemplate.TypedResources.NamedValues.First().Type.Should().Be(ResourceTypeConstants.NamedValues);
            namedValuesTemplate.TypedResources.NamedValues.First().Name.Should().Contain(MockNamedValuesClient.NamedValueName);
            namedValuesTemplate.TypedResources.NamedValues.First().Properties.DisplayName.Should().Contain(MockNamedValuesClient.NamedValueDisplayName);
        }
コード例 #16
0
        public async Task GenerateApiTemplates_ProperlyLaysTheInformation()
        {
            // arrange
            var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateApiTemplates_ProperlyLaysTheInformation));

            var extractorConfig = this.GetMockedExtractorConsoleAppConfiguration(
                splitApis: false,
                apiVersionSetName: string.Empty,
                multipleApiNames: string.Empty,
                includeAllRevisions: false);
            var extractorParameters = new ExtractorParameters(extractorConfig);

            // mocked clients
            var mockedApiClient          = MockApisClient.GetMockedApiClientWithDefaultValues();
            var mockedProductClient      = MockProductsClient.GetMockedApiClientWithDefaultValues();
            var mockedApiSchemaClient    = MockApiSchemaClient.GetMockedApiClientWithDefaultValues();
            var mockedPolicyClient       = MockPolicyClient.GetMockedApiClientWithDefaultValues();
            var mockedTagClient          = MockTagClient.GetMockedApiClientWithDefaultValues();
            var mockedApiOperationClient = MockApiOperationClient.GetMockedApiClientWithDefaultValues();
            var mockedDiagnosticClient   = MockDiagnosticClient.GetMockedClientWithApiDependentValues();

            // mocked extractors
            var mockedDiagnosticExtractor   = new DiagnosticExtractor(this.GetTestLogger <DiagnosticExtractor>(), mockedDiagnosticClient);
            var mockedApiSchemaExtractor    = new ApiSchemaExtractor(this.GetTestLogger <ApiSchemaExtractor>(), mockedApiSchemaClient);
            var mockedPolicyExtractor       = new PolicyExtractor(this.GetTestLogger <PolicyExtractor>(), mockedPolicyClient, new TemplateBuilder());
            var mockedProductApisExtractor  = new ProductApisExtractor(this.GetTestLogger <ProductApisExtractor>(), mockedProductClient, mockedApiClient, new TemplateBuilder());
            var mockedTagExtractor          = new TagExtractor(this.GetTestLogger <TagExtractor>(), mockedTagClient, new TemplateBuilder());
            var mockedApiOperationExtractor = new ApiOperationExtractor(this.GetTestLogger <ApiOperationExtractor>(), mockedApiOperationClient);

            var apiExtractor = new ApiExtractor(
                this.GetTestLogger <ApiExtractor>(),
                new TemplateBuilder(),
                mockedApiClient,
                mockedDiagnosticExtractor,
                mockedApiSchemaExtractor,
                mockedPolicyExtractor,
                mockedProductApisExtractor,
                mockedTagExtractor,
                mockedApiOperationExtractor);

            var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
                this.GetTestLogger <ExtractorExecutor>(),
                apiExtractor: apiExtractor);

            extractorExecutor.SetExtractorParameters(extractorParameters);

            // act
            var apiTemplate = await extractorExecutor.GenerateApiTemplateAsync(
                singleApiName : It.IsAny <string>(),
                multipleApiNames : It.IsAny <List <string> >(),
                currentTestDirectory);

            // assert
            File.Exists(Path.Combine(currentTestDirectory, apiTemplate.TypedResources.FileName)).Should().BeTrue();
            Directory.GetFiles(Path.Combine(currentTestDirectory, PolicyExtractor.PoliciesDirectoryName)).Count().Should().Be(4);

            apiTemplate.Parameters.Should().NotBeNull();
            apiTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
            apiTemplate.Parameters.Should().ContainKey(ParameterNames.ServiceUrl);
            apiTemplate.Parameters.Should().ContainKey(ParameterNames.ApiLoggerId);
            apiTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLBaseUrl);
            apiTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLSasToken);
            apiTemplate.Resources.Count().Should().Be(23);

            // apis
            apiTemplate.TypedResources.Apis.Count().Should().Be(2);
            apiTemplate.TypedResources.Apis.All(x => x.Type == ResourceTypeConstants.API).Should().BeTrue();
            apiTemplate.TypedResources.Apis.All(x => x.Properties is not null).Should().BeTrue();

            // api schemas
            apiTemplate.TypedResources.ApiSchemas.Count().Should().Be(2);
            apiTemplate.TypedResources.ApiSchemas.All(x => x.Type == ResourceTypeConstants.APISchema).Should().BeTrue();
            apiTemplate.TypedResources.ApiSchemas.All(x => x.Properties is not null).Should().BeTrue();

            // diagnostics
            apiTemplate.TypedResources.Diagnostics.Count().Should().Be(3);
            apiTemplate.TypedResources.Diagnostics.All(x => x.Type == ResourceTypeConstants.APIServiceDiagnostic || x.Type == ResourceTypeConstants.APIDiagnostic).Should().BeTrue();
            apiTemplate.TypedResources.Diagnostics.All(x => x.Properties is not null).Should().BeTrue();

            // tags
            apiTemplate.TypedResources.Tags.Count().Should().Be(4);
            apiTemplate.TypedResources.Tags.All(x => x.Type == ResourceTypeConstants.ProductTag).Should().BeTrue();

            // api products
            apiTemplate.TypedResources.ApiProducts.Count().Should().Be(2);
            apiTemplate.TypedResources.ApiProducts.All(x => x.Type == ResourceTypeConstants.ProductApi).Should().BeTrue();
            apiTemplate.TypedResources.ApiProducts.All(x => x.Properties is not null).Should().BeTrue();

            // api policies
            apiTemplate.TypedResources.ApiPolicies.Count().Should().Be(2);
            apiTemplate.TypedResources.ApiPolicies.All(x => x.Properties is not null).Should().BeTrue();

            // api operations
            apiTemplate.TypedResources.ApiOperations.Count().Should().Be(2);
            apiTemplate.TypedResources.ApiOperations.All(x => x.Type == ResourceTypeConstants.APIOperation).Should().BeTrue();
            apiTemplate.TypedResources.ApiOperations.All(x => x.Properties is not null).Should().BeTrue();
            apiTemplate.TypedResources.ApiOperations.SelectMany(x => x.DependsOn).Any(x => x.Contains($"'{ResourceTypeConstants.API}'")).Should().BeTrue();
            apiTemplate.TypedResources.ApiOperations.SelectMany(x => x.DependsOn).Any(x => x.Contains($"'{ResourceTypeConstants.APIOperation}'")).Should().BeFalse();

            // api operations policies
            apiTemplate.TypedResources.ApiOperationsPolicies.Count().Should().Be(2);
            apiTemplate.TypedResources.ApiOperations.All(x => x.Properties is not null).Should().BeTrue();

            // api operations tags
            apiTemplate.TypedResources.ApiOperationsPolicies.Count().Should().Be(2);
            apiTemplate.TypedResources.ApiOperations.All(x => x.Properties is not null).Should().BeTrue();
        }