public void Bug_Trap_Spam_Votes_Repository() { Submission beforesubmission = GetSubmission(); int exCount = 0; Func <VoteResponse> vote1 = new Func <VoteResponse>(() => { var principle = new System.Security.Principal.GenericPrincipal(new System.Security.Principal.GenericIdentity("User500CCP", "Bearer"), null); System.Threading.Thread.CurrentPrincipal = principle; Interlocked.Increment(ref exCount); using (var repo = new Voat.Data.Repository()) { return(repo.VoteSubmission(submissionID, 1, IpHash.CreateHash("127.0.0.1"))); } }); Func <VoteResponse> vote2 = new Func <VoteResponse>(() => { var principle = new System.Security.Principal.GenericPrincipal(new System.Security.Principal.GenericIdentity("User100CCP", "Bearer"), null); System.Threading.Thread.CurrentPrincipal = principle; Interlocked.Increment(ref exCount); using (var repo = new Voat.Data.Repository()) { return(repo.VoteSubmission(submissionID, 1, IpHash.CreateHash("127.0.0.1"))); } }); var tasks = new List <Task <VoteResponse> >(); for (int i = 0; i < count; i++) { if (i % 2 == 0) { tasks.Add(Task.Run(vote1)); } else { tasks.Add(Task.Run(vote2)); } } Task.WaitAll(tasks.ToArray()); Submission aftersubmission = GetSubmission(); Assert.AreEqual(count, exCount, "Execution count is off"); AssertData(beforesubmission, aftersubmission); }