Ejemplo n.º 1
0
        public void HttpProcessorTest()
        {
            var  account      = TestHelper.GetTestAccount();
            var  client       = account.GetClient();
            var  component    = account.CreateRandomComponentControl();
            var  unitTestType = client.GetOrCreateUnitTestTypeControl(SystemUnitTestTypes.HttpUnitTestType.SystemName);
            var  unitTest     = component.GetOrCreateUnitTestControl(unitTestType, "httpCheck");
            Guid unitTestId   = unitTest.Info.Id;

            using (var accountDbContext = AccountDbContext.CreateFromAccountId(account.Id))
            {
                var unitTestObj  = accountDbContext.UnitTests.Single(x => x.Id == unitTestId);
                var httpUnitTest = unitTestObj.HttpRequestUnitTest;

                var code = HttpRequestErrorCode.ErrorHtmlFound;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite.zidium.net/ok",
                    ErrorHtml      = "Все хорошо",
                    TimeoutSeconds = 5
                });
                foreach (var rule in httpUnitTest.Rules)
                {
                    rule.HttpRequestUnitTest   = httpUnitTest;
                    rule.HttpRequestUnitTestId = httpUnitTest.UnitTestId;
                    rule.Id = Guid.NewGuid();
                }

                accountDbContext.SaveChanges();

                var processor = new HttpRequestsProcessor(LogManager.GetCurrentClassLogger(), new CancellationToken());
                processor.ProcessAccount(account.Id, unitTestObj.Id);
                Assert.True(processor.SuccessCount >= 1);
                Assert.Equal(0, processor.ErrorCount);
            }
        }
Ejemplo n.º 2
0
        public void HttpRequestCheck()
        {
            var  account      = TestHelper.GetTestAccount();
            var  client       = account.GetClient();
            var  component    = account.CreateRandomComponentControl();
            var  unitTestType = client.GetOrCreateUnitTestTypeControl(SystemUnitTestTypes.HttpUnitTestType.SystemName);
            var  unitTest     = component.GetOrCreateUnitTestControl(unitTestType, "httpCheck");
            Guid unitTestId   = unitTest.Info.Id;

            using (var accountDbContext = AccountDbContext.CreateFromAccountId(account.Id))
            {
                var unitTestObj  = accountDbContext.UnitTests.Single(x => x.Id == unitTestId);
                var httpUnitTest = unitTestObj.HttpRequestUnitTest;

                var code = HttpRequestErrorCode.ErrorHtmlFound;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite.zidium.net/ok",
                    ErrorHtml      = "Все хорошо",
                    TimeoutSeconds = 5
                });

                code = HttpRequestErrorCode.InvalidResponseCode;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite.zidium.net/ok-22222222",
                    TimeoutSeconds = 5
                });

                code = HttpRequestErrorCode.Success;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite.zidium.net/ok",
                    TimeoutSeconds = 5,
                    SuccessHtml    = "Все хорошо"
                });

                code = HttpRequestErrorCode.SuccessHtmlNotFound;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite.zidium.net/ok",
                    TimeoutSeconds = 5,
                    SuccessHtml    = "Все хорошо 77777777"
                });

                code = HttpRequestErrorCode.TcpError;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://localhost:3451/",
                    TimeoutSeconds = 60
                });

                code = HttpRequestErrorCode.Timeout;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite.zidium.net/ok?wait=5",
                    TimeoutSeconds = 4
                });

                code = HttpRequestErrorCode.TooLargeResponse;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName     = code.ToString(),
                    Url             = "http://fakesite.zidium.net/ok",
                    TimeoutSeconds  = 5,
                    MaxResponseSize = 1
                });

                code = HttpRequestErrorCode.UnknownDomain;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http://fakesite22222.zidium.net/ok",
                    TimeoutSeconds = 5
                });

                code = HttpRequestErrorCode.UrlFormatError;
                httpUnitTest.Rules.Add(new HttpRequestUnitTestRule()
                {
                    DisplayName    = code.ToString(),
                    Url            = "http555555://fakesite.zidium.net/ok",
                    TimeoutSeconds = 5
                });

                int order = 0;
                foreach (var rule in httpUnitTest.Rules)
                {
                    rule.SortNumber            = order++;
                    rule.HttpRequestUnitTest   = httpUnitTest;
                    rule.HttpRequestUnitTestId = httpUnitTest.UnitTestId;
                    rule.Id = Guid.NewGuid();
                }
                httpUnitTest.ProcessAllRulesOnError = true;
                accountDbContext.SaveChanges();

                var processor = new HttpRequestsProcessor(LogManager.GetCurrentClassLogger(), new CancellationToken());
                processor.ProcessAccount(account.Id, unitTestId);
            }

            // проверим данные в БД
            using (var accountDbContext = AccountDbContext.CreateFromAccountId(account.Id))
            {
                var test = accountDbContext.UnitTests.Single(x => x.Id == unitTestId);
                Assert.True(test.NextExecutionDate > DateTime.Now);
                var codes = new[]
                {
                    HttpRequestErrorCode.ErrorHtmlFound,
                    HttpRequestErrorCode.InvalidResponseCode,
                    HttpRequestErrorCode.Success,
                    HttpRequestErrorCode.SuccessHtmlNotFound,
                    HttpRequestErrorCode.TcpError,
                    HttpRequestErrorCode.Timeout,
                    HttpRequestErrorCode.TooLargeResponse,
                    HttpRequestErrorCode.UnknownDomain,
                    HttpRequestErrorCode.UrlFormatError
                };
                foreach (var code in codes)
                {
                    var rule = test.HttpRequestUnitTest.Rules.Single(x => x.DisplayName == code.ToString());
                    Assert.Equal(code, rule.LastRunErrorCode);
                }
            }
        }
