private void ServiceAgentSettingsActionIsPassed()
        {
            var serviceAgentSettings = new ServiceAgentSettings();
            var services = new ServiceCollection();
            services.AddServiceAgents(json =>
            {
                json.FileName = Path.Combine(Directory.GetCurrentDirectory(), "_TestData/serviceagentconfig_1.json");
            }, settings =>
            {
                settings.Services["TestAgent"].Port = "15000";
            }, null,
            assembly: typeof(AddServiceAgentsTests).GetTypeInfo().Assembly);

            var registrations = services.Where(sd => sd.ServiceType == typeof(IConfigureOptions<ServiceAgentSettings>))
                                        .ToArray();

            Assert.Equal(1, registrations.Count());
            Assert.Equal(ServiceLifetime.Singleton, registrations[0].Lifetime);

            var configOptions = registrations[0].ImplementationInstance as IConfigureOptions<ServiceAgentSettings>;
            Assert.NotNull(configOptions);

            serviceAgentSettings = new ServiceAgentSettings();
            configOptions.Configure(serviceAgentSettings);

            var serviceSettings = serviceAgentSettings.Services["TestAgent"];
            Assert.NotNull(serviceSettings);

            Assert.Equal("15000", serviceSettings.Port);
        }
        private void ServiceAgentSettingsIsRegistratedAsSingleton()
        {
            var services = new ServiceCollection();
            services.AddSingleServiceAgent<TestAgent>(settings =>
            {
                settings.AuthScheme = AuthScheme.Bearer;
                settings.Host = "test.be";
                settings.Path = "api";
                settings.Port = "5000";
                settings.Scheme = HttpSchema.Http;
            });

            var registrations = services.Where(sd => sd.ServiceType == typeof(IConfigureOptions<ServiceAgentSettings>))
                                        .ToArray();

            Assert.Equal(1, registrations.Count());
            Assert.Equal(ServiceLifetime.Singleton, registrations[0].Lifetime);

            var configOptions = registrations[0].ImplementationInstance as IConfigureOptions<ServiceAgentSettings>;
            Assert.NotNull(configOptions);

            var serviceAgentSettings = new ServiceAgentSettings();
            configOptions.Configure(serviceAgentSettings);

            Assert.Equal(1, serviceAgentSettings.Services.Count);

            var serviceSettings = serviceAgentSettings.Services["TestAgent"];
            Assert.NotNull(serviceSettings);

            Assert.Equal(AuthScheme.Bearer, serviceSettings.AuthScheme);
            Assert.Equal("test.be", serviceSettings.Host);
            Assert.Equal("api", serviceSettings.Path);
            Assert.Equal("5000", serviceSettings.Port);
            Assert.Equal(HttpSchema.Http, serviceSettings.Scheme);
        }
        public ServiceAgentSettings ReadConfig(IConfigurationRoot config)
        {
            var serviceAgentSettings = new ServiceAgentSettings();

            var sections = config.GetChildren().ToDictionary(s => s.Key);

            if (sections.ContainsKey("Global"))
            {
                var globalSection = sections["Global"];

                globalSection.Bind(serviceAgentSettings);
                sections.Remove("Global");
            }

            foreach (var item in sections)
            {
                try
                {
                    var settings = new ServiceSettings();

                    item.Value.Bind(settings);

                    serviceAgentSettings.Services.Add(item.Key, settings);
                }
                catch (Exception)
                {
                }
            }

            return serviceAgentSettings;
        }
        private void HttpClientFactoryClientActionIsPassed()
        {
            var serviceAgentSettings = new ServiceAgentSettings();
            HttpClient passedClient = null;
            IServiceProvider passedServiceProvider = null;
            var services = new ServiceCollection();
            services.AddServiceAgents(s =>
            {
                s.FileName = Path.Combine(Directory.GetCurrentDirectory(), "_TestData/serviceagentconfig_1.json");
                s.Section = "TestAgent";
            }, (serviceProvider, client) =>
            {
                passedClient = client;
                passedServiceProvider = serviceProvider;
            },
            assembly: typeof(AddServiceAgentsTests).GetTypeInfo().Assembly
            );

            ///get the registrated HttpFactory
            var registration = services.Single(sd => sd.ServiceType == typeof(IHttpClientFactory));

            //Manually call the CreateClient on the factory (this normally happens when the service agent gets resolved
            var factory = registration.ImplementationFactory.Invoke(null) as HttpClientFactory;
            factory.CreateClient(serviceAgentSettings, new ServiceSettings { Host = "test.be" });

            Assert.NotNull(passedClient);
        }
        public ServiceAgentSettings ReadConfig(IConfigurationRoot config)
        {
            var serviceAgentSettings = new ServiceAgentSettings();

            var sections = config.GetChildren().ToDictionary(s => s.Key);

            if (sections.ContainsKey("Global"))
            {
                var globalSection = sections["Global"];

                globalSection.Bind(serviceAgentSettings);
                sections.Remove("Global");
            }

            foreach (var item in sections)
            {
                try
                {
                    var settings = new ServiceSettings();

                    item.Value.Bind(settings);

                    serviceAgentSettings.Services.Add(item.Key, settings);
                }
                catch (Exception)
                {
                }
            }

            return(serviceAgentSettings);
        }
