public void TestNoTempFile() { try { var adminService = new Mock <IAdminService>(); UploadQueueVMDC uploadRecord = new UploadQueueVMDC(); uploadRecord.UploadQueueItem = new UploadQueueDC(); uploadRecord.UploadQueueItem.Status = "C"; adminService.Setup(x => x.GetUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Returns(uploadRecord); adminService.Setup(x => x.CreateUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <UploadQueueDC>())).Returns(uploadRecord); var mockHandler = new Mock <IExceptionHandler>(); var mockBatchUploadFactory = new Mock <IDataStoreFactory>(); BatchUploadService svc = new BatchUploadService(new DocumentUploadService(), new QueueManager(adminService.Object), mockHandler.Object, mockBatchUploadFactory.Object); BatchDetails batchDetails = new BatchDetails(dbConnectionString, "NoSuchFile", tempTableName, appId, null, user); String guid = svc.QueueBatch(batchDetails); // Ensure one error logged mockHandler.Verify(x => x.ShieldException(It.IsAny <UploadConfigurationException>()), Times.Once()); // Ensure queue emptied Assert.AreEqual(0, svc.GetQueueSize()); } catch (Exception e) { String sr = e.Message; Assert.Fail(e.Message); } }
public void TestFakeStoredProc() { Reset(); UploadTestFile(); var adminService = new Mock <IAdminService>(); UploadQueueVMDC uploadRecord = GetUploadRecord(); adminService.Setup(x => x.CreateUploadQueue(It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>(), It.IsAny <UploadQueueDC>())).Returns(uploadRecord); adminService.Setup(x => x.GetUploadQueue(It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>())).Returns(uploadRecord); QueueManager qMgr = new QueueManager(adminService.Object); var mockHandler = new Mock <IExceptionHandler>(); BatchUploadService svc = new BatchUploadService(new DocumentUploadService(), qMgr, mockHandler.Object, new DataStoreFactory()); BatchDetails batchDetails = new BatchDetails(dbConnectionString, replacementFileName, tempTableName, appId, "NoSuchProc", user); String guid = svc.QueueBatch(batchDetails); Assert.IsTrue(svc.CheckStatus(new Guid(guid), user) == UploadStatus.Running); Thread.Sleep(1 * 1000); // Give the thread a chance to run // Ensure one error logged adminService.Verify(x => x.CreateUploadErrorLog(It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>(), It.IsAny <String>(), It.IsAny <UploadErrorLogDC>()), Times.Once()); // Ensure queue emptied Assert.AreEqual(0, svc.GetQueueSize()); // Ensure test file deleted CheckTestFileDeleted(); }
public void UpdateQueue(Guid batchDetailsId, UploadStatus status, String user) { UploadQueueVMDC uploadRecord = uploadQueueManager.GetUploadQueue(user, user, appID, "", batchDetailsId.ToString()); UploadQueueDC toUpdate = uploadRecord.UploadQueueItem; switch (status) { case UploadStatus.Cancelled: toUpdate.Status = "X"; break; case UploadStatus.Uploaded: toUpdate.Status = "U"; break; case UploadStatus.Processed: toUpdate.Status = "P"; break; case UploadStatus.Failed: toUpdate.Status = "F"; break; case UploadStatus.Queued: toUpdate.Status = "Q"; break; case UploadStatus.Running: toUpdate.Status = "R"; break; } uploadQueueManager.UpdateUploadQueue(user, user, appID, "", toUpdate); }
public void Delete(Guid batchDetailsId, String user) { UploadQueueVMDC uploadRecord = uploadQueueManager.GetUploadQueue(user, user, appID, "", batchDetailsId.ToString()); if (uploadRecord != null) { uploadQueueManager.DeleteUploadQueue(user, user, appID, "", batchDetailsId.ToString(), uploadRecord.UploadQueueItem.RowIdentifier.ToString()); } }
UploadQueueVMDC GetUploadRecord() { UploadQueueVMDC uploadRecord = new UploadQueueVMDC(); uploadRecord.UploadQueueItem = new UploadQueueDC(); uploadRecord.UploadQueueItem.Code = Guid.NewGuid(); uploadRecords.Add(uploadRecord); return(uploadRecord); }
public void TestQueueOfThreadsWithFailure() { Reset(); var adminService = new Mock <IAdminService>();//new AdminService.AdminServiceClient(); adminService.Setup(x => x.GetUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Callback(QueueUploadRecord); adminService.Setup(x => x.CreateUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <UploadQueueDC>())).Callback(AddToList); adminService.Setup(x => x.CreateUploadErrorLog(user, user, It.IsAny <String>(), "", It.IsAny <UploadErrorLogDC>())).Callback(SetErrorMessage); BatchUploadService svc = GetService(adminService); // Start a number of batch threads Guid[] guids = new Guid[5]; try { for (i = 0; i < 5; i++) { String tempFileName = "C:\\Temp\\Test" + i + "File.xls"; UploadTestFile(tempFileName); // Mock the admin service per call UploadQueueVMDC record = GetUploadRecord(); adminService.Setup(x => x.CreateUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <UploadQueueDC>())).Returns(record); adminService.Setup(x => x.GetUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Returns(record); BatchDetails batchDetails = new BatchDetails(dbConnectionString, tempFileName, tempTableName, appId, null, user); batchDetails.PostProcessing = Break; guids[i] = new Guid(svc.QueueBatch(batchDetails)); Assert.IsTrue(svc.CheckStatus(guids[i], user) == UploadStatus.Running); } } catch (Exception e) { throw e; } Thread.Sleep(5 * 1000); // Allow a bit of time for threads to all finish Assert.AreEqual(errors.Count, 5, "Wrong number of errors stored in queue"); for (int count = 0; count < 5; count++) { // OK all the errors are the same but we are at least checking that there are 5 adminService.Setup(x => x.GetUploadErrorLog(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Returns(errors[count]); Assert.AreEqual(svc.GetErrorMessage(guids[count], user), "Test Error Message"); CheckTestFileDeleted("C:\\Temp\\Test" + count + "File.xls"); } // Ensure all threads removed from queue Assert.AreEqual(svc.GetQueueSize(), 0); }
public void TestQueueOfThreads() { Reset(); working = true; var adminService = new Mock <IAdminService>();//new AdminService.AdminServiceClient(); adminService.Setup(x => x.GetUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Callback(QueueUploadRecord); adminService.Setup(x => x.CreateUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <UploadQueueDC>())).Callback(AddToList); adminService.Setup(x => x.CreateUploadErrorLog(user, user, It.IsAny <String>(), "", It.IsAny <UploadErrorLogDC>())).Callback(SetErrorMessage); BatchUploadService svc = GetService(adminService); // Start a number of batch threads, add new DoWork method to each that will wait until we set a local variable to TRUE Guid[] guids = new Guid[5]; try { for (i = 0; i < 5; i++) { String tempFileName = "C:\\Temp\\Test" + i + "File.xls"; UploadTestFile(tempFileName); // Mock the admin service per call UploadQueueVMDC record = GetUploadRecord(); adminService.Setup(x => x.CreateUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <UploadQueueDC>())).Returns(record); adminService.Setup(x => x.GetUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Returns(record); BatchDetails batchDetails = new BatchDetails(dbConnectionString, tempFileName, tempTableName, appId, null, user); batchDetails.PostProcessing = WaitForStopWorking; guids[i] = new Guid(svc.QueueBatch(batchDetails)); Assert.IsTrue(svc.CheckStatus(guids[i], user) == UploadStatus.Running); } } catch (Exception e) { throw e; } finally { working = false; } Thread.Sleep(6 * 1000); // Allow time for all waiting threads to wake up and find out that they can stop working for (int count = 0; count < 5; count++) { CheckTestFileDeleted("C:\\Temp\\Test" + count + "File.xls"); } // Ensure all threads removed from queue Assert.AreEqual(svc.GetQueueSize(), 0); }
public void TestBatchUpload() { try { Reset(); UploadTestFile(); var adminService = new Mock <IAdminService>(); UploadQueueVMDC uploadRecord = new UploadQueueVMDC(); uploadRecord.UploadQueueItem = new UploadQueueDC(); uploadRecord.UploadQueueItem.Status = "C"; adminService.Setup(x => x.GetUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <String>())).Returns(uploadRecord); adminService.Setup(x => x.CreateUploadQueue(user, user, It.IsAny <String>(), "", It.IsAny <UploadQueueDC>())).Returns(uploadRecord); BatchUploadService svc = GetService(adminService); BatchDetails batchDetails = new BatchDetails(dbConnectionString, replacementFileName, tempTableName, appId, null, user); working = true; batchDetails.PostProcessing = WaitForStopWorking; String guid; try { guid = svc.QueueBatch(batchDetails); } catch (Exception e) { throw e; } finally { working = false; } // Wait for waiters to wake up Thread.Sleep(5 * 1000); Assert.IsTrue(svc.CheckStatus(new Guid(guid), user) == UploadStatus.Processed, "File upload did not complete"); Assert.AreEqual(errors.Count, 0); // Ensure temporary file has been deleted and queue emptied CheckTestFileDeleted(); Assert.AreEqual(0, svc.GetQueueSize()); } catch (Exception e) { String sr = e.Message; Assert.Fail(e.Message); } }
public Guid Queue(BatchDetails batchDetails) { UploadQueueDC dc = new UploadQueueDC(); dc.ApplicationCode = batchDetails.AppId; dc.ConnectionString = batchDetails.DatabaseConnectionString; dc.TempTableName = batchDetails.TableName; dc.StoredProcedure = batchDetails.StoredProcedure; dc.UploadFileName = batchDetails.FileName; dc.Status = "R"; UploadQueueVMDC result = uploadQueueManager.CreateUploadQueue(batchDetails.CurrentUser, batchDetails.CurrentUser, appID, "", dc); batchDetails.ProcessId = result.UploadQueueItem.Code; return(result.UploadQueueItem.Code); }
public BatchDetails GetBatchDetails(Guid batchDetailsId, String user) { UploadQueueVMDC uploadRecord = uploadQueueManager.GetUploadQueue(user, user, appID, "", batchDetailsId.ToString()); if (uploadRecord != null) { // TODO use AutoMapper and VMDC object here?? What does a BatchDetails give me? BatchDetails batchDetails = new BatchDetails(uploadRecord.UploadQueueItem.ConnectionString, uploadRecord.UploadQueueItem.UploadFileName, uploadRecord.UploadQueueItem.TempTableName, batchDetailsId, uploadRecord.UploadQueueItem.StoredProcedure, user); return(batchDetails); } return(null); }
public UploadStatus GetStatus(Guid batchDetailsId, String user) { UploadQueueVMDC uploadRecord = uploadQueueManager.GetUploadQueue(user, user, appID, "", batchDetailsId.ToString()); UploadStatus status = UploadStatus.Invalid; if (uploadRecord == null || uploadRecord.UploadQueueItem == null) { return(status); } switch (uploadRecord.UploadQueueItem.Status) { case "X": status = UploadStatus.Cancelled; break; case "P": status = UploadStatus.Processed; break; case "F": status = UploadStatus.Failed; break; case "R": status = UploadStatus.Running; break; case "Q": status = UploadStatus.Queued; break; case "U": status = UploadStatus.Uploaded; break; } return(status); }