public void ExecuteGeneratesDownload() { var fileName = "nameOfDaFile"; var label = "daLabel"; var stream = new MemoryStream(new byte[0]); var transfer = new RemotingFileTransfer(stream); var farmService = this.mocks.StrictMock<IFarmService>(); var action = new ProjectFileDownload(farmService); var cruiseRequest = this.mocks.StrictMock<ICruiseRequest>(); var request = this.mocks.StrictMock<IRequest>(); var projectSpec = this.mocks.StrictMock<IProjectSpecifier>(); SetupResult.For(cruiseRequest.Request).Return(request); SetupResult.For(cruiseRequest.ProjectSpecifier).Return(projectSpec); SetupResult.For(cruiseRequest.RetrieveSessionToken()).Return(null); SetupResult.For(request.GetText("file")).Return(fileName); SetupResult.For(request.GetText("label")).Return(label); SetupResult.For(farmService.RetrieveFileTransfer(projectSpec, label + "\\" + fileName, null)).Return(transfer); mocks.ReplayAll(); var response = action.Execute(cruiseRequest); mocks.VerifyAll(); Assert.IsInstanceOf<FileTransferResponse>(response); var actual = response as FileTransferResponse; Assert.AreEqual(fileName, actual.FileName); Assert.AreSame(transfer, actual.FileTransfer); }
/// <summary> /// Retrieve a file transfer object. /// </summary> /// <param name="request"></param> public virtual FileTransferResponse RetrieveFileTransfer(FileTransferRequest request) { var response = new FileTransferResponse(request); try { // Validate that the path is valid var sourceProject = GetIntegrator(request.ProjectName).Project; var filePath = Path.Combine(sourceProject.ArtifactDirectory, request.FileName); var fileInfo = new FileInfo(filePath); if (!fileInfo.FullName.StartsWith(sourceProject.ArtifactDirectory, StringComparison.OrdinalIgnoreCase)) { var message = string.Format(CultureInfo.CurrentCulture, "Files can only be retrieved from the artefact folder - unable to retrieve {0}", request.FileName); Log.Warning(message); throw new CruiseControlException(message); } else if (fileInfo.FullName.StartsWith(Path.Combine(sourceProject.ArtifactDirectory, "buildlogs"), StringComparison.OrdinalIgnoreCase)) { var message = string.Format(CultureInfo.CurrentCulture, "Unable to retrieve files from the build logs folder - unable to retrieve {0}", request.FileName); Log.Warning(message); throw new CruiseControlException(message); } RemotingFileTransfer fileTransfer = null; if (fileInfo.Exists) { Log.Debug(string.Format(CultureInfo.CurrentCulture, "Retrieving file '{0}' from '{1}'", request.FileName, request.ProjectName)); fileTransfer = new RemotingFileTransfer(File.OpenRead(filePath)); } else { Log.Warning(string.Format(CultureInfo.CurrentCulture, "Unable to find file '{0}' in '{1}'", request.FileName, request.ProjectName)); } response.FileTransfer = fileTransfer; response.Result = ResponseResult.Success; } catch (Exception error) { response.Result = ResponseResult.Failure; response.ErrorMessages.Add( new ErrorMessage(error.Message)); } return response; }