コード例 #6
0
        public void ThrowExceptionWhenNonHttpsSchemeUsedWithBasicAuthentication()
        {
            var serviceAgentSettings = new ServiceAgentSettings { };
            var settings = new ServiceSettings { AuthScheme = AuthScheme.Basic, BasicAuthUserName = "******", BasicAuthPassword = "******", Scheme = HttpSchema.Http, Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings));

            Assert.Throws<ServiceAgentException>(() => clientFactory.CreateClient(serviceAgentSettings, settings));
        }
        private IServiceProvider CreateServiceProvider(ServiceAgentSettings settings)
        {
            var serviceProviderMock = new Mock<IServiceProvider>();

            if (settings != null)
                serviceProviderMock.Setup(p => p.GetService(typeof(IOptions<ServiceAgentSettings>))).Returns(Options.Create(settings));

            serviceProviderMock.Setup(p => p.GetService(typeof(IHttpClientFactory))).Returns(new HttpClientFactory(serviceProviderMock.Object));

            return serviceProviderMock.Object;
        }
コード例 #8
0
        public void CreateClientWithBasicAuthentication()
        {
            var serviceAgentSettings = new ServiceAgentSettings { };
            var settings = new ServiceSettings { AuthScheme = AuthScheme.Basic, BasicAuthUserName = "******", BasicAuthPassword = "******", Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings));

            var client = clientFactory.CreateClient(serviceAgentSettings, settings);

            Assert.NotNull(client);
            Assert.Equal(AuthScheme.Basic, client.DefaultRequestHeaders.Authorization.Scheme);
            Assert.Equal("QWxhZGRpbjpPcGVuU2VzYW1l", client.DefaultRequestHeaders.Authorization.Parameter);
        }
コード例 #9
0
        public void CreateClientWithOAuthClientCredentials()
        {
            var serviceAgentSettings = new ServiceAgentSettings { };
            var settings = new ServiceSettings { AuthScheme = AuthScheme.OAuthClientCredentials, OAuthClientId = "clientId", OAuthClientSecret = "clientSecret", Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings));

            var client = clientFactory.CreateClient(serviceAgentSettings, settings);

            Assert.NotNull(client);
            Assert.Equal(AuthScheme.Bearer, client.DefaultRequestHeaders.Authorization.Scheme);
            Assert.Equal("AccessToken", client.DefaultRequestHeaders.Authorization.Parameter);
        }
