Skip unknown/removed commands still queued in the database
This commit is contained in:
parent
013c46d266
commit
1487f54749
|
@ -6,6 +6,7 @@ using Moq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NzbDrone.Common.Serializer;
|
using NzbDrone.Common.Serializer;
|
||||||
using NzbDrone.Core.Datastore.Converters;
|
using NzbDrone.Core.Datastore.Converters;
|
||||||
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
using NzbDrone.Core.Test.Framework;
|
using NzbDrone.Core.Test.Framework;
|
||||||
using NzbDrone.Core.Tv.Commands;
|
using NzbDrone.Core.Tv.Commands;
|
||||||
|
|
||||||
|
@ -50,6 +51,22 @@ namespace NzbDrone.Core.Test.Datastore.Converters
|
||||||
Subject.FromDB(context).Should().BeOfType<RefreshSeriesCommand>();
|
Subject.FromDB(context).Should().BeOfType<RefreshSeriesCommand>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_unknown_command_when_getting_json_from_db()
|
||||||
|
{
|
||||||
|
var dataRecordMock = new Mock<IDataRecord>();
|
||||||
|
dataRecordMock.Setup(s => s.GetOrdinal("Name")).Returns(0);
|
||||||
|
dataRecordMock.Setup(s => s.GetString(0)).Returns("MockRemovedCommand");
|
||||||
|
|
||||||
|
var context = new ConverterContext
|
||||||
|
{
|
||||||
|
DataRecord = dataRecordMock.Object,
|
||||||
|
DbValue = new RefreshSeriesCommand(2).ToJson()
|
||||||
|
};
|
||||||
|
|
||||||
|
Subject.FromDB(context).Should().BeOfType<UnknownCommand>();
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void should_return_null_for_null_value_when_getting_from_db()
|
public void should_return_null_for_null_value_when_getting_from_db()
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,11 +25,15 @@ namespace NzbDrone.Core.Datastore.Converters
|
||||||
|
|
||||||
var ordinal = context.DataRecord.GetOrdinal("Name");
|
var ordinal = context.DataRecord.GetOrdinal("Name");
|
||||||
var contract = context.DataRecord.GetString(ordinal);
|
var contract = context.DataRecord.GetString(ordinal);
|
||||||
var impType = typeof (Command).Assembly.FindTypeByName(contract + "Command");
|
var impType = typeof(Command).Assembly.FindTypeByName(contract + "Command");
|
||||||
|
|
||||||
if (impType == null)
|
if (impType == null)
|
||||||
{
|
{
|
||||||
throw new CommandNotFoundException(contract);
|
var result = Json.Deserialize<UnknownCommand>(stringValue);
|
||||||
|
|
||||||
|
result.ContractName = contract;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Json.Deserialize(stringValue, impType);
|
return Json.Deserialize(stringValue, impType);
|
||||||
|
|
|
@ -67,8 +67,7 @@ namespace NzbDrone.Core.Messaging.Commands
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var handlerContract = typeof(IExecute<>).MakeGenericType(command.GetType());
|
handler = (IExecute<TCommand>)_serviceFactory.Build(typeof(IExecute<TCommand>));
|
||||||
handler = (IExecute<TCommand>)_serviceFactory.Build(handlerContract);
|
|
||||||
|
|
||||||
_logger.Trace("{0} -> {1}", command.GetType().Name, handler.GetType().Name);
|
_logger.Trace("{0} -> {1}", command.GetType().Name, handler.GetType().Name);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
namespace NzbDrone.Core.Messaging.Commands
|
||||||
|
{
|
||||||
|
public class UnknownCommand : Command
|
||||||
|
{
|
||||||
|
public override bool SendUpdatesToClient => false;
|
||||||
|
|
||||||
|
public override string CompletionMessage => "Skipped";
|
||||||
|
|
||||||
|
public string ContractName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Messaging.Commands
|
||||||
|
{
|
||||||
|
public class UnknownCommandExecutor : IExecute<UnknownCommand>
|
||||||
|
{
|
||||||
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
public UnknownCommandExecutor(Logger logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute(UnknownCommand message)
|
||||||
|
{
|
||||||
|
_logger.Debug("Ignoring unknown command {0}", message.ContractName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue