From 50873dc61697b43a5fdb10d2417f151074142f86 Mon Sep 17 00:00:00 2001 From: Dominion Date: Mon, 22 May 2023 19:53:12 -0400 Subject: [PATCH] Connect/Disconnect test for IRC --- .../Chat/Providers/TestIrcProvider.cs | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestIrcProvider.cs b/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestIrcProvider.cs index 2efc860a6a..89867bb98b 100644 --- a/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestIrcProvider.cs +++ b/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestIrcProvider.cs @@ -1,8 +1,14 @@ +using System; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +using System.Xml.Linq; + using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; -using System; -using System.Threading.Tasks; +using Serilog.Parsing; + using Tgstation.Server.Api.Models; using Tgstation.Server.Host.Jobs; using Tgstation.Server.Host.Models; @@ -45,5 +51,41 @@ namespace Tgstation.Server.Host.Components.Chat.Providers.Tests await new IrcProvider(mockJobManager.Object, mockAss.Object, mockAsyncDelayer.Object, mockLogger.Object, mockBot).DisposeAsync(); } + + static Task InvokeConnect(IProvider provider, CancellationToken cancellationToken = default) => (Task)provider.GetType().GetMethod("Connect", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(provider, new object[] { cancellationToken }); + + [TestMethod] + public async Task TestConnectAndDisconnect() + { + var actualToken = Environment.GetEnvironmentVariable("TGS_TEST_IRC_CONNECTION_STRING"); + if (actualToken == null) + Assert.Inconclusive("Required environment variable TGS_TEST_IRC_CONNECTION_STRING isn't set!"); + + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddConsole(); + builder.SetMinimumLevel(LogLevel.Trace); + }); + var mockSetup = new Mock(); + mockSetup + .Setup(x => x.RegisterOperation(It.IsNotNull(), It.IsNotNull(), It.IsAny())) + .Callback((job, entrypoint, cancellationToken) => job.StartedBy ??= new User { }) + .Returns(Task.CompletedTask); + mockSetup + .Setup(x => x.WaitForJobCompletion(It.IsNotNull(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(Task.CompletedTask); + var mockJobManager = mockSetup.Object; + await using var provider = new IrcProvider(mockJobManager, Mock.Of(), new AsyncDelayer(), loggerFactory.CreateLogger(), new ChatBot + { + ConnectionString = actualToken, + Provider = ChatProvider.Irc, + }); + Assert.IsFalse(provider.Connected); + await InvokeConnect(provider); + Assert.IsTrue(provider.Connected); + + await provider.Disconnect(default); + Assert.IsFalse(provider.Connected); + } } }