53 lines
1.9 KiB
C#
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();
|
|
}
|
|
}
|