public async void Create_ShallReturnCreatedJson() { var mockLogger = new Mock <ILogger <AeTitleJobProcessorValidator> >(); _serviceProvider.Setup(p => p.GetService(typeof(ILogger <AeTitleJobProcessorValidator>))).Returns(mockLogger.Object); var response = new HttpOperationResponse <object>(); response.Response = new HttpResponseMessage(HttpStatusCode.OK); response.Response.Content = new StringContent("Go!Clara"); _kubernetesClient .Setup(p => p.CreateNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>(), It.IsAny <object>())) .Returns(() => { return(Task.FromResult(response)); }); var claraAeTitle = new DestinationApplicationEntity { Name = "AETITLE", AeTitle = "AET", HostIp = "localhost", Port = 104 }; var result = await _controller.Create(claraAeTitle); _kubernetesClient.Verify(p => p.CreateNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>(), It.IsAny <object>()), Times.Once()); Assert.NotNull(result); var contentResult = result.Result as ContentResult; Assert.NotNull(contentResult); Assert.Equal(response.Response.Content.AsString(), contentResult.Content); }
public async void Create_ShallReturnBadRequestOnAddFailure() { var aeTitle = "AET"; var claraAeTitle = new DestinationApplicationEntity { Name = aeTitle, AeTitle = aeTitle, HostIp = "host", Port = 1 }; _repository.Setup(p => p.AddAsync(It.IsAny <DestinationApplicationEntity>(), It.IsAny <CancellationToken>())).Throws(new Exception("error")); var result = await _controller.Create(claraAeTitle); var objectResult = result.Result as ObjectResult; Assert.NotNull(objectResult); var problem = objectResult.Value as ProblemDetails; Assert.NotNull(problem); Assert.Equal("Error adding new Destination Application Entity.", problem.Title); Assert.Equal($"error", problem.Detail); Assert.Equal((int)HttpStatusCode.InternalServerError, problem.Status); _repository.Verify(p => p.AddAsync(It.IsAny <DestinationApplicationEntity>(), It.IsAny <CancellationToken>()), Times.Once()); }
public async void Delete_ShallReturnProblemOnFailure() { var value = "AET"; var entity = new DestinationApplicationEntity { AeTitle = value, Name = value }; _repository.Setup(p => p.FindAsync(It.IsAny <string>())).Returns(Task.FromResult(entity)); _repository.Setup(p => p.Remove(It.IsAny <DestinationApplicationEntity>())).Throws(new Exception("error")); var result = await _controller.Delete(value); var objectResult = result.Result as ObjectResult; Assert.NotNull(objectResult); var problem = objectResult.Value as ProblemDetails; Assert.NotNull(problem); Assert.Equal("Error deleting Destination Application Entity.", problem.Title); Assert.Equal("error", problem.Detail); Assert.Equal((int)HttpStatusCode.InternalServerError, problem.Status); _repository.Verify(p => p.FindAsync(value), Times.Once()); }
public async Task <ActionResult <string> > Create(DestinationApplicationEntity item) { try { if (!item.IsValid(_dicomAdapterRepository.AsQueryable().Select(p => p.Name), out IList <string> validationErrors)) { throw new ConfigurationException(string.Join(Environment.NewLine, validationErrors)); } await _dicomAdapterRepository.AddAsync(item); await _dicomAdapterRepository.SaveChangesAsync(); _logger.Log(LogLevel.Information, $"DICOM destination added AE Title={item.AeTitle}, Host/IP={item.HostIp}."); return(CreatedAtAction(nameof(GetAeTitle), new { name = item.Name }, item)); } catch (ConfigurationException ex) { return(Problem(title: "Validation error.", statusCode: (int)System.Net.HttpStatusCode.BadRequest, detail: ex.Message)); } catch (Exception ex) { _logger.Log(LogLevel.Error, ex, "Error adding new Destination Application Entity."); return(Problem(title: "Error adding new Destination Application Entity.", statusCode: (int)System.Net.HttpStatusCode.InternalServerError, detail: ex.Message)); } }
public void DestinationApplicationEntity_InvalidWhenNameIsEmpty() { var destinationApplicationEntity = new DestinationApplicationEntity(); destinationApplicationEntity.Name = " "; destinationApplicationEntity.AeTitle = "AET"; Assert.False(destinationApplicationEntity.IsValid(new List <string>(), out _)); }
public OutputJobTest() { _logger = new Mock <ILogger <ScuService> >(); _resultsService = new Mock <IResultsService>(); _config = new DestinationApplicationEntity(); _cancellationTokenSource = new CancellationTokenSource(); _resultsService.Setup(p => p.ReportFailure(It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CancellationToken>())); _resultsService.Setup(p => p.ReportSuccess(It.IsAny <Guid>(), It.IsAny <CancellationToken>())); }
public void DestinationApplicationEntity_ShallThrowOnNull() { DestinationApplicationEntity destinationApplicationEntity = null; Assert.Throws <ArgumentNullException>(() => destinationApplicationEntity.IsValid(new List <string>(), out _)); destinationApplicationEntity = new DestinationApplicationEntity(); Assert.Throws <ArgumentNullException>(() => destinationApplicationEntity.IsValid(null, out _)); }
public void DestinationApplicationEntity_InvalidWhenAeTitleIsEmpty() { var destinationApplicationEntity = new DestinationApplicationEntity(); destinationApplicationEntity.AeTitle = " "; Assert.False(destinationApplicationEntity.IsValid(new List <string>(), out _)); destinationApplicationEntity.AeTitle = "ABCDEFGHIJKLMNOPQRSTUVW"; Assert.False(destinationApplicationEntity.IsValid(new List <string>(), out _)); }
public void DestinationApplicationEntity_Valid() { var destinationApplicationEntity = new DestinationApplicationEntity(); destinationApplicationEntity.Name = "NAME"; destinationApplicationEntity.AeTitle = "AET"; destinationApplicationEntity.HostIp = "HOSTNAME"; destinationApplicationEntity.Port = 104; Assert.True(destinationApplicationEntity.IsValid(new List <string>(), out _)); }
public void DestinationApplicationEntity_InvalidIfAlreadyExists() { var destinationApplicationEntity = new DestinationApplicationEntity(); destinationApplicationEntity.Name = "NAME"; destinationApplicationEntity.AeTitle = "AET"; Assert.False(destinationApplicationEntity.IsValid(new List <string>() { "NAME" }, out _)); }
public void DestinationApplicationEntity_InvalidPort() { var destinationApplicationEntity = new DestinationApplicationEntity(); destinationApplicationEntity.Name = "NAME"; destinationApplicationEntity.HostIp = "SERVER"; destinationApplicationEntity.AeTitle = "AET"; destinationApplicationEntity.Port = 0; Assert.False(destinationApplicationEntity.IsValid(new List <string>(), out _)); destinationApplicationEntity.Port = 65536; Assert.False(destinationApplicationEntity.IsValid(new List <string>(), out _)); }
public async void Delete_Returns404IfNotFound() { var value = "AET"; var entity = new DestinationApplicationEntity { AeTitle = value, Name = value }; _repository.Setup(p => p.FindAsync(It.IsAny <string>())).Returns(Task.FromResult(default(DestinationApplicationEntity))); var result = await _controller.Delete(value); Assert.IsType <NotFoundResult>(result.Result); _repository.Verify(p => p.FindAsync(value), Times.Once()); }
public async void Create_ShallReturnBadRequestWHenCrdIsDisabled(string aeTitle, string hostIp, int port) { var claraAeTitle = new DestinationApplicationEntity { Name = aeTitle, AeTitle = aeTitle, HostIp = hostIp, Port = port }; var result = await _controller.Create(claraAeTitle); Assert.NotNull(result); var objectResult = result.Result as ObjectResult; Assert.NotNull(objectResult); var problem = objectResult.Value as ProblemDetails; Assert.NotNull(problem); Assert.Equal("Invalid destination specs provided", problem.Title); Assert.Equal((int)HttpStatusCode.InternalServerError, problem.Status); }
public async void Create_ShallReturnCreatedAtAction() { var aeTitle = "AET"; var claraAeTitle = new DestinationApplicationEntity { Name = aeTitle, AeTitle = aeTitle, HostIp = "host", Port = 1 }; _repository.Setup(p => p.AddAsync(It.IsAny <DestinationApplicationEntity>(), It.IsAny <CancellationToken>())); _repository.Setup(p => p.SaveChangesAsync(It.IsAny <CancellationToken>())); var result = await _controller.Create(claraAeTitle); Assert.IsType <CreatedAtActionResult>(result.Result); _repository.Verify(p => p.AddAsync(It.IsAny <DestinationApplicationEntity>(), It.IsAny <CancellationToken>()), Times.Once()); _repository.Verify(p => p.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once()); }
public async void Delete_ReturnsDeleted() { var value = "AET"; var entity = new DestinationApplicationEntity { AeTitle = value, Name = value }; _repository.Setup(p => p.FindAsync(It.IsAny <string>())).Returns(Task.FromResult(entity)); _repository.Setup(p => p.Remove(It.IsAny <DestinationApplicationEntity>())); _repository.Setup(p => p.SaveChangesAsync(It.IsAny <CancellationToken>())); var result = await _controller.Delete(value); Assert.NotNull(result.Value); Assert.Equal(value, result.Value.AeTitle); _repository.Verify(p => p.FindAsync(value), Times.Once()); _repository.Verify(p => p.Remove(entity), Times.Once()); _repository.Verify(p => p.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once()); }
public async void Create_ShallReturnBadRequestWithBadJobProcessType() { var aeTitle = "TOOOOOOOOOOOOOOOOOOOOOOOLONG"; var claraAeTitle = new DestinationApplicationEntity { Name = aeTitle, AeTitle = aeTitle, HostIp = "host", Port = 1 }; var result = await _controller.Create(claraAeTitle); var objectResult = result.Result as ObjectResult; Assert.NotNull(objectResult); var problem = objectResult.Value as ProblemDetails; Assert.NotNull(problem); Assert.Equal("Validation error.", problem.Title); Assert.Equal($"'{aeTitle}' is not a valid AE Title (source: DestinationApplicationEntity).", problem.Detail); Assert.Equal((int)HttpStatusCode.BadRequest, problem.Status); }
public async void Create_ShallReturnServiceUnavailableWHenCrdIsDisabled() { var claraAeTitle = new DestinationApplicationEntity { Name = "AETITLE", AeTitle = "AET", HostIp = "localhost", Port = 104 }; _configuration.Value.ReadAeTitlesFromCrd = false; var result = await _controller.Create(claraAeTitle); Assert.NotNull(result); var objectResult = result.Result as ObjectResult; Assert.NotNull(objectResult); var problem = objectResult.Value as ProblemDetails; Assert.NotNull(problem); Assert.Equal("Reading AE Titles from Kubernetes CRD is not enabled.", problem.Title); Assert.Equal(503, problem.Status); }
public async void Create_ShallPropagateErrorBackToCaller() { var response = new HttpOperationResponse <object>(); response.Response = new HttpResponseMessage(HttpStatusCode.OK); response.Response.Content = new StringContent("Go!Clara!"); _kubernetesClient .Setup(p => p.CreateNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>(), It.IsAny <object>())) .Throws(new HttpOperationException("error message") { Response = new HttpResponseMessageWrapper(new HttpResponseMessage(HttpStatusCode.Conflict), "error content") }); var destinationAeTitle = new DestinationApplicationEntity { Name = "AETITLE", AeTitle = "AETITLE", HostIp = "localhost", Port = 104 }; var result = await _controller.Create(destinationAeTitle); _kubernetesClient.Verify(p => p.CreateNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>(), It.IsAny <object>()), Times.Once()); Assert.NotNull(result); var objectResult = result.Result as ObjectResult; Assert.NotNull(objectResult); var problem = objectResult.Value as ProblemDetails; Assert.NotNull(problem); Assert.Equal("error message", problem.Detail); Assert.Equal("error content", problem.Title); Assert.Equal((int)HttpStatusCode.Conflict, problem.Status.Value); }
public OutputJob(TaskResponse task, ILogger <ScuService> logger, IResultsService iResultsService, DestinationApplicationEntity destination) { CopyBaseProperties(task); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); resultsService = iResultsService ?? throw new ArgumentNullException(nameof(iResultsService)); AeTitle = destination.AeTitle; HostIp = destination.HostIp; Port = destination.Port; FailedDicomFiles = new Dictionary <DicomFile, string>(); FailedFiles = new List <string>(); ProcessedDicomFiles = new List <DicomFile>(); PendingDicomFiles = new Queue <DicomFile>(); }