public void UploadTest_TC_Sw_GroundCore_Classes_0009_A1_A() { UploadFileDistributionRequest objUploadFileDistributionRequest = null; string res = PIS.Ground.Core.Utility.FtpUtility_Accessor.Upload(ref objUploadFileDistributionRequest); Assert.AreNotEqual(string.Empty, res); }
public void GetFolderIdFromSimilarT2GFolderUsableOnT2GServer() { Guid lRequestId = Guid.NewGuid(); string lCRCGuid = "1111-2222-3333-4444"; //Build fake folder on T2G Server that will be answered by EnumFolders function _testFolder.acquisitionState = acquisitionStateEnum.acquisitionSuccess; _testFolder.expirationDate = new DateTime(3099, 12, 31); _testFolder.folderId = 1; _testFolder.name = Guid.NewGuid().ToString() + "|" + lCRCGuid; _fileTransferPortMock.Setup(x => x.enumFolders(It.IsAny <enumFoldersInput>())).Returns(_enumFoldersOutput); //Build folder to use as a mock in the UploadFileDistributionRequest _remoteFolderMock.Setup(x => x.CRCGuid).Returns(lCRCGuid); _remoteFolderMock.Setup(x => x.FolderName).Returns(lRequestId.ToString() + lCRCGuid); _remoteFolderMock.SetupProperty(x => x.FolderId); _remoteFolderMock.SetupProperty(x => x.ExpirationDate); UploadFileDistributionRequest lUploadFileRequest = new UploadFileDistributionRequest(lRequestId, _remoteFolderMock.Object, new DateTime(2099, 12, 31), false, _recs, DateTime.Now, "", FileTransferMode.AnyBandwidth, 1, null, null); _t2gFileDistMgr.GetFolderIdFromSimilarT2GFolder(ref lUploadFileRequest); Assert.AreEqual(1, lUploadFileRequest.Folder.FolderId); }
public void GetFolderIdFromSimilarT2GFolderNoFolderOnT2GServer() { Guid lRequestId = Guid.NewGuid(); string lCRCGuid = "1111-2222-3333-4444"; _remoteFolderMock.Setup(x => x.CRCGuid).Returns(lCRCGuid); _remoteFolderMock.Setup(x => x.FolderName).Returns(lRequestId.ToString() + lCRCGuid); UploadFileDistributionRequest lUploadFileRequest = new UploadFileDistributionRequest(lRequestId, _remoteFolderMock.Object, new DateTime(2099, 12, 31), false, _recs, DateTime.Now, "", FileTransferMode.AnyBandwidth, 1, null, null); _t2gFileDistMgr.GetFolderIdFromSimilarT2GFolder(ref lUploadFileRequest); Assert.AreEqual(0, lUploadFileRequest.Folder.FolderId); }
/// <summary>Process the distribute request described by request.</summary> /// <exception cref="NotSupportedException">Thrown when the requested operation is not supported.</exception> /// <param name="request">The request.</param> private void ProcessDistributeRequest(IRequestContext request) { BaselineDistributingRequestContext requestContext = request as BaselineDistributingRequestContext; if (requestContext == null) { throw new ArgumentException(Logs.ERROR_INVALID_BASELINE_DISTRIBUTE_REQUEST_CONTEXT, "request"); } List <string> parametersList = new List <string>() { requestContext.ElementId, requestContext.BaselineVersion }; using (StringWriter stringWriter = new StringWriter()) { _stringListXmlSerializer.Serialize(stringWriter, parametersList); if (requestContext.TransferAttemptsDone == 1) { DataPackageService.sendNotificationToGroundApp( request.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionPending, stringWriter.ToString()); } if (_trainToGroundManager.IsElementOnlineAndPisBaselineUpToDate(requestContext.ElementId)) { ServiceInfo serviceInfo; if (T2GManagerErrorEnum.eSuccess == _trainToGroundManager.GetAvailableServiceData(requestContext.ElementId, (int)Core.Common.eServiceID.eSrvSIF_DataPackageServer, out serviceInfo)) { // Rebuild the url of the service in case that it has changed since the last invocation. requestContext.Endpoint = "http://" + serviceInfo.ServiceIPAddress + ":" + serviceInfo.ServicePortNumber; try { using (PIS.Ground.DataPackage.DataPackageTrainServiceClient lTrainDataPackageClient = new PIS.Ground.DataPackage.DataPackageTrainServiceClient("DataPackageEndpoint", requestContext.Endpoint)) { try { List <RecipientId> recipients = new List <RecipientId>() { new RecipientId() { ApplicationId = ConfigurationSettings.AppSettings["ApplicationId"], SystemId = requestContext.ElementId, MissionId = string.Empty } }; DataPackageService.mWriteLog(TraceType.INFO, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.INFO_FUTURE_BASELINE, requestContext.ElementId, requestContext.BaselineVersion); if (!string.IsNullOrEmpty(requestContext.BaselineVersion)) { List <PackageParams> packagesParamsList; List <string> filesUrlsList; if (GetBaselineFilesURLs(requestContext.RequestId, requestContext.ElementId, requestContext.BaselineVersion, requestContext.IsIncremental, true, out filesUrlsList, out packagesParamsList)) { try { using (IRemoteDataStoreClient remoteDataStore = _remoteDataStoreFactory.GetRemoteDataStoreInstance()) { filesUrlsList.Add(ConfigurationSettings.AppSettings["RemoteDataStoreUrl"] + remoteDataStore.createBaselineFile( requestContext.RequestId, requestContext.ElementId, requestContext.BaselineVersion, requestContext.BaselineActivationDate.ToString(), requestContext.BaselineExpirationDate.ToString())); } } catch (Exception ex) { DataPackageService.mWriteLog(TraceType.EXCEPTION, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_REMOTEDATASTORE_FAULTED); } if (filesUrlsList.Count > 0) { UploadFileDistributionRequest uploadFilesRequestContext = new UploadFileDistributionRequest( requestContext.RequestId, requestContext.RequestId.ToString(), requestContext.DistributionAttributes.transferExpirationDate, filesUrlsList, requestContext.DistributionAttributes.fileCompression, recipients, requestContext.DistributionAttributes.transferDate, "Distribute baseline for element " + requestContext.ElementId, requestContext.DistributionAttributes.TransferMode, requestContext.DistributionAttributes.priority, new EventHandler <FileDistributionStatusArgs>(DataPackageService.OnFileDistributeNotification), new EventHandler <FileDistributionTaskCreatedArgs>(_baselineStatusUpdater.OnFileDistributionTaskCreated)); DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageFutureBaselineDefinition, stringWriter.ToString()); string logMessage = "Distribute baseline for element " + requestContext.ElementId; logMessage += ". Files to upload : "; foreach (string file in filesUrlsList) { logMessage += file + ", "; } logMessage = logMessage.Substring(0, logMessage.Length - 2); DataPackageService.mWriteLog(TraceType.INFO, System.Reflection.MethodBase.GetCurrentMethod().Name, null, logMessage); AvailableElementData elementData; T2GManagerErrorEnum lRqstResult = _trainToGroundManager.GetAvailableElementDataByElementNumber(requestContext.ElementId, out elementData); if (lRqstResult == T2GManagerErrorEnum.eSuccess && elementData != null && elementData.PisBaselineData != null) { _baselineStatusUpdater.ProcessDistributeBaselineRequest( elementData.ElementNumber, requestContext.RequestId, elementData.OnlineStatus, elementData.PisBaselineData.CurrentVersionOut, elementData.PisBaselineData.FutureVersionOut, requestContext.BaselineVersion); } else { DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_ELEMENT_INFO, requestContext.ElementId); } DataPackageService.mAddBaselineVersionToDictionary(requestContext.RequestId, requestContext.ElementId, requestContext.BaselineVersion); DataPackageService.mAddPackagesToUsedPackagesList(packagesParamsList); _trainToGroundManager.T2GFileDistributionManager.AddUploadRequest(uploadFilesRequestContext); requestContext.TransmissionStatus = true; DataPackageService.mRemovePackagesFromUsedPackagesList(packagesParamsList); } } else { requestContext.CompletionStatus = true; DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailed, stringWriter.ToString()); DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, Logs.ERROR_GETTING_URL_LIST); } } else { requestContext.CompletionStatus = true; DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailed, stringWriter.ToString()); DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED_UNKNOW_BASELINE_VERSION, requestContext.ElementId); } } catch (Exception ex) { if (false == requestContext.OnCommunicationError(ex)) { requestContext.CompletionStatus = true; DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailedRejectedByElement, stringWriter.ToString()); DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message); } else { DataPackageService.mWriteLog(TraceType.DEBUG, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message); } } finally { if (lTrainDataPackageClient.State == CommunicationState.Faulted) { lTrainDataPackageClient.Abort(); } } } } catch (Exception ex) { if (false == requestContext.OnCommunicationError(ex)) { requestContext.CompletionStatus = true; DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message); DataPackageService.sendNotificationToGroundApp(requestContext.RequestId, PIS.Ground.GroundCore.AppGround.NotificationIdEnum.DataPackageDistributionFailed, stringWriter.ToString()); } else { DataPackageService.mWriteLog(TraceType.DEBUG, System.Reflection.MethodBase.GetCurrentMethod().Name, ex, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, ex.Message); } } } else { DataPackageService.mWriteLog(TraceType.ERROR, System.Reflection.MethodBase.GetCurrentMethod().Name, null, Logs.ERROR_DISTRIBUTE_BASELINE_FAILED, requestContext.BaselineVersion, requestContext.ElementId, "Cannot get embedded DataPackage service data."); requestContext.TransmissionStatus = false; } } else { requestContext.TransmissionStatus = false; } } }
/// <summary>Upload the File to Ftp.</summary> /// <param name="objUploadFileDistributionRequest">Input File distribution request.</param> /// <returns>error if any.</returns> internal static string Upload(ref UploadFileDistributionRequest objUploadFileDistributionRequest) { string error = string.Empty; if (objUploadFileDistributionRequest != null && !string.IsNullOrEmpty(objUploadFileDistributionRequest.FtpServerIP) && !string.IsNullOrEmpty(objUploadFileDistributionRequest.FtpUserName) && !string.IsNullOrEmpty(objUploadFileDistributionRequest.FtpPassword) && objUploadFileDistributionRequest.Folder.NbFiles > 0) { foreach (IRemoteFileClass lRemoteFile in objUploadFileDistributionRequest.Folder.FolderFilesList) { if (lRemoteFile.Exists) { /* Testing mode is enable. So, simulate that file was uploaded properly. * * In the future, a better approach might be found. */ if (lRemoteFile.FileType == FileTypeEnum.Undefined && RemoteFileClass.TestingModeEnabled) { FtpStatus ftpStatus = new FtpStatus(); ftpStatus.FileName = lRemoteFile.FilePath; ftpStatus.FtpStatusCode = FtpStatusCode.FileActionOK;; ftpStatus.OperationException = null; ftpStatus.StatusDescription = "OK"; lRemoteFile.FtpStatus = ftpStatus; continue; } DateTime dtTime = DateTime.Now; FtpWebRequest reqFTP = null; try { InitializeFtpRequest(lRemoteFile, objUploadFileDistributionRequest.FtpServerIP, objUploadFileDistributionRequest.FtpDirectory, objUploadFileDistributionRequest.FtpUserName, objUploadFileDistributionRequest.FtpPassword, out reqFTP); } catch (Exception ex) { return(ex.Message); } if (reqFTP != null) { FtpWebResponse response = null; try { using (ManualResetEvent timerEvent = new ManualResetEvent(false)) using (FtpState ftpState = new FtpState()) { ftpState.RemoteFile = lRemoteFile; ftpState.Request = reqFTP; ftpState.Request.Timeout = Timeout.Infinite; UploadFile(ftpState); if (ftpState.Response != null) { response = ftpState.Response; if (response.StatusCode == FtpStatusCode.ServiceNotAvailable || response.StatusCode == FtpStatusCode.ServiceTemporarilyNotAvailable) { if (DateTime.Now.Subtract(dtTime).TotalMinutes > TimeOut) { error = "T2G Ground Server not responding for " + TimeOut + " period uploading terminated"; objUploadFileDistributionRequest.Folder.UploadingState = UploadingStateEnum.Failed; return(error); } } if (response.StatusCode != FtpStatusCode.FileActionOK && response.StatusCode != FtpStatusCode.ClosingData && response.StatusCode != FtpStatusCode.DirectoryStatus && response.StatusCode != FtpStatusCode.FileStatus && response.StatusCode != FtpStatusCode.SystemType && response.StatusCode != FtpStatusCode.SendUserCommand && response.StatusCode != FtpStatusCode.ClosingControl && response.StatusCode != FtpStatusCode.ClosingData && response.StatusCode != FtpStatusCode.PathnameCreated) { lRemoteFile.HasError = true; LogManager.WriteLog(TraceType.INFO, "File upload error, create transfer task. RequestID = " + objUploadFileDistributionRequest.RequestId.ToString() + ", CRCGuid = " + objUploadFileDistributionRequest.Folder.CRCGuid + ", Folder ID = " + objUploadFileDistributionRequest.Folder.FolderId.ToString() + ", FTP error = " + response.StatusCode.ToString(), "Ground.Core.T2G.T2GClient.StartTransferTask", null, EventIdEnum.GroundCore); objUploadFileDistributionRequest.Folder.UploadingState = UploadingStateEnum.Failed; } FtpStatus ftpStatus = new FtpStatus(); ftpStatus.FileName = lRemoteFile.FilePath; ftpStatus.FtpStatusCode = response.StatusCode; ftpStatus.OperationException = null; ftpStatus.StatusDescription = response.StatusDescription; lRemoteFile.FtpStatus = ftpStatus; } else { error = "Can't upload file on T2G Ftp Server. Server is not responding or input file is invalid, check error log."; objUploadFileDistributionRequest.Folder.UploadingState = UploadingStateEnum.Failed; return(error); } } } catch (Exception ex) { response = (FtpWebResponse)reqFTP.GetResponse(); if (response != null) { FtpStatus ftpStatus = new FtpStatus(); ftpStatus.FileName = lRemoteFile.FilePath; ftpStatus.FtpStatusCode = response.StatusCode; ftpStatus.OperationException = ex; ftpStatus.StatusDescription = response.StatusDescription; lRemoteFile.FtpStatus = ftpStatus; LogManager.WriteLog(TraceType.ERROR, PIS.Ground.Core.Properties.Resources.ExFtpError, "PIS.Ground.Core.Utility.Upload", ex, EventIdEnum.GroundCore); } } finally { if (response != null) { response.Close(); } } } } else { error = "File " + lRemoteFile.FilePath + " does not exist."; return(error); } } } else { error = "Invalid Input parameter"; } return(error); }