Adding a background task sweep generator. Updated cms page scheduler processing as a background task.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4042426
This commit is contained in:
loudej
2009-11-27 08:52:38 +00:00
parent 72dd76a36d
commit 7a2d4c4a03
14 changed files with 313 additions and 8 deletions

View File

@@ -38,7 +38,8 @@ namespace Orchard.Tests.Environment {
new[] { modelBinderProvider1, modelBinderProvider2 },
modelBinderPublisher,
new ViewEngineCollection(),
new Moq.Mock<IPackageManager>().Object);
new Moq.Mock<IPackageManager>().Object,
Enumerable.Empty<IOrchardShellEvents>());
runtime.Activate();

View File

@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Orchard.Logging;
namespace Orchard.Tests {
[TestFixture]
public class EventsTests {
[Test]
public void AllEventsAreCalled() {
var events = new ITestEvents[] { new FooSink(), new BarSink() };
events.Invoke(x => x.Hello("world"), NullLogger.Instance);
Assert.That(events.OfType<FooSink>().Single().Name, Is.EqualTo("world"));
Assert.That(events.OfType<BarSink>().Single().Name, Is.EqualTo("world"));
}
[Test]
public void AnExceptionShouldBeLoggedAndOtherEventsWillBeFired() {
var events = new ITestEvents[] { new FooSink(), new CrashSink(), new BarSink() };
var logger = new TestLogger();
events.Invoke(x => x.Hello("world"), logger);
Assert.That(events.OfType<FooSink>().Single().Name, Is.EqualTo("world"));
Assert.That(events.OfType<BarSink>().Single().Name, Is.EqualTo("world"));
Assert.That(logger.LogException, Is.TypeOf<ApplicationException>());
Assert.That(logger.LogException, Has.Property("Message").EqualTo("Illegal name 'world'"));
}
private class TestLogger : ILogger {
public bool IsEnabled(LogLevel level) {
return true;
}
public void Log(LogLevel level, Exception exception, string format, params object[] args) {
LogException = exception;
LogFormat = format;
LogArgs = args;
}
public Exception LogException { get; set; }
public string LogFormat { get; set; }
public object[] LogArgs { get; set; }
}
private interface ITestEvents : IEvents {
void Hello(string name);
}
private class FooSink : ITestEvents {
void ITestEvents.Hello(string name) {
Name = name;
}
public string Name { get; set; }
}
private class BarSink : ITestEvents {
void ITestEvents.Hello(string name) {
Name = name;
}
public string Name { get; set; }
}
private class CrashSink : ITestEvents {
void ITestEvents.Hello(string name) {
throw new ApplicationException("Illegal name '" + name + "'");
}
}
}
}

View File

@@ -104,6 +104,7 @@
<Compile Include="Environment\DefaultOrchardHostTests.cs" />
<Compile Include="Environment\DefaultOrchardShellTests.cs" />
<Compile Include="Environment\OrchardStarterTests.cs" />
<Compile Include="EventsTests.cs" />
<Compile Include="Localization\NullLocalizerTests.cs" />
<Compile Include="Logging\LoggingModuleTests.cs" />
<Compile Include="Models\ContentQueryTests.cs" />
@@ -127,6 +128,7 @@
<Compile Include="Mvc\OrchardControllerIdentificationStrategyTests.cs" />
<Compile Include="Mvc\RouteCollectionPublisherTests.cs" />
<Compile Include="Mvc\Routes\StandardPackageRouteProviderTests.cs" />
<Compile Include="Tasks\SweepGeneratorTests.cs" />
<Compile Include="UI\Notify\NotifierTests.cs" />
<Compile Include="UI\Notify\NotifyFilterTests.cs" />
<Compile Include="Packages\PackageFoldersTests.cs" />

View File

@@ -0,0 +1,43 @@
using System;
using Autofac.Builder;
using Moq;
using NUnit.Framework;
using Orchard.Tasks;
namespace Orchard.Tests.Tasks {
[TestFixture]
public class SweepGeneratorTests {
[Test]
public void DoWorkShouldSendHeartbeatToTaskManager() {
var taskManager = new Mock<IBackgroundService>();
var builder = new ContainerBuilder();
builder.Register(taskManager.Object);
var container = builder.Build();
var heartbeatSource = new SweepGenerator(container);
heartbeatSource.DoWork();
taskManager.Verify(x => x.Sweep(), Times.Once());
}
[Test]
public void ActivatedEventShouldStartTimer() {
var taskManager = new Mock<IBackgroundService>();
var builder = new ContainerBuilder();
builder.Register(taskManager.Object);
var container = builder.Build();
var heartbeatSource = new SweepGenerator(container) {
Interval = TimeSpan.FromMilliseconds(25)
};
taskManager.Verify(x => x.Sweep(), Times.Never());
heartbeatSource.Activated();
System.Threading.Thread.Sleep(TimeSpan.FromMilliseconds(80));
heartbeatSource.Terminating();
taskManager.Verify(x => x.Sweep(), Times.AtLeastOnce());
}
}
}