Files
jellyfin-ha-src/tests/Jellyfin.Server.Tests/HighAvailability/SessionDirectoryRegistrationTests.cs
T

53 lines
1.9 KiB
C#

using System.Collections.Generic;
using Jellyfin.Server.Extensions;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Session;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions;
using Xunit;
namespace Jellyfin.Server.Tests.HighAvailability;
/// <summary>
/// The directory and the bus are two halves of one mechanism: a shared directory paired with a bus that
/// reaches nobody advertises sessions from every instance and then fails every command sent to one.
/// </summary>
public static class SessionDirectoryRegistrationTests
{
[Fact]
public static void AddSessionDirectory_WithoutARedisConnection_RegistersNeitherHalf()
{
var services = Build(configured: false);
Assert.IsType<NullSessionDirectory>(services.GetRequiredService<ISessionDirectory>());
Assert.IsType<NullPodMessageBus>(services.GetRequiredService<IPodMessageBus>());
}
[Fact]
public static void AddSessionDirectory_WithAnUnusableRedisConnection_FallsBackOnBothHalves()
{
// The multiplexer is deliberately absent, which is what an unreachable Redis amounts to here.
var services = Build(configured: true);
Assert.IsType<NullSessionDirectory>(services.GetRequiredService<ISessionDirectory>());
Assert.IsType<NullPodMessageBus>(services.GetRequiredService<IPodMessageBus>());
}
private static ServiceProvider Build(bool configured)
{
var settings = new Dictionary<string, string?>();
if (configured)
{
settings[TranscodeStoreOptions.RedisConnectionStringKey] = "127.0.0.1:6379";
}
var configuration = new ConfigurationBuilder().AddInMemoryCollection(settings).Build();
return new ServiceCollection()
.AddLogging()
.AddSessionDirectory(configuration, NullLogger.Instance)
.BuildServiceProvider();
}
}