File: ServiceDiscoveryDnsServiceCollectionExtensionsTests.cs
Web Access
Project: src\test\Libraries\Microsoft.Extensions.ServiceDiscovery.Dns.Tests\Microsoft.Extensions.ServiceDiscovery.Dns.Tests.csproj (Microsoft.Extensions.ServiceDiscovery.Dns.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
 
namespace Microsoft.Extensions.ServiceDiscovery.Dns.Tests;
 
public class ServiceDiscoveryDnsServiceCollectionExtensionsTests
{
    [Fact]
    public void AddDnsServiceEndpointProviderShouldRegisterDependentServices()
    {
        var services = new ServiceCollection();
        services.AddDnsServiceEndpointProvider();
 
        using var serviceProvider = services.BuildServiceProvider(true);
 
        var exception = Record.Exception(() => serviceProvider.GetServices<IServiceEndpointProviderFactory>());
        Assert.Null(exception);
    }
 
    [Fact]
    public void AddDnsSrvServiceEndpointProviderShouldRegisterDependentServices()
    {
        var services = new ServiceCollection();
        services.AddDnsSrvServiceEndpointProvider();
 
        using var serviceProvider = services.BuildServiceProvider(true);
 
        var exception = Record.Exception(() => serviceProvider.GetServices<IServiceEndpointProviderFactory>());
        Assert.Null(exception);
    }
 
    [Fact]
    public void ConfigureDnsResolverShouldThrowWhenServersIsNull()
    {
        var services = new ServiceCollection();
        services.ConfigureDnsResolver(options => options.Servers = null!);
 
        using var serviceProvider = services.BuildServiceProvider();
        var options = serviceProvider.GetRequiredService<IOptions<DnsResolverOptions>>();
 
        var exception = Assert.Throws<OptionsValidationException>(() => options.Value);
        Assert.Equal("Servers must not be null.", exception.Message);
    }
 
    [Fact]
    public void ConfigureDnsResolverShouldThrowWhenMaxAttemptsIsZero()
    {
        var services = new ServiceCollection();
        services.ConfigureDnsResolver(options => options.MaxAttempts = 0);
 
        using var serviceProvider = services.BuildServiceProvider();
        var options = serviceProvider.GetRequiredService<IOptions<DnsResolverOptions>>();
 
        var exception = Assert.Throws<OptionsValidationException>(() => options.Value);
        Assert.Equal("MaxAttempts must be one or greater.", exception.Message);
    }
 
    [Fact]
    public void ConfigureDnsResolverShouldThrowWhenTimeoutIsZero()
    {
        var services = new ServiceCollection();
        services.ConfigureDnsResolver(options => options.Timeout = TimeSpan.Zero);
 
        using var serviceProvider = services.BuildServiceProvider();
        var options = serviceProvider.GetRequiredService<IOptions<DnsResolverOptions>>();
 
        var exception = Assert.Throws<OptionsValidationException>(() => options.Value);
        Assert.Equal("Timeout must not be negative or zero.", exception.Message);
    }
 
    [Fact]
    public void ConfigureDnsResolverShouldThrowWhenTimeoutExceedsMaximum()
    {
        var services = new ServiceCollection();
        services.ConfigureDnsResolver(options => options.Timeout = TimeSpan.FromMilliseconds(1L + int.MaxValue));
 
        using var serviceProvider = services.BuildServiceProvider();
        var options = serviceProvider.GetRequiredService<IOptions<DnsResolverOptions>>();
 
        var exception = Assert.Throws<OptionsValidationException>(() => options.Value);
        Assert.Equal("Timeout must not be greater than 2147483647 milliseconds.", exception.Message);
    }
}