Пример #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TrainBaselineStatusData"/> class.
 /// </summary>
 /// <param name="trainId">The train identifier.</param>
 /// <param name="trainNumber">The train number.</param>
 /// <param name="isOnline">Indicates the online status of the train.</param>
 /// <param name="currentBaselineVersion">The current baseline version.</param>
 /// <param name="futureBaselineVersion">The future baseline version.</param>
 /// <param name="pisOnboardVersion">The pis onboard version.</param>
 /// <param name="progressStatus">The progress status.</param>
 public TrainBaselineStatusData(string trainId, int trainNumber, bool isOnline, string currentBaselineVersion, string futureBaselineVersion, string pisOnboardVersion, BaselineProgressStatusEnum progressStatus)
     : this(trainId, trainNumber, isOnline, currentBaselineVersion)
 {
     _futureBaselineVersion = futureBaselineVersion;
     _pisOnBoardVersion     = pisOnboardVersion;
     _progressStatus        = progressStatus;
 }
        /// <summary>
        /// Gets the baseline progress in history log for a train.
        /// </summary>
        /// <param name="trainName">Name of the train to query.</param>
        /// <param name="defaultValue">The value to return if train is unknown in history log database.</param>
        /// <returns>The baseline progress status. defaultValue if train name has no progress information</returns>
        protected BaselineProgressStatusEnum GetBaselineProgress(string trainName, BaselineProgressStatusEnum defaultValue)
        {
            Dictionary <string, TrainBaselineStatusData> statuses;

            HistoryLogger.GetTrainBaselineStatus(out statuses);

            TrainBaselineStatusData trainStatus;

            return(statuses.TryGetValue(trainName, out trainStatus) ? trainStatus.ProgressStatus : defaultValue);
        }
Пример #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TrainBaselineStatusData"/> class.
 /// </summary>
 public TrainBaselineStatusData()
 {
     _trainId                = string.Empty;
     _requestId              = new Guid();
     _taskId                 = 0;
     _trainNumber            = string.Empty;
     _onlineStatus           = false;
     _progressStatus         = BaselineProgressStatusEnum.UNKNOWN;
     _currentBaselineVersion = string.Empty;
     _futureBaselineVersion  = string.Empty;
     _pisOnBoardVersion      = string.Empty;
 }