Ejemplo n.º 3
0
        public void HttpRequestUnitTestAddTest()
        {
            var account   = TestHelper.GetTestAccount();
            var user      = TestHelper.GetAccountAdminUser(account.Id);
            var component = account.CreateRandomComponentControl();

            // Добавим новый юнит-тест
            EditModel model;

            using (var controller = new HttpRequestCheckController(account.Id, user.Id))
            {
                var result = (ViewResultBase)controller.Edit(null, component.Info.Id);
                model = (EditModel)result.Model;
            }
            Assert.Equal(component.Info.Id, model.ComponentId);

            model.CheckName    = "Test_" + Guid.NewGuid();
            model.Method       = HttpRequestMethod.Get;
            model.ResponseCode = 200;
            model.Url          = "http://recursion.ru";

            using (var controller = new HttpRequestCheckController(account.Id, user.Id))
            {
                controller.Edit(model);
            }
            account.SaveAllCaches();

            // Проверим данные созданного юнит-теста
            Guid unittestId;

            using (var accountContext = AccountDbContext.CreateFromAccountId(account.Id))
            {
                var repository = accountContext.GetUnitTestRepository();
                var unitTest   = repository.QueryAll().SingleOrDefault(t => t.DisplayName == model.CheckName);
                Assert.NotNull(unitTest);
                Assert.Equal(SystemUnitTestTypes.HttpUnitTestType.Id, unitTest.TypeId);
                Assert.Equal(model.ComponentId, unitTest.ComponentId);
                Assert.Equal(model.CheckName, unitTest.DisplayName);
                Assert.Equal(model.Period, TimeSpanHelper.FromSeconds(unitTest.PeriodSeconds));
                Assert.Equal(ObjectColor.Gray, unitTest.NoSignalColor);
                var httpUnitTest = unitTest.HttpRequestUnitTest;
                Assert.NotNull(httpUnitTest);
                var rule = unitTest.HttpRequestUnitTest.Rules.Single();
                Assert.NotNull(rule);
                Assert.NotNull(rule.Url);
                unittestId = unitTest.Id;
            }

            // 1-ый запуск проверок
            // проверим, что агент НЕ будет выполнять проверку постоянно (был такой дефект, как будто период равен нулю)
            var processor = new HttpRequestsProcessor(LogManager.GetCurrentClassLogger(), new CancellationToken());

            processor.ProcessAccount(account.Id, unittestId);

            Assert.Equal(0, processor.ErrorCount);
            Assert.Equal(1, processor.SuccessCount);
            account.SaveAllCaches();

            // 2-ый запуск проверок
            processor = new HttpRequestsProcessor(LogManager.GetCurrentClassLogger(), new CancellationToken());
            processor.ProcessAccount(account.Id, unittestId);

            // проверка уже выполнена, время следующего выполнения еще НЕ настало
            Assert.Equal(0, processor.ErrorCount);
            Assert.Equal(0, processor.SuccessCount);
        }