private static async Task <bool> EditSemaphoreDelayedBy(int delayTime, string seamaphoreId, string currentOwner)
        {
            using (var db = new MarvinEntities())
            {
                var semaphore = await db.semaphore.FirstOrDefaultAsync(a => a.semaphoreId == seamaphoreId);

                semaphore.currentOwnerId = currentOwner;
                Thread.Sleep(delayTime);
                try
                {
                    await db.SaveChangesAsync();
                }
                catch (Exception)
                {
                    return(false);
                }
                return(true);
            }
        }
 public void StoreWinsSemaphoreRaceCondition()
 {
     using (var db = new MarvinEntities())
     {
         var entry = db.semaphore.Add(new semaphore
         {
             currentOwnerId = "owner1",
             heartBeat      = TimeProvider.GetUtcNow(),
             semaphoreId    = "testSemaphore"
         });
         db.SaveChanges();
         //If this f***s up, be sure that the semaphore rowversion property concurrencymode, is set to fixed!
         var edit1 = EditSemaphoreDelayedBy(1000, entry.semaphoreId, "MrSlow");
         var edit2 = EditSemaphoreDelayedBy(1, entry.semaphoreId, "MrFast");
         Assert.That(edit1.Result, Is.False);
         Assert.That(edit2.Result, Is.True);
         db.Entry(entry).Reload();
         db.semaphore.Remove(entry);
         db.SaveChanges();
     }
 }
        public void EssenceGetsCleanedOnUpdate()
        {
            var originJob = ActiveJob();
            int essenceAmount;

            JobRepository.Add(originJob);
            Assert.That(JobRepository.ActiveJobs().Count(), Is.EqualTo(1));
            Assert.That(JobRepository.DoneJobs(), Is.Empty);
            Assert.That(JobRepository.WaitingJobs(), Is.Empty);
            var jobFromRepo = JobRepository.Get(originJob.Urn);

            jobFromRepo.Plan.GetCurrentTask().State = ExecutionState.Done;
            jobFromRepo.Plan.MoveToNextTask();
            JobRepository.Update(jobFromRepo);
            using (var db = new MarvinEntities())
            {
                essenceAmount = db.essence.Count();
            }
            //There should only be four essencefiles (two job essence and two task essence)
            Assert.That(essenceAmount, Is.EqualTo(4));
        }