コード例 #1
0
        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);
        }