Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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;
                }
            }
        }
Exemplo n.º 5
0
        /// <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);
        }