mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-23 21:16:52 +01:00
Add some repository manager unit tests
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
using System;
|
||||
using System.IO.Pipelines;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using LibGit2Sharp;
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
using Moq;
|
||||
|
||||
using Remora.Rest.Core;
|
||||
|
||||
using Tgstation.Server.Host.Components.Events;
|
||||
using Tgstation.Server.Host.Configuration;
|
||||
using Tgstation.Server.Host.IO;
|
||||
|
||||
namespace Tgstation.Server.Host.Components.Repository.Tests
|
||||
{
|
||||
[TestClass]
|
||||
public sealed class TestRepositoryManager
|
||||
{
|
||||
const string TestRepoPath = "adfiwurjwhouerfiunfjdfn";
|
||||
|
||||
RepositoryManager repositoryManager;
|
||||
Mock<ILibGit2RepositoryFactory> mockRepoFactory;
|
||||
Mock<ILibGit2Commands> mockCommands;
|
||||
Mock<IIOManager> mockIOManager;
|
||||
Mock<IGitRemoteFeaturesFactory> mockGitRemoteFeaturesFactory;
|
||||
|
||||
[TestInitialize]
|
||||
public void Initialize()
|
||||
{
|
||||
mockIOManager = new Mock<IIOManager>();
|
||||
mockRepoFactory = new Mock<ILibGit2RepositoryFactory>();
|
||||
mockCommands = new Mock<ILibGit2Commands>();
|
||||
mockGitRemoteFeaturesFactory = new Mock<IGitRemoteFeaturesFactory>();
|
||||
|
||||
mockIOManager.Setup(x => x.ResolvePath()).Returns(TestRepoPath);
|
||||
|
||||
repositoryManager = new RepositoryManager(
|
||||
mockRepoFactory.Object,
|
||||
mockCommands.Object,
|
||||
mockIOManager.Object,
|
||||
Mock.Of<IEventConsumer>(),
|
||||
Mock.Of<IPostWriteHandler>(),
|
||||
mockGitRemoteFeaturesFactory.Object,
|
||||
Mock.Of<ILogger<Repository>>(),
|
||||
Mock.Of<ILogger<RepositoryManager>>(),
|
||||
new GeneralConfiguration());
|
||||
}
|
||||
|
||||
[TestCleanup]
|
||||
public void TestCleanup() => repositoryManager.Dispose();
|
||||
|
||||
[TestMethod]
|
||||
public async Task TestCloneAbortsIfRepoExists()
|
||||
{
|
||||
mockIOManager.Setup(x => x.DirectoryExists(TestRepoPath, It.IsAny<CancellationToken>())).ReturnsAsync(true).Verifiable();
|
||||
|
||||
using var cloneResult = await repositoryManager.CloneRepository(
|
||||
new Uri("https://github.com/Cyberboss/common_core"),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.IsNull(cloneResult);
|
||||
|
||||
mockIOManager.VerifyAll();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task TestBasicClone()
|
||||
{
|
||||
mockIOManager.Setup(x => x.DirectoryExists(TestRepoPath, It.IsAny<CancellationToken>())).ReturnsAsync(false).Verifiable();
|
||||
var mockRepo = new Mock<LibGit2Sharp.IRepository>();
|
||||
|
||||
mockRepoFactory.Setup(x => x.CreateFromPath(TestRepoPath, It.IsAny<CancellationToken>())).ReturnsAsync(mockRepo.Object).Verifiable();
|
||||
|
||||
using var cloneResult = await repositoryManager.CloneRepository(
|
||||
new Uri("https://github.com/Cyberboss/common_core"),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.IsNotNull(cloneResult);
|
||||
|
||||
mockRepoFactory.VerifyAll();
|
||||
mockIOManager.VerifyAll();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task TestBasicLoad()
|
||||
{
|
||||
mockIOManager.Setup(x => x.DirectoryExists(TestRepoPath, It.IsAny<CancellationToken>())).ReturnsAsync(false).Verifiable(Times.Never);
|
||||
var mockRepo = new Mock<LibGit2Sharp.IRepository>();
|
||||
|
||||
mockRepoFactory.Setup(x => x.CreateFromPath(TestRepoPath, It.IsAny<CancellationToken>())).ReturnsAsync(mockRepo.Object).Verifiable();
|
||||
|
||||
using var loadResult = await repositoryManager.LoadRepository(
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.IsNotNull(loadResult);
|
||||
|
||||
mockRepoFactory.VerifyAll();
|
||||
mockIOManager.VerifyAll();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task TestLoadFailsIfRepoDoesntExist()
|
||||
{
|
||||
mockIOManager.Setup(x => x.DirectoryExists(TestRepoPath, It.IsAny<CancellationToken>())).ReturnsAsync(false).Verifiable(Times.Never);
|
||||
var mockRepo = new Mock<LibGit2Sharp.IRepository>();
|
||||
|
||||
mockRepoFactory.Setup(x => x.CreateFromPath(TestRepoPath, It.IsAny<CancellationToken>())).ThrowsAsync(new RepositoryNotFoundException()).Verifiable();
|
||||
|
||||
using var loadResult = await repositoryManager.LoadRepository(
|
||||
CancellationToken.None);
|
||||
|
||||
Assert.IsNull(loadResult);
|
||||
|
||||
mockRepoFactory.VerifyAll();
|
||||
mockIOManager.VerifyAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1006,6 +1006,8 @@ namespace Tgstation.Server.Tests.Live
|
||||
using var hardCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(maximumTestMinutes));
|
||||
var hardCancellationToken = hardCancellationTokenSource.Token;
|
||||
|
||||
hardCancellationToken.Register(() => Console.WriteLine("TGS TEST CANCELLED TOKEN DUE TO TIMEOUT"));
|
||||
|
||||
ServiceCollectionExtensions.UseAdditionalLoggerProvider<HardFailLoggerProvider>();
|
||||
|
||||
var failureTask = HardFailLoggerProvider.FailureSource;
|
||||
@@ -1016,6 +1018,7 @@ namespace Tgstation.Server.Tests.Live
|
||||
|
||||
if (!internalTask.IsCompleted)
|
||||
{
|
||||
Console.WriteLine("TGS TEST CANCELLING TOKEN DUE TO ERROR");
|
||||
hardCancellationTokenSource.Cancel();
|
||||
try
|
||||
{
|
||||
@@ -1441,6 +1444,7 @@ namespace Tgstation.Server.Tests.Live
|
||||
}
|
||||
finally
|
||||
{
|
||||
Console.WriteLine("TGS TEST CANCELLING TOKEN AS FINAL STEP");
|
||||
serverCts.Cancel();
|
||||
try
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user