54 lines
1.6 KiB
C#
54 lines
1.6 KiB
C#
using System.Reflection;
|
|
using OF_DL.Models.OfdlApi;
|
|
using OF_DL.Services;
|
|
|
|
namespace OF_DL.Tests.Services;
|
|
|
|
[CollectionDefinition("NonParallel", DisableParallelization = true)]
|
|
public class NonParallelCollection
|
|
{
|
|
}
|
|
|
|
internal sealed class DynamicRulesCacheScope : IDisposable
|
|
{
|
|
private static readonly FieldInfo s_rulesField =
|
|
typeof(ApiService).GetField("s_cachedDynamicRules", BindingFlags.NonPublic | BindingFlags.Static) ??
|
|
throw new InvalidOperationException("Unable to access cached rules field.");
|
|
|
|
private static readonly FieldInfo s_expirationField =
|
|
typeof(ApiService).GetField("s_cachedDynamicRulesExpiration",
|
|
BindingFlags.NonPublic | BindingFlags.Static) ??
|
|
throw new InvalidOperationException("Unable to access cached rules expiration field.");
|
|
|
|
private readonly object? _priorRules;
|
|
private readonly DateTime? _priorExpiration;
|
|
|
|
public DynamicRulesCacheScope(DynamicRules rules)
|
|
{
|
|
_priorRules = s_rulesField.GetValue(null);
|
|
_priorExpiration = (DateTime?)s_expirationField.GetValue(null);
|
|
|
|
s_rulesField.SetValue(null, rules);
|
|
s_expirationField.SetValue(null, DateTime.UtcNow.AddHours(1));
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
s_rulesField.SetValue(null, _priorRules);
|
|
s_expirationField.SetValue(null, _priorExpiration);
|
|
}
|
|
}
|
|
|
|
internal sealed class CurrentDirectoryScope : IDisposable
|
|
{
|
|
private readonly string _original;
|
|
|
|
public CurrentDirectoryScope(string path)
|
|
{
|
|
_original = Environment.CurrentDirectory;
|
|
Environment.CurrentDirectory = path;
|
|
}
|
|
|
|
public void Dispose() => Environment.CurrentDirectory = _original;
|
|
}
|