Example #1
0
        public static RequestPageLoadTimeModel CreateRequestPageLoadTimeModel()
        {
            Random r = new Random();
            RequestPageLoadTimeModel model = new RequestPageLoadTimeModel();

            model.AvgTimeTakenMilliseconds = r.Next(1, 5000);
            model.RequestCount             = r.Next(1, 1000000);
            model.UriStemAggregate         = Path.GetRandomFileName() + "/" + Path.GetRandomFileName();
            return(model);
        }
        public void GetPageLoadTimes_Integration_ReturnsData()
        {
            string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest");

            List <W3CEvent> logEvents = new List <W3CEvent>();

            logEvents.Add(CreateW3CEvent("PageA", 17));
            logEvents.Add(CreateW3CEvent("PageA", 13));
            logEvents.Add(CreateW3CEvent("PageA", 21));
            logEvents.Add(CreateW3CEvent("PageA", 9));
            logEvents.Add(CreateW3CEvent("PageA", 40));

            logEvents.Add(CreateW3CEvent("PageB", 1000));
            logEvents.Add(CreateW3CEvent("PageB", 3000));

            using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath))
            {
                dbContext.Initialise();
                dbContext.BeginTransaction();

                ICreateRequestBatchCommand createRequestBatchCommand = new CreateRequestBatchCommand(dbContext, new RequestValidator());
                IRequestRepository         requestRepo = new RequestRepository(dbContext);

                // create the project
                ProjectModel project = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, project);

                // create the log file record
                LogFileModel logFile = DataHelper.CreateLogFileModel(project.Id);
                DataHelper.InsertLogFileModel(dbContext, logFile);

                // create the requests
                createRequestBatchCommand.Execute(logFile.Id, logEvents);

                // update all requests so the aggregate is different to the stem
                string sql = "UPDATE Requests SET UriStemAggregate = UriStem || '__'";
                dbContext.ExecuteNonQuery(sql);

                IEnumerable <RequestPageLoadTimeModel> result = requestRepo.GetPageLoadTimes(project.Id);
                Assert.AreEqual(2, result.Count());

                RequestPageLoadTimeModel pageAResult = result.Where(x => x.UriStemAggregate == "PageA__").SingleOrDefault();
                Assert.IsNotNull(pageAResult);
                Assert.AreEqual(5, pageAResult.RequestCount);
                Assert.AreEqual(20, pageAResult.AvgTimeTakenMilliseconds);

                RequestPageLoadTimeModel pageBResult = result.Where(x => x.UriStemAggregate == "PageB__").SingleOrDefault();
                Assert.IsNotNull(pageBResult);
                Assert.AreEqual(2, pageBResult.RequestCount);
                Assert.AreEqual(2000, pageBResult.AvgTimeTakenMilliseconds);
            }
        }
Example #3
0
        public void AvgLoadTimes_ValidProjectId_GetsAverageLoadTimesFromDatabase()
        {
            int projectId = new Random().Next(1, 1000);

            // setup
            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new ProjectModule(_dbContext, _projectValidator, _createProjectCommand, _deleteProjectCommand, _projectRepo, _logFileRepo, _requestRepo, _projectRequestAggregateRepo))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );
            RequestPageLoadTimeModel loadTime1 = DataHelper.CreateRequestPageLoadTimeModel();
            RequestPageLoadTimeModel loadTime2 = DataHelper.CreateRequestPageLoadTimeModel();
            RequestPageLoadTimeModel loadTime3 = DataHelper.CreateRequestPageLoadTimeModel();

            _requestRepo.GetPageLoadTimes(projectId).Returns(new RequestPageLoadTimeModel[] { loadTime1, loadTime2, loadTime3 });

            // execute
            var url      = Actions.Project.AvgLoadTimes(projectId);
            var response = browser.Post(url, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            _requestRepo.Received(1).GetPageLoadTimes(projectId);

            IEnumerable <RequestPageLoadTimeModel> result = JsonConvert.DeserializeObject <IEnumerable <RequestPageLoadTimeModel> >(response.Body.AsString());

            Assert.AreEqual(3, result.Count());
        }