예제 #1
0
        public void ImageCaptchaFactoryTest()
        {
            var q = new GuidDictionaryTicketFactory(new TimeSpan(24, 0, 0));

            using var fac = new ImageCaptchaFactory(
                      new GuidDictionaryStringAnswerSaver(new TimeSpan(24, 0, 0)),
                      q,
                      new ImageCaptchaFactory.Settings()
            {
            }, true);
            var cap = fac.GenerateNewAsync().AsTask().Result;

            cap.Display.Save("abc.png");
            // Human test required. You should input it correct.
            var humanInputHere = "";
            var tic            = fac.VerifyAndGetTicketAsync(cap.Id, humanInputHere).AsTask().Result;

            Assert.AreNotEqual(null, tic);
            var check = q.VerifyAsync(tic).AsTask().Result;

            Assert.AreEqual(true, check);


            var cap2 = fac.GenerateNewAsync().AsTask().Result;

            cap2.Display.Save("abc.png");
            // Human test required. You should input it wrong.
            var humanInputHere2 = "";
            var tic2            = fac.VerifyAndGetTicketAsync(cap2.Id, humanInputHere2).AsTask().Result;

            Assert.AreEqual(null, tic);
        }
        public void GuidDictionaryTicketFactoryTest()
        {
            using var saver = new GuidDictionaryTicketFactory(new TimeSpan(0, 0, 0, 1));
            Assert.AreEqual(new TimeSpan(0, 0, 0, 1), saver.TicketsLifeTime);

            var abc = saver.GenerateNewAsync().AsTask().Result;
            var def = saver.GenerateNewAsync().AsTask().Result;
            var ghi = saver.GenerateNewAsync().AsTask().Result;

            Assert.AreEqual(true, saver.VerifyAsync(abc).AsTask().Result);

            Assert.AreEqual(true, saver.VerifyAsync(def).AsTask().Result);
            Assert.AreEqual(false, saver.VerifyAsync(def).AsTask().Result);

            Thread.Sleep(new TimeSpan(0, 0, 0, 1));
            Assert.AreEqual(false, saver.VerifyAsync(ghi).AsTask().Result);

            using var saver2 = new GuidDictionaryTicketFactory(new TimeSpan(0, 0, 10, 00));
            List<Task<string>> tasks = new List<Task<string>>();
            for (int i = 0; i < 10000; i++)
            {
                int i2 = i;
                tasks.Add(Task.Run(() =>
                {
                    return saver2.GenerateNewAsync().AsTask().Result;
                }));
            }
            Task.WaitAll(tasks.ToArray());

            List<Task> getTasks = new List<Task>();
            for (int i = 0; i < 10000; i++)
            {
                int i2 = i;
                getTasks.Add(Task.Run(() =>
                {
                    var r = saver2.VerifyAsync(tasks[i2].Result).AsTask().Result;
                    Assert.AreEqual(true, r);
                }));
            }
            Task.WaitAll(getTasks.ToArray());

            List<Task> getTasks2 = new List<Task>();
            for (int i = 0; i < 10000; i++)
            {
                int i2 = i;
                getTasks2.Add(Task.Run(() =>
                {
                    var r = saver2.VerifyAsync(tasks[i2].Result).AsTask().Result;
                    Assert.AreEqual(false, r);
                }));
            }
            Task.WaitAll(getTasks2.ToArray());
        }