using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Tgstation.Server.Host.Watchdog;
namespace Tgstation.Server.Host.Service.Tests
{
///
/// Tests for
///
[TestClass]
public sealed class TestServerService
{
[TestMethod]
public void TestConstructionAndDisposal()
{
Assert.ThrowsException(() => new ServerService(null, default));
var mockWatchdogFactory = new Mock();
new ServerService(mockWatchdogFactory.Object, default).Dispose();
}
[TestMethod]
public void TestRun()
{
var type = typeof(ServerService);
var onStart = type.GetMethod("OnStart", BindingFlags.Instance | BindingFlags.NonPublic);
var onStop = type.GetMethod("OnStop", BindingFlags.Instance | BindingFlags.NonPublic);
var mockWatchdog = new Mock();
var args = Array.Empty();
CancellationToken cancellationToken;
mockWatchdog.Setup(x => x.RunAsync(false, args, It.IsAny())).Callback((bool x, string[] _, CancellationToken token) => cancellationToken = token).Returns(Task.CompletedTask).Verifiable();
var mockWatchdogFactory = new Mock();
mockWatchdogFactory.Setup(x => x.CreateWatchdog(It.IsNotNull())).Returns(mockWatchdog.Object).Verifiable();
using (var service = new ServerService(mockWatchdogFactory.Object, default))
{
onStart.Invoke(service, new object[] { args });
onStop.Invoke(service, Array.Empty