Files
unkin-agent 6c54a02240
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/push/ci Pipeline was successful
make quick connect authorize atomic and stop the fallback shadowing redis
2026-09-24 23:38:35 +10:00

97 lines
3.4 KiB
C#

using System;
using System.IO;
using MediaBrowser.Common.Configuration;
using Microsoft.Extensions.Configuration;
using Moq;
using Xunit;
namespace Jellyfin.Server.Tests.HighAvailability;
/// <summary>
/// The fork's own settings live under the <c>Jellyfin:*</c> configuration root and every manifest,
/// chart and document sets them as bare <c>Jellyfin__Section__Key</c> environment variables. The
/// startup configuration the host reads them from must therefore accept that form; when it does not,
/// a correctly set variable is dropped and the feature it configures stays off without any error.
/// </summary>
[Collection("JellyfinSectionConfiguration")]
public sealed class JellyfinSectionConfigurationTests : IDisposable
{
private const string RedisKey = "Jellyfin:TranscodeStore:RedisConnectionString";
private const string UnprefixedVariable = "Jellyfin__TranscodeStore__RedisConnectionString";
private const string PrefixedVariable = "JELLYFIN_Jellyfin__TranscodeStore__RedisConnectionString";
private const string LeaseUnprefixedVariable = "Jellyfin__TranscodeStore__LeaseDurationSeconds";
private readonly string _configDirectory;
public JellyfinSectionConfigurationTests()
{
_configDirectory = Directory.CreateTempSubdirectory("jellyfin-config-test").FullName;
File.WriteAllText(Path.Combine(_configDirectory, "logging.default.json"), "{}");
}
public void Dispose()
{
Environment.SetEnvironmentVariable(UnprefixedVariable, null);
Environment.SetEnvironmentVariable(PrefixedVariable, null);
Environment.SetEnvironmentVariable(LeaseUnprefixedVariable, null);
Directory.Delete(_configDirectory, true);
}
[Fact]
public void CreateAppConfiguration_Should_Read_UnprefixedVariable()
{
Environment.SetEnvironmentVariable(UnprefixedVariable, "valkey-cheeztv-valkey:6379,abortConnect=false");
var config = CreateConfiguration();
Assert.Equal("valkey-cheeztv-valkey:6379,abortConnect=false", config[RedisKey]);
}
[Fact]
public void CreateAppConfiguration_Should_Read_UnprefixedNonStringValue()
{
Environment.SetEnvironmentVariable(LeaseUnprefixedVariable, "45");
var config = CreateConfiguration();
Assert.Equal("45", config["Jellyfin:TranscodeStore:LeaseDurationSeconds"]);
}
[Fact]
public void CreateAppConfiguration_Should_Read_PrefixedVariable()
{
Environment.SetEnvironmentVariable(PrefixedVariable, "redis:6379");
var config = CreateConfiguration();
Assert.Equal("redis:6379", config[RedisKey]);
}
[Fact]
public void CreateAppConfiguration_Should_Prefer_PrefixedVariable()
{
Environment.SetEnvironmentVariable(UnprefixedVariable, "unprefixed:6379");
Environment.SetEnvironmentVariable(PrefixedVariable, "prefixed:6379");
var config = CreateConfiguration();
Assert.Equal("prefixed:6379", config[RedisKey]);
}
[Fact]
public void CreateAppConfiguration_Should_Leave_Key_Unset_Without_Variables()
{
var config = CreateConfiguration();
Assert.Null(config[RedisKey]);
}
private IConfiguration CreateConfiguration()
{
var appPaths = new Mock<IApplicationPaths>();
appPaths.Setup(paths => paths.ConfigurationDirectoryPath).Returns(_configDirectory);
return Program.CreateAppConfiguration(new StartupOptions(), appPaths.Object);
}
}