From cfa8fc2bba269b7357593fc074bb28c489cefa37 Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Tue, 11 Dec 2012 22:56:34 +0500 Subject: [PATCH] Removed the uow ctor from the SaveEventArgs for testing as the test will still prove that multi-threading works with the services without proving access to a single uow, the db will error first anyways. --- src/Umbraco.Core/EventArgs.cs | 25 +---------- src/Umbraco.Core/Services/ContentService.cs | 8 ++-- src/Umbraco.Core/Services/MediaService.cs | 2 +- .../Services/ThreadSafetyServiceTest.cs | 45 ++----------------- 4 files changed, 9 insertions(+), 71 deletions(-) diff --git a/src/Umbraco.Core/EventArgs.cs b/src/Umbraco.Core/EventArgs.cs index 24edc6003f..c6582a712d 100644 --- a/src/Umbraco.Core/EventArgs.cs +++ b/src/Umbraco.Core/EventArgs.cs @@ -42,30 +42,7 @@ namespace Umbraco.Core /// public int Id { get; set; } } - public class SaveEventArgs : System.ComponentModel.CancelEventArgs - { - /// - /// public constructor - /// - public SaveEventArgs() - { - - } - - /// - /// internal constructor used for unit testing - /// - /// - internal SaveEventArgs(IUnitOfWork unitOfWork) - { - UnitOfWork = unitOfWork; - } - - /// - /// Used for unit testing - /// - internal IUnitOfWork UnitOfWork { get; private set; } - } + public class SaveEventArgs : System.ComponentModel.CancelEventArgs { } public class NewEventArgs : System.ComponentModel.CancelEventArgs { /// diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 04fe684939..db67df1f5e 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -430,7 +430,7 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = RepositoryResolver.Current.Factory.CreateContentRepository(uow)) { - var e = new SaveEventArgs(uow); + var e = new SaveEventArgs(); if (Saving != null) Saving(content, e); @@ -490,7 +490,7 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = RepositoryResolver.Current.Factory.CreateContentRepository(uow)) { - var e = new SaveEventArgs(uow); + var e = new SaveEventArgs(); if (Saving != null) Saving(content, e); @@ -524,7 +524,7 @@ namespace Umbraco.Core.Services { var containsNew = contents.Any(x => x.HasIdentity == false); - var e = new SaveEventArgs(uow); + var e = new SaveEventArgs(); if (Saving != null) Saving(contents, e); @@ -573,7 +573,7 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = RepositoryResolver.Current.Factory.CreateContentRepository(uow)) { - var e = new SaveEventArgs(uow); + var e = new SaveEventArgs(); if (Saving != null) Saving(contents, e); diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index a8333e1691..347b9fdff6 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -204,7 +204,7 @@ namespace Umbraco.Core.Services { var repository = _mediaRepository; - var e = new SaveEventArgs(_unitOfWork); + var e = new SaveEventArgs(); if (Saving != null) Saving(media, e); diff --git a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs index 1be8d4afbe..0e8d04e187 100644 --- a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs +++ b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs @@ -59,7 +59,7 @@ namespace Umbraco.Tests.Services private Tuple _lastUowIdWithThread = null; [Test] - public void Ensure_All_Threads_Reference_Different_Units_Of_Work_Content_Service() + public void Ensure_All_Threads_Execute_Successfully_Content_Service() { //we will mimick the ServiceContext in that each repository in a service (i.e. ContentService) is a singleton var contentService = (ContentService)ServiceContext.ContentService; @@ -68,9 +68,6 @@ namespace Umbraco.Tests.Services Debug.WriteLine("Starting test..."); - //bind to event to determine what is going on during the saving process - ContentService.Saving += HandleSaving; - for (var i = 0; i < _maxThreadCount; i++) { var t = new Thread(() => @@ -124,7 +121,7 @@ namespace Umbraco.Tests.Services } [Test] - public void Ensure_All_Threads_Reference_Different_Units_Of_Work_Media_Service() + public void Ensure_All_Threads_Execute_Successfully_Media_Service() { //we will mimick the ServiceContext in that each repository in a service (i.e. ContentService) is a singleton var mediaService = (MediaService)ServiceContext.MediaService; @@ -133,9 +130,6 @@ namespace Umbraco.Tests.Services Debug.WriteLine("Starting test..."); - //bind to event to determine what is going on during the saving process - ContentService.Saving += HandleSaving; - for (var i = 0; i < _maxThreadCount; i++) { var t = new Thread(() => @@ -189,40 +183,7 @@ namespace Umbraco.Tests.Services } } - - private void HandleSaving(object sender, SaveEventArgs args) - { - if (_error == null) - { - lock (_locker) - { - //get the instance id of the unit of work - var uowId = ((PetaPocoUnitOfWork)args.UnitOfWork).InstanceId; - if (_lastUowIdWithThread == null) - { - Debug.WriteLine("Initial UOW found = " + uowId + " with thread id " + Thread.CurrentThread.ManagedThreadId); - - _lastUowIdWithThread = new Tuple( - Thread.CurrentThread.ManagedThreadId, uowId); - } - else - { - Debug.WriteLine("Next thread running. UOW found = " + uowId + " with thread id " + Thread.CurrentThread.ManagedThreadId); - - var newTuple = new Tuple( - Thread.CurrentThread.ManagedThreadId, uowId); - - //check if the uowId is the same as the last and if the thread Id's are different then we have a problem - if (newTuple.Item2 == _lastUowIdWithThread.Item2 - && newTuple.Item1 != _lastUowIdWithThread.Item1) - { - _error = new Exception("The threads: " + newTuple.Item1 + " and " + _lastUowIdWithThread.Item1 + " are both referencing the Unit of work: " + _lastUowIdWithThread.Item2); - } - } - } - } - } - + public void CreateTestData() { //Create and Save ContentType "umbTextpage" -> 1045