コード例 #10
0
        public void CreateDefaultClient()
        {
            var serviceAgentSettings = new ServiceAgentSettings();
            var settings = new ServiceSettings { Scheme = HttpSchema.Http, Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings));

            var client = clientFactory.CreateClient(serviceAgentSettings, settings);

            Assert.NotNull(client);
            Assert.Equal("http://test.be/api/", client.BaseAddress.AbsoluteUri);
            Assert.Equal("application/json", client.DefaultRequestHeaders.Accept.Single().MediaType);
            Assert.Null(client.DefaultRequestHeaders.Authorization);
        }
        private void HttpClientFactoryClientActionIsPassed()
        {
            var serviceAgentSettings = new ServiceAgentSettings();
            HttpClient passedClient = null;
            var services = new ServiceCollection();
            services.AddSingleServiceAgent<TestAgent>(settings => { }, (sp, client) => passedClient = client);

            ///get the registrated HttpFactory
            var registration = services.Single(sd => sd.ServiceType == typeof(IHttpClientFactory));

            //Manually call the CreateClient on the factory (this normally happens when the service agent gets resolved
            var factory = registration.ImplementationFactory.Invoke(null) as HttpClientFactory;
            factory.CreateClient(serviceAgentSettings, new ServiceSettings { Host = "test.be" });

            Assert.NotNull(passedClient);
        }
コード例 #12
0
        public HttpClient CreateClient(ServiceAgentSettings serviceAgentSettings, ServiceSettings settings)
        {
            var client = new HttpClient
            {
                BaseAddress = new Uri(settings.Url)
            };

            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            switch (settings.AuthScheme)
            {
                case AuthScheme.OAuthClientCredentials:
                    SetOAuthClientCredentialsAuthHeader(client, settings);
                    break;
                case AuthScheme.Bearer:
                    SetBearerAuthHeader(client);
                    break;
                case AuthScheme.Basic:
                    SetBasicAuthHeader(client, settings);
                    break;
                default:
                    break;
            }

            if (settings.Headers != null)
            {
                foreach (var header in settings?.Headers)
                {
                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
                }
            }

            if (AfterClientCreated != null)
                AfterClientCreated(_serviceProvider, client);

            return client;
        }
コード例 #13
0
        private IServiceProvider CreateServiceProvider(ServiceAgentSettings settings)
        {
            var serviceProviderMock = new Mock<IServiceProvider>();

            if (settings != null)
                serviceProviderMock.Setup(p => p.GetService(typeof(IOptions<ServiceAgentSettings>))).Returns(Options.Create(settings));

            var authContextMock = new Mock<IAuthContext>();
            authContextMock.Setup(c => c.UserToken).Returns("TokenValue");

            serviceProviderMock.Setup(p => p.GetService(typeof(IAuthContext))).Returns(authContextMock.Object);
            serviceProviderMock.Setup(p => p.GetService(typeof(IHttpClientFactory))).Returns(new HttpClientFactory(serviceProviderMock.Object));


            return serviceProviderMock.Object;
        }
コード例 #14
0
        public void AfterClientCreatedGetsRaised()
        {
            var serviceAgentSettings = new ServiceAgentSettings();
            var settings = new ServiceSettings { AuthScheme = AuthScheme.Bearer, Scheme = HttpSchema.Http, Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings));
            HttpClient passedClient = null;
            clientFactory.AfterClientCreated += (sp, c) => passedClient = c;

            clientFactory.CreateClient(serviceAgentSettings, settings);

            Assert.NotNull(passedClient);
        }
コード例 #15
0
        public void DoesntThrowExceptionWhenNonHttpsSchemeUsedWithBasicAuthenticationInDevelopmentEnvironment()
        {
            var serviceAgentSettings = new ServiceAgentSettings { };
            var settings = new ServiceSettings { AuthScheme = AuthScheme.Basic, BasicAuthUserName = "******", BasicAuthPassword = "******", Scheme = HttpSchema.Http, Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings, isDevelopmentEnvironment: true));

            clientFactory.CreateClient(serviceAgentSettings, settings);
        }
