Files
2026-01-25 12:01:08 +03:00

63 lines
2.0 KiB
C#

using System.IO.Compression;
using Microsoft.Extensions.DependencyInjection;
using Nebula.Shared;
using Nebula.Shared.Services;
using Nebula.Shared.Services.Logging;
using Nebula.Shared.Utils;
using Nebula.SharedModels;
namespace Nebula.UnitTest.NebulaSharedTests;
[TestFixture]
[TestOf(typeof(DotnetResolverService))]
public class TarTest : BaseSharedTest
{
private FileService _fileService = default!;
private ConfigurationService _configurationService = default!;
private readonly HttpClient _httpClient = new();
public override void BeforeServiceBuild(IServiceCollection services)
{
TestServiceHelper.InitFileServiceTest();
}
[SetUp]
public override void Setup()
{
base.Setup();
_fileService = _sharedUnit.GetService<FileService>();
_configurationService = _sharedUnit.GetService<ConfigurationService>();
}
[Test]
public async Task DownloadTarAndUnzipTest()
{
Console.WriteLine($"Downloading dotnet linux-x64...");
if(!_configurationService.GetConfigValue(CurrentConVar.DotnetUrl)!.TryGetValue("linux-x64", out var url))
throw new NullReferenceException();
using var response = await _httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
await using var stream = await response.Content.ReadAsStreamAsync();
Directory.CreateDirectory(AppDataPath.RootPath);
if (url.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
{
using var zipArchive = new ZipArchive(stream);
await zipArchive.ExtractToDirectoryAsync(AppDataPath.RootPath, true);
}
else if (url.EndsWith(".tar.gz", StringComparison.OrdinalIgnoreCase)
|| url.EndsWith(".tgz", StringComparison.OrdinalIgnoreCase))
{
TarUtils.ExtractTarGz(stream, AppDataPath.RootPath);
}
else
{
throw new NotSupportedException("Unsupported archive format.");
}
Console.WriteLine("Downloading dotnet complete.");
}
}