Удалены <remarks>, <summary> сжаты до короткой фразы, вырезаны ссылки на Task/Ruling/этап/python/прототип; //-комментарии со ссылками на процесс удалены; то же в .proto. Правила обновлены в docs/spec/Код-стайл-Дейл.md. Строк комментариев 27210 -> ~19100.
61 lines
2.7 KiB
C#
61 lines
2.7 KiB
C#
using Deal.Telegram.Sessions;
|
|
using Microsoft.Extensions.Logging.Abstractions;
|
|
|
|
namespace Deal.Telegram.Tests.Telegram;
|
|
|
|
// Фабрика компонентов хранилища сессий для unit-тестов: уникальный temp-каталог на сценарий,
|
|
// тестовый ключ AES-256 и реальные SessionFileCipher/SessionStore (без сети).
|
|
internal static class TestSessionFactory
|
|
{
|
|
/// <summary>
|
|
/// Тестовый ключ AES-256
|
|
/// </summary>
|
|
public static byte[] TestKey { get; } = Enumerable.Range(1, 32).Select(index => (byte)index).ToArray();
|
|
|
|
/// <summary>
|
|
/// Создаёт уникальный temp-каталог для сценария теста.
|
|
/// </summary>
|
|
public static string NewSessionsDirectory()
|
|
=> Path.Combine(Path.GetTempPath(), "deal-tg-sessions", Guid.NewGuid().ToString("N"));
|
|
|
|
/// <summary>
|
|
/// Опции хранилища над temp-каталогом.
|
|
/// </summary>
|
|
/// <param name="sessionsDirectory">Каталог сессий (NewSessionsDirectory).</param>
|
|
/// <param name="key">Ключ шифрования (по умолчанию <see cref="TestKey"/>).</param>
|
|
public static TgOptions Options(string sessionsDirectory, byte[]? key = null)
|
|
=> TgOptions.Create(key ?? TestKey, sessionsDirectory);
|
|
|
|
/// <summary>
|
|
/// Шифр сессий над каталогом.
|
|
/// </summary>
|
|
/// <param name="sessionsDirectory">Каталог сессий.</param>
|
|
/// <param name="key">Ключ шифрования.</param>
|
|
public static SessionFileCipher Cipher(string sessionsDirectory, byte[]? key = null)
|
|
=> new(Options(sessionsDirectory, key));
|
|
|
|
/// <summary>
|
|
/// Реальное файловое хранилище над temp-каталогом
|
|
/// </summary>
|
|
/// <param name="sessionsDirectory">Каталог сессий.</param>
|
|
/// <param name="key">Ключ шифрования.</param>
|
|
public static SessionStore Store(string sessionsDirectory, byte[]? key = null)
|
|
=> new(Options(sessionsDirectory, key), Cipher(sessionsDirectory, key), NullLogger<SessionStore>.Instance);
|
|
|
|
/// <summary>
|
|
/// Удаляет temp-каталог после сценария
|
|
/// </summary>
|
|
/// <param name="sessionsDirectory">Каталог сессий.</param>
|
|
public static void Cleanup(string sessionsDirectory)
|
|
{
|
|
try
|
|
{
|
|
Directory.Delete(sessionsDirectory, recursive: true);
|
|
}
|
|
catch (IOException)
|
|
{
|
|
// Занятый файл — тестовый мусор в temp допустим.
|
|
}
|
|
}
|
|
}
|