diff --git a/src/Quartz.Tests.Integration/FailFastLoggerFactoryAdapter.cs b/src/Quartz.Tests.Integration/FailFastLoggerFactoryAdapter.cs new file mode 100644 index 000000000..37a4aa1f2 --- /dev/null +++ b/src/Quartz.Tests.Integration/FailFastLoggerFactoryAdapter.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; + +using Common.Logging; +using Common.Logging.Factory; + +namespace Quartz.Tests.Integration +{ + internal class FailFastLoggerFactoryAdapter : ILoggerFactoryAdapter + { + private static readonly List errors = new List(); + + public ILog GetLogger(Type type) + { + return new FailFastLogger(this); + } + + public ILog GetLogger(string name) + { + return new FailFastLogger(this); + } + + private void ReportError(string error) + { + errors.Add(error); + } + + public static List Errors + { + get { return errors; } + } + + private class FailFastLogger : AbstractLogger + { + private readonly FailFastLoggerFactoryAdapter parent; + + public FailFastLogger(FailFastLoggerFactoryAdapter parent) + { + this.parent = parent; + } + + protected override void WriteInternal(LogLevel level, object message, Exception exception) + { + parent.ReportError("" + message); + } + + public override bool IsTraceEnabled + { + get { return false; } + } + + public override bool IsDebugEnabled + { + get { return false; } + } + + public override bool IsErrorEnabled + { + get { return true; } + } + + public override bool IsFatalEnabled + { + get { return true; } + } + + public override bool IsInfoEnabled + { + get { return false; } + } + + public override bool IsWarnEnabled + { + get { return true; } + } + } + } +} \ No newline at end of file diff --git a/src/Quartz.Tests.Integration/Impl/AdoJobStore/AdoJobStoreSmokeTest.cs b/src/Quartz.Tests.Integration/Impl/AdoJobStore/AdoJobStoreSmokeTest.cs index 113b755b1..057c7e4af 100644 --- a/src/Quartz.Tests.Integration/Impl/AdoJobStore/AdoJobStoreSmokeTest.cs +++ b/src/Quartz.Tests.Integration/Impl/AdoJobStore/AdoJobStoreSmokeTest.cs @@ -4,6 +4,8 @@ using System.Diagnostics; using System.Threading; +using Common.Logging; + using NUnit.Framework; using Quartz.Impl; @@ -22,11 +24,11 @@ public class AdoJobStoreSmokeTest private bool clearJobs = true; private bool scheduleJobs = true; private bool clustered = true; + private ILoggerFactoryAdapter oldAdapter; static AdoJobStoreSmokeTest() { - dbConnectionStrings["Oracle"] = - "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xe)));User Id=quartznet;Password=quartznet;"; + dbConnectionStrings["Oracle"] = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xe)));User Id=quartznet;Password=quartznet;"; dbConnectionStrings["SQLServer"] = "Server=(local);Database=quartz;Trusted_Connection=True;"; dbConnectionStrings["SQLServerCe"] = @"Data Source=C:\quartznet.sdf;Persist Security Info=False;"; dbConnectionStrings["MySQL"] = "Server = localhost; Database = quartz; Uid = quartznet; Pwd = quartznet"; @@ -35,6 +37,21 @@ static AdoJobStoreSmokeTest() dbConnectionStrings["Firebird"] = "User=SYSDBA;Password=masterkey;Database=c:\\quartznet;DataSource=localhost;Port=3050;Dialect=3; Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;"; } + [TestFixtureSetUp] + public void FixtureSetUp() + { + // set Adapter to report problems + oldAdapter = LogManager.Adapter; + LogManager.Adapter = new FailFastLoggerFactoryAdapter(); + } + + [TestFixtureTearDown] + public void FixtureTearDown() + { + // default back to old + LogManager.Adapter = oldAdapter; + } + [Test] public void TestFirebird() { @@ -259,6 +276,8 @@ private void RunAdoJobStoreTest(string dbProvider, string connectionStringId) IScheduler sched = sf.GetScheduler(); SmokeTestPerformer performer = new SmokeTestPerformer(); performer.Test(sched, clearJobs, scheduleJobs); + + Assert.IsEmpty(FailFastLoggerFactoryAdapter.Errors, "Found error from logging output"); } diff --git a/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2008.csproj b/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2008.csproj index 145ae9297..64fb72128 100644 --- a/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2008.csproj +++ b/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2008.csproj @@ -119,6 +119,7 @@ + Code diff --git a/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2010.csproj b/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2010.csproj index 9cbd51dc7..5629e2ee2 100644 --- a/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2010.csproj +++ b/src/Quartz.Tests.Integration/Quartz.Tests.Integration.2010.csproj @@ -101,6 +101,7 @@ + Code diff --git a/src/Quartz/Impl/AdoJobStore/JobStoreSupport.cs b/src/Quartz/Impl/AdoJobStore/JobStoreSupport.cs index a69168805..413c3073b 100644 --- a/src/Quartz/Impl/AdoJobStore/JobStoreSupport.cs +++ b/src/Quartz/Impl/AdoJobStore/JobStoreSupport.cs @@ -2562,11 +2562,13 @@ public virtual IList TriggersFired(IList t } catch (JobPersistenceException jpe) { + log.ErrorFormat("Caught job persistence exception: " + jpe.Message, jpe); result = new TriggerFiredResult(jpe); } - catch (Exception re) + catch (Exception ex) { - result = new TriggerFiredResult(re); + log.ErrorFormat("Caught exception: " + ex.Message, ex); + result = new TriggerFiredResult(ex); } results.Add(result); } diff --git a/src/Quartz/Impl/AdoJobStore/StdAdoDelegate.cs b/src/Quartz/Impl/AdoJobStore/StdAdoDelegate.cs index de4150c3f..897c45f97 100644 --- a/src/Quartz/Impl/AdoJobStore/StdAdoDelegate.cs +++ b/src/Quartz/Impl/AdoJobStore/StdAdoDelegate.cs @@ -2197,15 +2197,15 @@ public int UpdateFiredTrigger(ConnectionAndTransactionHolder conn, IOperableTrig { AddCommandParameter(ps, "jobName", trigger.JobKey.Name); AddCommandParameter(ps, "jobGroup", trigger.JobKey.Group); - AddCommandParameter(ps, "isNonConcurrent", job.ConcurrentExectionDisallowed); - AddCommandParameter(ps, "requestsRecover", job.RequestsRecovery); + AddCommandParameter(ps, "isNonConcurrent", GetDbBooleanValue(job.ConcurrentExectionDisallowed)); + AddCommandParameter(ps, "requestsRecover", GetDbBooleanValue(job.RequestsRecovery)); } else { AddCommandParameter(ps, "jobName", null); AddCommandParameter(ps, "JobGroup", null); - AddCommandParameter(ps, "isNonConcurrent", false); - AddCommandParameter(ps, "requestsRecover", false); + AddCommandParameter(ps, "isNonConcurrent", GetDbBooleanValue(false)); + AddCommandParameter(ps, "requestsRecover", GetDbBooleanValue(false)); } AddCommandParameter(ps, "entryId", trigger.FireInstanceId);