91 lines
2.5 KiB
C#
91 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Text;
|
|
|
|
namespace StellaOps.Cli.Tests.Testing;
|
|
|
|
internal sealed class TempDirectory : IDisposable
|
|
{
|
|
public TempDirectory()
|
|
{
|
|
Path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"stellaops-cli-tests-{Guid.NewGuid():N}");
|
|
Directory.CreateDirectory(Path);
|
|
}
|
|
|
|
public string Path { get; }
|
|
|
|
public void Dispose()
|
|
{
|
|
try
|
|
{
|
|
if (Directory.Exists(Path))
|
|
{
|
|
Directory.Delete(Path, recursive: true);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// ignored
|
|
}
|
|
}
|
|
}
|
|
|
|
internal sealed class TempFile : IDisposable
|
|
{
|
|
public TempFile(string fileName, byte[] contents)
|
|
{
|
|
var directory = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"stellaops-cli-file-{Guid.NewGuid():N}");
|
|
Directory.CreateDirectory(directory);
|
|
Path = System.IO.Path.Combine(directory, fileName);
|
|
File.WriteAllBytes(Path, contents);
|
|
}
|
|
|
|
public string Path { get; }
|
|
|
|
public void Dispose()
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(Path))
|
|
{
|
|
File.Delete(Path);
|
|
}
|
|
|
|
var directory = System.IO.Path.GetDirectoryName(Path);
|
|
if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory))
|
|
{
|
|
Directory.Delete(directory, recursive: true);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// ignored intentionally
|
|
}
|
|
}
|
|
}
|
|
|
|
internal sealed class StubHttpMessageHandler : HttpMessageHandler
|
|
{
|
|
private readonly Queue<Func<HttpRequestMessage, CancellationToken, HttpResponseMessage>> _responses;
|
|
|
|
public StubHttpMessageHandler(params Func<HttpRequestMessage, CancellationToken, HttpResponseMessage>[] handlers)
|
|
{
|
|
if (handlers is null || handlers.Length == 0)
|
|
{
|
|
throw new ArgumentException("At least one handler must be provided.", nameof(handlers));
|
|
}
|
|
|
|
_responses = new Queue<Func<HttpRequestMessage, CancellationToken, HttpResponseMessage>>(handlers);
|
|
}
|
|
|
|
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
|
{
|
|
var factory = _responses.Count > 1 ? _responses.Dequeue() : _responses.Peek();
|
|
return Task.FromResult(factory(request, cancellationToken));
|
|
}
|
|
}
|