Пример #4
0
        /// <summary>Method to update the baseline progress status.</summary>
        /// <param name="trainId">train id.</param>
        /// <param name="requestId">request id of the message.</param>
        /// <param name="taskId">Identifier for the task.</param>
        /// <param name="trainNumber">The train number.</param>
        /// <param name="onlineStatus">online status of the train.</param>
        /// <param name="progressStatus">The progress status.</param>
        /// <param name="currentBaselineVersion">The current baseline version.</param>
        /// <param name="futureBaselineVersion">The future baseline version.</param>
        /// <param name="pisOnBoardVersion">The pis on board version.</param>
        /// <returns>Error code if any.</returns>
        public static ResultCodeEnum UpdateTrainBaselineStatus(string trainId, Guid requestId, int taskId, string trainNumber,
                                                               bool onlineStatus, BaselineProgressStatusEnum progressStatus,
                                                               BaselineProgressStatusStateEnum progressStatusState,
                                                               string currentBaselineVersion, string futureBaselineVersion,
                                                               string pisOnBoardVersion)
        {
            ResultCodeEnum resultCode = ResultCodeEnum.RequestAccepted;

            if (HistoryLoggerConfiguration.Used)
            {
                resultCode = HistoryLogger.UpdateTrainBaselineStatus(
                    trainId, requestId, taskId, trainNumber,
                    onlineStatus, progressStatus, progressStatusState,
                    currentBaselineVersion, futureBaselineVersion,
                    pisOnBoardVersion);
            }

            return(resultCode);
        }
        public void DistributeBaselineScenario_Nominal()
        {
            const string FUTURE_VERSION = "1.0.0.0";

            // Common initialization
            CreateT2GServicesStub();
            _dataStoreServiceStub.InitializeRemoteDataStoreMockWithDefaultBehavior();
            InitializeTrain(TRAIN_NAME_1, TRAIN_VEHICLE_ID_1, true, TRAIN_IP_1, TRAIN_DATA_PACKAGE_PORT_1);
            InitializeDataPackageService(false);
            InitializePISGroundSession();
            WaitPisGroundIsConnectedWithT2G();
            WaitTrainOnlineWithPISGround(TRAIN_NAME_1, true);

            // Initializations specific to this test.
            ElementsDataStoreData data = new ElementsDataStoreData(TRAIN_NAME_1);

            data.FutureBaseline = FUTURE_VERSION;
            data.FutureBaselineActivationDate = RemoteDataStoreDataBase.ToString(DateTime.Today);
            data.FutureBaselineExpirationDate = RemoteDataStoreDataBase.ToString(DateTime.Now.AddMinutes(20));

            _dataStoreServiceStub.UpdateDataStore(data);
            _dataStoreServiceStub.AddBaselineToRemoteDataStore(FUTURE_VERSION);

            // Request the datapackage service to distribute the baseline
            DataPackageResult result = _datapackageServiceStub.distributeBaseline(_pisGroundSessionId, null, new TargetAddressType(TRAIN_NAME_1), CreateDistributionAttribute(), false);

            Assert.AreEqual(DataPackageErrorEnum.REQUEST_ACCEPTED, result.error_code, "Distribute baseline to train {0} does not returned the expected value", TRAIN_NAME_1);

            // Wait that folder on T2G was created

            Assert.That(() => _fileTransferServiceStub.LastCreatedFolder.HasValue, Is.True.After(30 * ONE_SECOND, ONE_SECOND / 4), "Distribute baseline to train {0} failure. Transfer folder on T2G service not created", TRAIN_NAME_1);
            int transferFolderId = _fileTransferServiceStub.LastCreatedFolder.Value;

            _fileTransferServiceStub.LastCreatedFolder = null;
            Assert.That(() => _fileTransferServiceStub.LastCreatedTransfer.HasValue, Is.True.After(30 * ONE_SECOND, ONE_SECOND / 4), "Distribute baseline to train {0} failure. Transfer task on T2G service not created", TRAIN_NAME_1);
            int transferTaskId = _fileTransferServiceStub.LastCreatedTransfer.Value;

            _fileTransferServiceStub.LastCreatedTransfer = null;

            _fileTransferServiceStub.PerformTransferProgression();

            // Probleme
            VerifyTrainBaselineStatusInHistoryLog(TRAIN_NAME_1, true, DEFAULT_BASELINE, FUTURE_VERSION, result.reqId, transferTaskId, BaselineProgressStatusEnum.TRANSFER_PLANNED);
            while (_fileTransferServiceStub.IsTaskRunning(transferTaskId))
            {
                _fileTransferServiceStub.PerformTransferProgression();
                BaselineProgressStatusEnum expectedProgress = _fileTransferServiceStub.GetTask(transferTaskId).BaselineProgress;
                VerifyTrainBaselineStatusInHistoryLog(TRAIN_NAME_1, true, DEFAULT_BASELINE, FUTURE_VERSION, result.reqId, transferTaskId, expectedProgress);
                Thread.Sleep(ONE_SECOND / 4);
            }

            Thread.Sleep(5 * ONE_SECOND);
            VerifyTrainBaselineStatusInHistoryLog(TRAIN_NAME_1, true, DEFAULT_BASELINE, FUTURE_VERSION, result.reqId, transferTaskId, BaselineProgressStatusEnum.TRANSFER_COMPLETED);


            // Simulate that train retrieved the baseline on embedded side.

            BaselineMessage baselineInfo = new BaselineMessage(TRAIN_NAME_1);

            baselineInfo.CurrentVersion = DEFAULT_BASELINE;
            baselineInfo.FutureVersion  = FUTURE_VERSION;
            _vehicleInfoServiceStub.UpdateMessageData(baselineInfo);

            WaitBaselineStatusBecomeInState(TRAIN_NAME_1, BaselineProgressStatusEnum.DEPLOYED);
            VerifyTrainBaselineStatusInHistoryLog(TRAIN_NAME_1, true, DEFAULT_BASELINE, FUTURE_VERSION, result.reqId, transferTaskId, BaselineProgressStatusEnum.DEPLOYED);

            // Simulate that train replaced the current baseline with the future.
            baselineInfo.ArchivedVersion = baselineInfo.CurrentVersion;
            baselineInfo.CurrentVersion  = baselineInfo.FutureVersion;
            baselineInfo.FutureVersion   = string.Empty;
            _vehicleInfoServiceStub.UpdateMessageData(baselineInfo);

            WaitBaselineStatusBecomeInState(TRAIN_NAME_1, BaselineProgressStatusEnum.UPDATED);
            VerifyTrainBaselineStatusInHistoryLog(TRAIN_NAME_1, true, FUTURE_VERSION, "0.0.0.0", Guid.Empty, 0, BaselineProgressStatusEnum.UPDATED);
        }
 public new BaselineProgressStatusEnum ValidateBaselineProgressStatus(
     BaselineProgressStatusEnum currentState,
     BaselineProgressStatusEnum newState)
 {
     return(base.ValidateBaselineProgressStatus(currentState, newState));
 }
