public void GetByUriStemAggregate_Integration_ReturnsData() { string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest"); List <W3CEvent> logEvents = null; string uriStemAggregate = Guid.NewGuid().ToString(); int expectedCount = new Random().Next(3, 7); using (StreamReader logStream = new StreamReader(TestAsset.ReadTextStream(TestAsset.LogFile))) { logEvents = W3CEnumerable.FromStream(logStream).ToList(); } for (int i = 0; i < expectedCount; i++) { logEvents[i].cs_uri_stem = uriStemAggregate; } using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath)) { dbContext.Initialise(); dbContext.BeginTransaction(); IRequestRepository requestRepo = new RequestRepository(dbContext); ICreateRequestBatchCommand createRequestBatchCommand = new CreateRequestBatchCommand(dbContext, new RequestValidator()); // create the project ProjectModel project = DataHelper.CreateProjectModel(); DataHelper.InsertProjectModel(dbContext, project); ProjectModel project2 = DataHelper.CreateProjectModel(); DataHelper.InsertProjectModel(dbContext, project2); // create log file and request records for each LogFileModel logFile = DataHelper.CreateLogFileModel(project.Id); DataHelper.InsertLogFileModel(dbContext, logFile); createRequestBatchCommand.Execute(logFile.Id, logEvents); LogFileModel logFile2 = DataHelper.CreateLogFileModel(project2.Id); DataHelper.InsertLogFileModel(dbContext, logFile2); createRequestBatchCommand.Execute(logFile2.Id, logEvents); IEnumerable <RequestModel> result = requestRepo.GetByUriStemAggregate(project.Id, uriStemAggregate); Assert.IsNotNull(result); Assert.AreEqual(expectedCount, result.Count()); foreach (RequestModel rm in result) { Assert.AreEqual(logFile.Id, rm.LogFileId); } } }
public void Execute_IntegrationTest_SQLite() { string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest"); List <W3CEvent> logEvents = null; using (StreamReader logStream = new StreamReader(TestAsset.ReadTextStream(TestAsset.LogFile))) { logEvents = W3CEnumerable.FromStream(logStream).ToList(); } using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath)) { dbContext.Initialise(); dbContext.BeginTransaction(); ICreateProjectCommand createProjectCommand = new CreateProjectCommand(dbContext, new ProjectValidator()); ICreateRequestBatchCommand createRequestBatchCommand = new CreateRequestBatchCommand(dbContext, new RequestValidator()); IDeleteLogFileCommand deleteLogFileCommand = new DeleteLogFileCommand(dbContext); // create the project first so we have one ProjectModel project = DataHelper.CreateProjectModel(); // create 2 the log files LogFileModel logFile1 = DataHelper.CreateLogFileModel(project.Id); DataHelper.InsertLogFileModel(dbContext, logFile1); LogFileModel logFile2 = DataHelper.CreateLogFileModel(project.Id); DataHelper.InsertLogFileModel(dbContext, logFile2); // create the request batch createRequestBatchCommand.Execute(logFile1.Id, logEvents); createRequestBatchCommand.Execute(logFile2.Id, logEvents); int rowCount = dbContext.ExecuteScalar <int>("SELECT COUNT(*) FROM Requests WHERE LogFileId = @LogFileId", new { LogFileId = logFile1.Id }); Assert.AreEqual(logEvents.Count, rowCount); // run the delete command deleteLogFileCommand.Execute(logFile1.Id); // there should be no requests for logFile1, but requests for logFile2 should still exist rowCount = dbContext.ExecuteScalar <int>("SELECT COUNT(*) FROM Requests WHERE LogFileId = @LogFileId", new { LogFileId = logFile1.Id }); Assert.AreEqual(0, rowCount); rowCount = dbContext.ExecuteScalar <int>("SELECT COUNT(*) FROM Requests WHERE LogFileId = @LogFileId", new { LogFileId = logFile2.Id }); Assert.AreEqual(logEvents.Count, rowCount); rowCount = dbContext.ExecuteScalar <int>("SELECT COUNT(*) FROM LogFiles"); Assert.AreEqual(1, rowCount); } }
public void Execute_IntegrationTest_SQLite() { string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest"); List <W3CEvent> logEvents = null; using (StreamReader logStream = new StreamReader(TestAsset.ReadTextStream(TestAsset.LogFile))) { logEvents = W3CEnumerable.FromStream(logStream).ToList(); } using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath)) { dbContext.Initialise(); dbContext.BeginTransaction(); // create the project first so we have one ProjectModel project = DataHelper.CreateProjectModel(); DataHelper.InsertProjectModel(dbContext, project); // create the log file LogFileModel logFile = DataHelper.CreateLogFileModel(project.Id); DataHelper.InsertLogFileModel(dbContext, logFile); // create the request batch ICreateRequestBatchCommand createRequestBatchCommand = new CreateRequestBatchCommand(dbContext, new RequestValidator()); createRequestBatchCommand.Execute(logFile.Id, logEvents); int rowCount = dbContext.ExecuteScalar <int>("SELECT COUNT(*) FROM Requests"); Assert.AreEqual(logEvents.Count, rowCount); } }
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); } }
public void GetByLogFile_Integration_ReturnsData() { string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest"); List <W3CEvent> logEvents = null; int logFileId = 0; using (StreamReader logStream = new StreamReader(TestAsset.ReadTextStream(TestAsset.LogFile))) { logEvents = W3CEnumerable.FromStream(logStream).ToList().GetRange(0, 10); } using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath)) { dbContext.Initialise(); dbContext.BeginTransaction(); IRequestRepository requestRepo = new RequestRepository(dbContext); ICreateRequestBatchCommand createRequestBatchCommand = new CreateRequestBatchCommand(dbContext, new RequestValidator()); // create the project ProjectModel project = DataHelper.CreateProjectModel(); DataHelper.InsertProjectModel(dbContext, project); // create multiple log file records for (var i = 0; i < 3; i++) { LogFileModel logFile = DataHelper.CreateLogFileModel(project.Id); DataHelper.InsertLogFileModel(dbContext, logFile); createRequestBatchCommand.Execute(logFile.Id, logEvents); if (logFileId == 0) { logFileId = logFile.Id; } } IEnumerable <RequestModel> result = requestRepo.GetByLogFile(logFileId); Assert.IsNotNull(result); Assert.AreEqual(logEvents.Count, result.Count()); } }