feat: add fnOS packaging, storage workflows and release pipeline
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using dy.net.model.dto;
|
||||
using dy.net.model.entity;
|
||||
using dy.net.service;
|
||||
using dy.net.storage;
|
||||
using Microsoft.AspNetCore.DataProtection;
|
||||
using SqlSugar;
|
||||
|
||||
namespace dy.net.Tests.TestInfrastructure;
|
||||
|
||||
internal sealed class WebDavTestHost : IDisposable
|
||||
{
|
||||
private readonly TemporaryDirectory _temporaryDirectory;
|
||||
private readonly IDisposable _clientFactory;
|
||||
|
||||
private WebDavTestHost(
|
||||
TemporaryDirectory temporaryDirectory,
|
||||
SqlSugarClient database,
|
||||
IDisposable clientFactory,
|
||||
WebDavSettingsService settingsService,
|
||||
WebDavMediaStorage storage,
|
||||
WebDavSettings settings)
|
||||
{
|
||||
_temporaryDirectory = temporaryDirectory;
|
||||
Database = database;
|
||||
_clientFactory = clientFactory;
|
||||
SettingsService = settingsService;
|
||||
Storage = storage;
|
||||
Settings = settings;
|
||||
}
|
||||
|
||||
public SqlSugarClient Database { get; }
|
||||
public WebDavSettingsService SettingsService { get; }
|
||||
public WebDavMediaStorage Storage { get; }
|
||||
public WebDavSettings Settings { get; }
|
||||
|
||||
public static async Task<WebDavTestHost> CreateAsync(
|
||||
IHttpClientFactory factory,
|
||||
IDisposable disposableFactory,
|
||||
WebDavTestRequest request,
|
||||
IReadOnlyList<TimeSpan> uploadVisibilityRetryDelays = null,
|
||||
IReadOnlyList<TimeSpan> finalVisibilityRetryDelays = null)
|
||||
{
|
||||
var temporaryDirectory = new TemporaryDirectory();
|
||||
try
|
||||
{
|
||||
var databasePath = Path.Combine(temporaryDirectory.Path, "settings.sqlite");
|
||||
var database = new SqlSugarClient(new ConnectionConfig
|
||||
{
|
||||
ConnectionString = $"DataSource={databasePath}",
|
||||
DbType = DbType.Sqlite,
|
||||
InitKeyType = InitKeyType.Attribute,
|
||||
IsAutoCloseConnection = true
|
||||
});
|
||||
database.CodeFirst.InitTables<WebDavSettings>();
|
||||
|
||||
var provider = DataProtectionProvider.Create(
|
||||
new DirectoryInfo(Path.Combine(temporaryDirectory.Path, "keys")),
|
||||
builder => builder.SetApplicationName("dysync.net"));
|
||||
var settingsService = new WebDavSettingsService(database, provider);
|
||||
var settings = await settingsService.BuildCandidateAsync(request);
|
||||
await settingsService.SaveAsync(settings, false, "test");
|
||||
var storage = uploadVisibilityRetryDelays == null || finalVisibilityRetryDelays == null
|
||||
? new WebDavMediaStorage(factory, settingsService)
|
||||
: new WebDavMediaStorage(factory, settingsService,
|
||||
uploadVisibilityRetryDelays, finalVisibilityRetryDelays);
|
||||
return new WebDavTestHost(temporaryDirectory, database, disposableFactory, settingsService, storage, settings);
|
||||
}
|
||||
catch
|
||||
{
|
||||
disposableFactory.Dispose();
|
||||
temporaryDirectory.Dispose();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Database.Dispose();
|
||||
_clientFactory.Dispose();
|
||||
_temporaryDirectory.Dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user