Пример #7
0
 ResultCodeEnum ILogManager.UpdateTrainBaselineStatus(string trainId, Guid requestId, int taskId, string trainNumber, bool onlineStatus, BaselineProgressStatusEnum progressStatus, BaselineProgressStatusStateEnum progressStatusState, string currentBaselineVersion, string futureBaselineVersion, string pisOnBoardVersion)
 {
     return(LogManager.UpdateTrainBaselineStatus(trainId, requestId, taskId, trainNumber, onlineStatus, progressStatus, progressStatusState, currentBaselineVersion, futureBaselineVersion, pisOnBoardVersion));
 }
 protected void WaitBaselineStatusBecomeInState(string trainName, BaselineProgressStatusEnum expectedStatus, int delay)
 {
     Assert.That(() => GetBaselineProgress(trainName), Is.EqualTo(expectedStatus).After(delay, ONE_SECOND / 3), "The baseline deployment status in history log database is no set to expected value for train '{0}'", trainName);
 }
 protected void WaitBaselineStatusBecomeInState(string trainName, BaselineProgressStatusEnum expectedStatus)
 {
     WaitBaselineStatusBecomeInState(trainName, expectedStatus, 10 * ONE_SECOND);
 }
Пример #10
0
        /// <summary>
        /// Verifies the train baseline status in history log.
        /// </summary>
        /// <param name="systemId">The system identifier.</param>
        /// <param name="expectedOnlineStatus">if set to <c>true</c> [expected online status].</param>
        /// <param name="expectedBaselineVersion">The expected baseline version.</param>
        /// <param name="expectedFutureVersion">The expected future version.</param>
        /// <param name="expectedRequestId">The expected request identifier.</param>
        /// <param name="expectedTaskId">The expected task identifier.</param>
        /// <param name="expectedProgress">The expected progress.</param>
        /// <remarks>This function check up to 8 times in 2 seconds before failing. The reason is that baselines statutes might be updated with a delay.</remarks>
        protected void VerifyTrainBaselineStatusInHistoryLog(string systemId, bool expectedOnlineStatus, string expectedBaselineVersion, string expectedFutureVersion, Guid expectedRequestId, int expectedTaskId, BaselineProgressStatusEnum expectedProgress)
        {
            Dictionary <string, TrainBaselineStatusData> statuses;

            bool isOk  = false;
            int  count = 0;

            do
            {
                try
                {
                    HistoryLogger.GetTrainBaselineStatus(out statuses);

                    TrainBaselineStatusData analysedTrain;
                    Assert.IsTrue(statuses.TryGetValue(systemId, out analysedTrain), "History log database integrity error for train '{0}': no data found", systemId);
                    AssertAll(
                        () => Assert.AreEqual(expectedOnlineStatus, analysedTrain.OnlineStatus, "History log database integrity error for train '{0}': online status differ than expected", systemId),
                        () => Assert.AreEqual(expectedRequestId, analysedTrain.RequestId, "History log database integrity error for train '{0}': request id differ than expected", systemId),
                        () => Assert.AreEqual(expectedTaskId, analysedTrain.TaskId, "History log database integrity error for train '{0}': task id differ than expected", systemId),
                        () => Assert.AreEqual(expectedProgress, analysedTrain.ProgressStatus, "History log database integrity error for train '{0}': progress status differ than expected", systemId),
                        () => Assert.AreEqual(expectedBaselineVersion, analysedTrain.CurrentBaselineVersion, "History log database integrity error for train '{0}': current baseline version differ than expected", systemId),
                        () => Assert.AreEqual(expectedFutureVersion, analysedTrain.FutureBaselineVersion, "History log database integrity error for train '{0}': future baseline version differ than expected", systemId));
                    isOk = true;
                }
                catch
                {
                    if (++count > 8)
                    {
                        throw;
                    }

                    Thread.Sleep(250);
                }
            } while (!isOk);
        }