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); }
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; }
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); }
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); }
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); }
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; }
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; }
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); }
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); }
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); }