From 07557691c8df293e3428631e85cfe0aa50120e13 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 2 Nov 2018 15:58:38 -0400 Subject: [PATCH] Add TestPosixByondInstaller --- .../Byond/TestPosixByondInstaller.cs | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 tests/Tgstation.Server.Host.Tests/Components/Byond/TestPosixByondInstaller.cs diff --git a/tests/Tgstation.Server.Host.Tests/Components/Byond/TestPosixByondInstaller.cs b/tests/Tgstation.Server.Host.Tests/Components/Byond/TestPosixByondInstaller.cs new file mode 100644 index 0000000000..e2fb2cff0f --- /dev/null +++ b/tests/Tgstation.Server.Host.Tests/Components/Byond/TestPosixByondInstaller.cs @@ -0,0 +1,95 @@ +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using System; +using System.Threading.Tasks; +using Tgstation.Server.Host.IO; + +namespace Tgstation.Server.Host.Components.Byond.Tests +{ + [TestClass] + public sealed class TestPosixByondInstaller + { + [TestMethod] + public void TestConstruction() + { + Assert.ThrowsException(() => new PosixByondInstaller(null, null, null)); + var mockIOManager = new Mock(); + Assert.ThrowsException(() => new PosixByondInstaller(mockIOManager.Object, null, null)); + var mockPostWriteHandler = new Mock(); + Assert.ThrowsException(() => new PosixByondInstaller(mockIOManager.Object, mockPostWriteHandler.Object, null)); + + var mockLogger = new Mock>(); + new PosixByondInstaller(mockIOManager.Object, mockPostWriteHandler.Object, mockLogger.Object); + } + + [TestMethod] + public async Task TestCacheClean() + { + var mockIOManager = new Mock(); + var mockPostWriteHandler = new Mock(); + var mockLogger = new Mock>(); + var installer = new PosixByondInstaller(mockIOManager.Object, mockPostWriteHandler.Object, mockLogger.Object); + + const string ByondCachePath = "~/.byond/cache"; + + mockIOManager.Setup(x => x.DeleteDirectory(ByondCachePath, default)).Returns(Task.CompletedTask).Verifiable(); + + await installer.CleanCache(default); + + mockIOManager.Verify(); + + + mockIOManager.Setup(x => x.DeleteDirectory(ByondCachePath, default)).Throws(new OperationCanceledException()).Verifiable(); + + await Assert.ThrowsExceptionAsync(() => installer.CleanCache(default)).ConfigureAwait(false); + + mockIOManager.Verify(); + + mockIOManager.Setup(x => x.DeleteDirectory(ByondCachePath, default)).Throws(new Exception()).Verifiable(); + + await installer.CleanCache(default).ConfigureAwait(false); + + mockIOManager.Verify(); + } + + + [TestMethod] + public async Task TestDownload() + { + var mockIOManager = new Mock(); + var mockPostWriteHandler = new Mock(); + var mockLogger = new Mock>(); + var installer = new PosixByondInstaller(mockIOManager.Object, mockPostWriteHandler.Object, mockLogger.Object); + + await Assert.ThrowsExceptionAsync(() => installer.DownloadVersion(null, default)).ConfigureAwait(false); + + var ourArray = Array.Empty(); + mockIOManager.Setup(x => x.DownloadFile(It.Is(uri => uri == new Uri("https://secure.byond.com/download/build/511/511.1385_byond_linux.zip")), default)).Returns(Task.FromResult(ourArray)).Verifiable(); + + var result = await installer.DownloadVersion(new Version(511, 1385), default).ConfigureAwait(false); + + Assert.AreSame(ourArray, result); + mockIOManager.Verify(); + } + + [TestMethod] + public async Task TestInstallByond() + { + var mockIOManager = new Mock(); + var mockPostWriteHandler = new Mock(); + var mockLogger = new Mock>(); + var installer = new PosixByondInstaller(mockIOManager.Object, mockPostWriteHandler.Object, mockLogger.Object); + + const string FakePath = "fake"; + await Assert.ThrowsExceptionAsync(() => installer.InstallByond(null, null, default)).ConfigureAwait(false); + await Assert.ThrowsExceptionAsync(() => installer.InstallByond(FakePath, null, default)).ConfigureAwait(false); + + await installer.InstallByond(FakePath, new Version(511, 1385), default).ConfigureAwait(false); + + mockIOManager.Verify(x => x.ConcatPath(It.IsAny(), It.IsNotNull()), Times.Exactly(5)); + mockIOManager.Verify(x => x.WriteAllBytes(It.IsAny(), It.IsNotNull(), default), Times.Exactly(2)); + mockPostWriteHandler.Verify(x => x.HandleWrite(It.IsAny()), Times.Exactly(4)); + } + } +}