Esempio n. 1
0
        public void ProcessReaderException()
        {
            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            ImapHelper.StoreMessage(@"..\..\Data\Unparse.eml");

            var imapReader = MockRepository.GenerateStub <IIMAPReader>();

            imapReader.Stub(s => s.IMAPAuth(null))
            .IgnoreArguments()
            .Do(new Action <IMAP_Client>(client => client.Authenticate(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass)));

            var exception = new Exception("ошибка при разборе письма в reader'е");

            imapReader.Stub(s => s.ProcessMime(null))
            .IgnoreArguments()
            .Do(new Action <Mime>(mime => { throw exception; }));
            var handler = new IMAPHandler(imapReader);

            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.IMAPAuth(Arg <IMAP_Client> .Is.Anything));
            imapReader.AssertWasCalled(r => r.PingReader());
            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything));
            imapReader.AssertWasNotCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            var existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);

            Assert.That(existsMessages.Count, Is.EqualTo(1), "Письмо было удалено сразу же после возникнования ошибок");
        }
Esempio n. 2
0
        public void CheckUIDTimeout()
        {
            var createTime = DateTime.Now;
            var info       = MockRepository.GenerateMock <UIDInfoForTesting>();

            var imapReader = MockRepository.GenerateStub <IIMAPReader>();
            var handler    = new IMAPHandler(imapReader);

            info.Stub(i => i.CreateTime).Return(createTime);

            Assert.That(handler.UIDTimeout(info), Is.False);

            createTime = createTime.AddMinutes(-(Settings.Default.UIDProcessTimeout + 1));

            info.BackToRecord(BackToRecordOptions.PropertyBehavior);
            SetupResult.For(info.CreateTime).Return(createTime);
            info.Replay();

            Assert.That(handler.UIDTimeout(info), Is.True);
        }
Esempio n. 3
0
        public void SimpleProcessImap()
        {
            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            ImapHelper.StoreMessage(@"..\..\Data\Unparse.eml");

            var imapReader = MockRepository.GenerateStub <IIMAPReader>();

            imapReader.Stub(s => s.IMAPAuth(null))
            .IgnoreArguments()
            .Do(new Action <IMAP_Client>(client => client.Authenticate(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass)));

            var handler = new IMAPHandler(imapReader);

            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.IMAPAuth(Arg <IMAP_Client> .Is.Anything));
            imapReader.AssertWasCalled(r => r.PingReader());
            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything));
            imapReader.AssertWasNotCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Anything));

            var existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);

            Assert.That(existsMessages.Count, Is.EqualTo(0), "Существуют письма в IMAP-папками с темами: {0}", existsMessages.Select(m => m.Envelope.Subject).Implode());
        }
 public EMAILSourceHandler()
 {
     IMAPHandler = new IMAPHandler(this);
     SourceType  = "EMAIL";
 }
Esempio n. 5
0
        public void ProcessMessageWithTimeoutOnError()
        {
            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            ImapHelper.StoreMessage(@"..\..\Data\Unparse.eml");

            var imapReader = MockRepository.GenerateStub <IIMAPReader>();

            imapReader.Stub(s => s.IMAPAuth(null))
            .IgnoreArguments()
            .Do(new Action <IMAP_Client>(client => client.Authenticate(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass)));

            var exception = new Exception("ошибка при разборе письма в reader'е");

            imapReader.Stub(s => s.ProcessMime(null))
            .IgnoreArguments()
            .Do(new Action <Mime>(mime => { throw exception; }));

            var handler = new IMAPHandler(imapReader);

            //Обрабатываем письмо первый раз: оно должно попасть в ErrorInfos
            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(0));

            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.IMAPAuth(Arg <IMAP_Client> .Is.Anything));
            imapReader.AssertWasCalled(r => r.PingReader());
            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything));
            imapReader.AssertWasNotCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            var existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);

            Assert.That(existsMessages.Count, Is.EqualTo(1), "Письмо было удалено");

            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(1));

            //Обрабатываем письмо второй раз: оно не должно быть обработано
            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything), options => options.Repeat.Times(2));
            imapReader.AssertWasNotCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            Assert.That(existsMessages.Count, Is.EqualTo(1), "Письмо было удалено");

            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(1));

            //Подменяем информацию о письме, чтобы сработал таймаут и в третий раз обрабатываем письмо: оно должно обработаться
            var realInfo = handler.ErrorInfos[0];
            var info     = MockRepository.GenerateMock <UIDInfoForTesting>();

            info.Stub(i => i.UID).Return(realInfo.UID);
            info.Stub(i => i.CreateTime).Return(DateTime.Now.AddMinutes(-(Settings.Default.UIDProcessTimeout + 1)));
            handler.ErrorInfos.Clear();
            handler.ErrorInfos.Add(info);

            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything), options => options.Repeat.Times(3));
            imapReader.AssertWasCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            Assert.That(existsMessages.Count, Is.EqualTo(0), "Существуют письма в IMAP-папками с темами: {0}", existsMessages.Select(m => m.Envelope.Subject).Implode());

            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(0));
        }