/// <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); }
/// <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; }
/// <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)); }
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); }
/// <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); }