From dc7986dbad9b34a6bd7e002be4409890c07d5f8f Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Fri, 13 Sep 2019 14:23:01 +0200 Subject: [PATCH] Fixed regression in container registration. Additional logging in case of integration test startup failures --- src/NzbDrone.Common/Composition/Container.cs | 12 ++++++++++++ src/NzbDrone.Console/ConsoleApp.cs | 1 + src/NzbDrone.Test.Common/NzbDroneRunner.cs | 17 ++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Common/Composition/Container.cs b/src/NzbDrone.Common/Composition/Container.cs index a52ad0dc7..3b9b2c8fe 100644 --- a/src/NzbDrone.Common/Composition/Container.cs +++ b/src/NzbDrone.Common/Composition/Container.cs @@ -53,7 +53,18 @@ namespace NzbDrone.Common.Composition { var factory = CreateSingletonImplementationFactory(implementation); + // For Resolve and ResolveAll _container.Register(service, factory); + + // For ctor(IEnumerable) + var enumerableType = typeof(IEnumerable<>).MakeGenericType(service); + _container.Register(enumerableType, (c, p) => + { + var instance = factory(c, p); + var result = Array.CreateInstance(service, 1); + result.SetValue(instance, 0); + return result; + }); } public IEnumerable ResolveAll() where T : class @@ -67,6 +78,7 @@ namespace NzbDrone.Common.Composition { var factory = CreateSingletonImplementationFactory(implementation); + // For ResolveAll and ctor(IEnumerable) _container.Register(service, factory, implementation.FullName); } } diff --git a/src/NzbDrone.Console/ConsoleApp.cs b/src/NzbDrone.Console/ConsoleApp.cs index 3cf8fec43..d50bbe6c9 100644 --- a/src/NzbDrone.Console/ConsoleApp.cs +++ b/src/NzbDrone.Console/ConsoleApp.cs @@ -63,6 +63,7 @@ namespace NzbDrone.Console System.Console.WriteLine(""); System.Console.WriteLine(""); Logger.Fatal(ex, "EPIC FAIL!"); + System.Console.WriteLine("EPIC FAIL! " + ex.ToString()); Exit(ExitCodes.UnknownFailure); } diff --git a/src/NzbDrone.Test.Common/NzbDroneRunner.cs b/src/NzbDrone.Test.Common/NzbDroneRunner.cs index 4518bc73a..131b7b5d2 100644 --- a/src/NzbDrone.Test.Common/NzbDroneRunner.cs +++ b/src/NzbDrone.Test.Common/NzbDroneRunner.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Threading; @@ -8,6 +9,7 @@ using System.Xml.XPath; using NLog; using NUnit.Framework; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Extensions; using NzbDrone.Common.Processes; using NzbDrone.Core.Configuration; using RestSharp; @@ -19,6 +21,7 @@ namespace NzbDrone.Test.Common private readonly IProcessProvider _processProvider; private readonly IRestClient _restClient; private Process _nzbDroneProcess; + private List _startupLog; public string AppData { get; private set; } public string ApiKey { get; private set; } @@ -38,6 +41,7 @@ namespace NzbDrone.Test.Common var sonarrConsoleExe = OsInfo.IsWindows ? "Sonarr.Console.exe" : "Sonarr.exe"; + _startupLog = new List(); if (BuildInfo.IsDebug) { Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "_output", "Sonarr.Console.exe")); @@ -53,7 +57,10 @@ namespace NzbDrone.Test.Common if (_nzbDroneProcess.HasExited) { - Assert.Fail("Process has exited"); + Console.WriteLine("NzbDrone has exited unexpectedly"); + Thread.Sleep(2000); + var output = _startupLog.Join(Environment.NewLine); + Assert.Fail("Process has exited: ExitCode={0} Output={1}", _nzbDroneProcess.ExitCode, output); } var request = new RestRequest("system/status"); @@ -64,6 +71,7 @@ namespace NzbDrone.Test.Common if (statusCall.ResponseStatus == ResponseStatus.Completed) { + _startupLog = null; Console.WriteLine("NzbDrone is started. Running Tests"); return; } @@ -97,6 +105,8 @@ namespace NzbDrone.Test.Common private void Start(string outputNzbdroneConsoleExe) { + Console.WriteLine("Starting instance from {0}", outputNzbdroneConsoleExe); + var args = "-nobrowser -data=\"" + AppData + "\""; _nzbDroneProcess = _processProvider.Start(outputNzbdroneConsoleExe, args, null, OnOutputDataReceived, OnOutputDataReceived); @@ -106,6 +116,11 @@ namespace NzbDrone.Test.Common { Console.WriteLine(data); + if (_startupLog != null) + { + _startupLog.Add(data); + } + if (data.Contains("Press enter to exit")) { _nzbDroneProcess.StandardInput.WriteLine(" ");