コード例 #16
0
        public void CreateClientWithHeaders()
        {
            var serviceAgentSettings = new ServiceAgentSettings();
            var headers = new Dictionary<string, string>()
            {
                { "api-key", "localapikey" },
                 { "X-Custom-Header", "customvalue" },
            };
            var settings = new ServiceSettings { Headers = headers, Scheme = HttpSchema.Http, Host = "test.be", Path = "api" };
            var clientFactory = new HttpClientFactory(CreateServiceProvider(settings));

            var client = clientFactory.CreateClient(serviceAgentSettings, settings);

            Assert.NotNull(client);
            Assert.Equal("localapikey", client.DefaultRequestHeaders.First(h => h.Key == "api-key").Value.First());
            Assert.Equal("customvalue", client.DefaultRequestHeaders.First(h => h.Key == "X-Custom-Header").Value.First());
        }
 private void ServicesIsInitialized()
 {
     var settings = new ServiceAgentSettings();
     Assert.NotNull(settings.Services);
 }
 private ServiceAgentSettings CreateServiceAgentSettings()
 {
     var settings = new ServiceAgentSettings();
     settings.Services.Add("GenericAgent", new ServiceSettings { Scheme = HttpSchema.Http, Host = "localhost" });
     return settings;
 }
        private void MultipleServiceAgents()
        {
            var services = new ServiceCollection();
            services.AddServiceAgents(settings =>
            {
                settings.FileName = Path.Combine(Directory.GetCurrentDirectory(), "_TestData/serviceagentconfig_2.json");
            },
            assembly: typeof(AddServiceAgentsTests).GetTypeInfo().Assembly);

            var registrations = services.Where(sd => sd.ServiceType == typeof(IConfigureOptions<ServiceAgentSettings>))
                                        .ToArray();

            var configOptions = registrations[0].ImplementationInstance as IConfigureOptions<ServiceAgentSettings>;
            Assert.NotNull(configOptions);

            var serviceAgentSettings = new ServiceAgentSettings();
            configOptions.Configure(serviceAgentSettings);

            Assert.Equal(2, serviceAgentSettings.Services.Count);

            var serviceSettings = serviceAgentSettings.Services["TestAgent"];
            Assert.NotNull(serviceSettings);

            Assert.Equal("None", serviceSettings.AuthScheme);
            Assert.Equal("test.be", serviceSettings.Host);
            Assert.Equal("api", serviceSettings.Path);
            Assert.Equal("5001", serviceSettings.Port);
            Assert.Equal(HttpSchema.Http, serviceSettings.Scheme);

            serviceSettings = serviceAgentSettings.Services["OtherTestAgent"];
            Assert.NotNull(serviceSettings);

            Assert.Equal(AuthScheme.Bearer, serviceSettings.AuthScheme);
            Assert.Equal("other.be", serviceSettings.Host);
            Assert.Equal("path", serviceSettings.Path);
            Assert.Equal("5002", serviceSettings.Port);
            Assert.Equal(HttpSchema.Https, serviceSettings.Scheme);
        }
        private void GenericAgentIsRegistratedAsScoped()
        {
            var services = new ServiceCollection();
            services.AddServiceAgents(settings =>
            {
                settings.FileName = Path.Combine(Directory.GetCurrentDirectory(), "_TestData/serviceagentconfig_4.json");
            },
            assembly: typeof(AddServiceAgentsTests).GetTypeInfo().Assembly);

            var registrations = services.Where(sd => sd.ServiceType == typeof(GenericAgent<>))
                                        .ToArray();

            Assert.Equal(1, registrations.Count());
            Assert.Equal(ServiceLifetime.Scoped, registrations[0].Lifetime);

            registrations = services.Where(sd => sd.ServiceType == typeof(IConfigureOptions<ServiceAgentSettings>))
                                        .ToArray();

            var configOptions = registrations[0].ImplementationInstance as IConfigureOptions<ServiceAgentSettings>;
            Assert.NotNull(configOptions);

            var serviceAgentSettings = new ServiceAgentSettings();
            configOptions.Configure(serviceAgentSettings);

            Assert.Equal(1, serviceAgentSettings.Services.Count);

            var serviceSettings = serviceAgentSettings.Services["GenericAgent"];
            Assert.NotNull(serviceSettings);
        }