mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
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:
@@ -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();
|
||||
|
||||
|
77
src/Orchard.Tests/EventsTests.cs
Normal file
77
src/Orchard.Tests/EventsTests.cs
Normal 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 + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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" />
|
||||
|
43
src/Orchard.Tests/Tasks/SweepGeneratorTests.cs
Normal file
43
src/Orchard.Tests/Tasks/SweepGeneratorTests.cs
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user