Ejemplo n.º 1
0
 public void MainTest()
 {
     Assert.False(BannerHelper.FindBanner("http://mail.ru"));
     Assert.True(BannerHelper.FindBanner("http://fakesite.zidium.net/"));
 }
        protected SendUnitTestResultRequestData CheckForBanner(
            Guid accountId,
            AccountDbContext accountDbContext,
            UnitTest unitTest,
            ILogger logger)
        {
            logger.Debug("Поиск баннера Zidium для проверки " + unitTest.DisplayName);
            SendUnitTestResultRequestData result = null;

            // Из всех правил получим главные уникальные страницы сайтов
            var urls = unitTest.HttpRequestUnitTest.Rules.Select(t =>
            {
                var uri = new Uri(t.Url);
                return(uri.Scheme + @"://" + uri.Authority);
            }).Distinct().ToArray();

            // Проверим, что на каждой главной странице есть баннер
            var    hasBanner   = true;
            string noBannerUrl = null;

            foreach (var url in urls)
            {
                logger.Debug("Поиск баннера Zidium на странице " + url);
                try
                {
                    var hasPageBanner = BannerHelper.FindBanner(url);
                    logger.Debug("Результат: " + hasPageBanner + ", страница: " + url);

                    // Если баннер не найден и нет интернета, то отложим проверку
                    if (hasPageBanner == false && IsInternetWork() == false)
                    {
                        logger.Debug("Интернет не работает, поиск баннера отложен");
                        return(null);
                    }

                    if (hasPageBanner == false)
                    {
                        noBannerUrl = url;
                        hasBanner   = false;
                        break;
                    }
                }
                catch (Exception exception)
                {
                    logger.Warn("Ошибка проверки баннера " + url + ": " + exception.Message);
                    noBannerUrl = url;
                    hasBanner   = false;
                    break;
                }
            }

            // Отправляем результат диспетчеру
            // Признак баннера будет обновлён, если лимит превышен, вернётся false
            var dispatcher = GetDispatcherClient();
            var response   = dispatcher.SendHttpUnitTestBanner(accountId, unitTest.Id, hasBanner);

            if (!response.Success)
            {
                logger.Error("Не удалось проверить лимит http-проверок без баннера: " + response.ErrorMessage);
                return(null);
            }

            // Если лимит превышен, то проверка уже отключена диспетчером, осталось поменять результат
            if (response.Data.CanProcessUnitTest == false)
            {
                result = new SendUnitTestResultRequestData()
                {
                    Result  = UnitTestResult.Alarm,
                    Message = "Проверка отключена, не найден баннер Zidium на странице " + noBannerUrl
                };
                logger.Warn(result.Message);
            }
            else
            {
                if (!hasBanner)
                {
                    logger.Debug("Баннер Zidium не найден, но проверка включена, так как не превышен лимит бесплатных проверок");
                }
                else
                {
                    logger.Info("Баннер Zidium подтверждён для проверки " + unitTest.DisplayName);
                }
            }
            accountDbContext.SaveChanges();
            return(result);
        }