internal DirectMethodReportGenerator( string testDescription, string trackingId, string senderSource, ITestResultCollection <TestOperationResult> senderTestResults, Option <string> receiverSource, Option <ITestResultCollection <TestOperationResult> > receiverTestResults, string resultType, NetworkStatusTimeline networkStatusTimeline, NetworkControllerType networkControllerType) { if (receiverSource.HasValue ^ receiverTestResults.HasValue) { throw new ArgumentException("Provide both receiverSource and receiverTestResults or neither."); } this.TestDescription = Preconditions.CheckNonWhiteSpace(testDescription, nameof(testDescription)); this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.SenderSource = Preconditions.CheckNonWhiteSpace(senderSource, nameof(senderSource)); this.SenderTestResults = Preconditions.CheckNotNull(senderTestResults, nameof(senderTestResults)); this.ReceiverSource = receiverSource; this.ReceiverTestResults = receiverTestResults; this.ResultType = Preconditions.CheckNonWhiteSpace(resultType, nameof(resultType)); this.NetworkStatusTimeline = Preconditions.CheckNotNull(networkStatusTimeline, nameof(networkStatusTimeline)); this.NetworkControllerType = networkControllerType; }
internal NetworkControllerReportGenerator( string trackingId, string source, ITestResultCollection <TestOperationResult> testResults) { this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.Source = Preconditions.CheckNonWhiteSpace(source, nameof(source)); this.TestResults = Preconditions.CheckNotNull(testResults, nameof(testResults)); this.ResultType = TestOperationResultType.Network.ToString(); }
private void SessionOverClean(ITestResultCollection testResults) { _testsMaintainer.FreeHost(testResults.Session); // 如果只剩下TestMaintainer的数据,则发送执行TestProjectTearDown的命令 if (_sequenceData is ITestProject && _testsMaintainer.TestContainers.Count == 1 && _testsMaintainer.TestContainers.ContainsKey(CommonConst.TestGroupSession)) { RunRootTearDownIfOtherSessionOver(); } }
public TwinCountingReportGenerator(string trackingId, string expectedSource, ITestResultCollection <TestOperationResult> expectedTestResults, string actualSource, ITestResultCollection <TestOperationResult> actualTestResults, string testOperationResultType, SimpleTestOperationResultComparer testResultComparer) { this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.expectedTestResults = Preconditions.CheckNotNull(expectedTestResults, nameof(expectedTestResults)); this.expectedSource = Preconditions.CheckNonWhiteSpace(expectedSource, nameof(expectedSource)); this.actualSource = Preconditions.CheckNonWhiteSpace(actualSource, nameof(actualSource)); this.actualTestResults = Preconditions.CheckNotNull(actualTestResults, nameof(actualTestResults)); this.testResultComparer = Preconditions.CheckNotNull(testResultComparer, nameof(testResultComparer)); this.resultType = Preconditions.CheckNonWhiteSpace(testOperationResultType, nameof(testOperationResultType)); }
internal LegacyTwinReportGenerator( string testDescription, string trackingId, string resultType, string senderSource, ITestResultCollection <TestOperationResult> senderTestResults) { this.TestDescription = Preconditions.CheckNonWhiteSpace(testDescription, nameof(testDescription)); this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.ResultType = Preconditions.CheckNonWhiteSpace(resultType, nameof(resultType)); this.SenderSource = Preconditions.CheckNonWhiteSpace(senderSource, nameof(senderSource)); this.SenderTestResults = Preconditions.CheckNotNull(senderTestResults, nameof(senderTestResults)); }
internal SimpleReportGenerator( string testDescription, string trackingId, string source, ITestResultCollection <TestOperationResult> testResults, TestOperationResultType testOperationResultType) { this.TestDescription = Preconditions.CheckNonWhiteSpace(testDescription, nameof(testDescription)); this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.Source = Preconditions.CheckNonWhiteSpace(source, nameof(source)); this.TestResults = Preconditions.CheckNotNull(testResults, nameof(testResults)); this.ResultType = testOperationResultType.ToString(); }
async Task <DirectMethodReportGeneratorMetadata> ProcessSenderAndReceiverResults( DirectMethodTestResult dmSenderTestResult, bool hasSenderResult, bool hasReceiverResult, NetworkControllerStatus networkControllerStatus, bool isWithinTolerancePeriod) { ulong mismatchSuccess = 0; string receiverSource = this.ReceiverSource.OrDefault(); ITestResultCollection <TestOperationResult> receiverTestResults = this.ReceiverTestResults.OrDefault(); this.ValidateDataSource(receiverTestResults.Current, receiverSource); DirectMethodTestResult dmReceiverTestResult = JsonConvert.DeserializeObject <DirectMethodTestResult>(receiverTestResults.Current.Result); if (!string.Equals(dmSenderTestResult.TrackingId, dmReceiverTestResult.TrackingId, StringComparison.OrdinalIgnoreCase)) { throw new InvalidDataException($"Sequence numbers should not match if the testResults didn't match. SenderTestResult: " + $"{dmSenderTestResult.GetFormattedResult()}. ReceiverTestResult: {dmReceiverTestResult.GetFormattedResult()}"); } if (string.Equals(dmSenderTestResult.SequenceNumber, dmReceiverTestResult.SequenceNumber, StringComparison.OrdinalIgnoreCase)) { hasReceiverResult = await receiverTestResults.MoveNextAsync(); } else { if (int.Parse(dmSenderTestResult.SequenceNumber) > int.Parse(dmReceiverTestResult.SequenceNumber)) { return(await this.ProcessMismatchFailureCase()); } else if (int.Parse(dmSenderTestResult.SequenceNumber) < int.Parse(dmReceiverTestResult.SequenceNumber)) { if (HttpStatusCode.OK.Equals(dmSenderTestResult.HttpStatusCode) && (NetworkControllerStatus.Disabled.Equals(networkControllerStatus) || (NetworkControllerStatus.Enabled.Equals(networkControllerStatus) && isWithinTolerancePeriod))) { mismatchSuccess++; hasSenderResult = await this.SenderTestResults.MoveNextAsync(); return(new DirectMethodReportGeneratorMetadata { MismatchSuccess = mismatchSuccess, HasReceiverResult = hasReceiverResult, HasSenderResult = hasSenderResult }); } } } return(new DirectMethodReportGeneratorMetadata { HasSenderResult = hasSenderResult, HasReceiverResult = hasReceiverResult }); }
internal EdgeHubRestartDirectMethodReportGenerator( string trackingId, string senderSource, string receiverSource, TestReportType testReportType, ITestResultCollection <TestOperationResult> senderTestResults, ITestResultCollection <TestOperationResult> receiverTestResults) { this.TrackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.SenderSource = Preconditions.CheckNonWhiteSpace(senderSource, nameof(senderSource)); this.ReceiverSource = Preconditions.CheckNonWhiteSpace(receiverSource, nameof(receiverSource)); this.TestReportType = testReportType; this.SenderTestResults = Preconditions.CheckNotNull(senderTestResults, nameof(senderTestResults)); this.ReceiverTestResults = Preconditions.CheckNotNull(receiverTestResults, nameof(receiverTestResults)); this.completedStatusHistogram = new Dictionary <HttpStatusCode, List <TimeSpan> >(); }
internal DeploymentTestReportGenerator( string trackingId, string expectedSource, ITestResultCollection <TestOperationResult> expectedTestResults, string actualSource, ITestResultCollection <TestOperationResult> actualTestResults) { this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.ExpectedTestResults = Preconditions.CheckNotNull(expectedTestResults, nameof(expectedTestResults)); this.ExpectedSource = Preconditions.CheckNonWhiteSpace(expectedSource, nameof(expectedSource)); this.ActualSource = Preconditions.CheckNonWhiteSpace(actualSource, nameof(actualSource)); this.ActualTestResults = Preconditions.CheckNotNull(actualTestResults, nameof(actualTestResults)); this.TestResultComparer = new DeploymentTestResultComparer(); this.ResultType = TestOperationResultType.Deployment.ToString(); }
internal CountingReportGenerator( string trackingId, string expectedSource, ITestResultCollection <TestOperationResult> expectedTestResults, string actualSource, ITestResultCollection <TestOperationResult> actualTestResults, string resultType, ITestResultComparer <TestOperationResult> testResultComparer) { this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.ExpectedTestResults = Preconditions.CheckNotNull(expectedTestResults, nameof(expectedTestResults)); this.ExpectedSource = Preconditions.CheckNonWhiteSpace(expectedSource, nameof(expectedSource)); this.ActualSource = Preconditions.CheckNonWhiteSpace(actualSource, nameof(actualSource)); this.ActualTestResults = Preconditions.CheckNotNull(actualTestResults, nameof(actualTestResults)); this.TestResultComparer = Preconditions.CheckNotNull(testResultComparer, nameof(testResultComparer)); this.ResultType = Preconditions.CheckNonWhiteSpace(resultType, nameof(resultType)); }
public static async Task <NetworkStatusTimeline> CreateAsync( ITestResultCollection <TestOperationResult> networkControllerTestOperationResults, TimeSpan tolerancePeriod, NetworkControllerStatus initialNetworkControllerStatus = NetworkControllerStatus.Disabled) { List <NetworkControllerTestResult> networkControllerTestResults = new List <NetworkControllerTestResult>(); while (await networkControllerTestOperationResults.MoveNextAsync()) { Option <NetworkControllerTestResult> networkControllerTestResult = GetNetworkControllerTestOperationResult(networkControllerTestOperationResults.Current); networkControllerTestResult.ForEach( r => { networkControllerTestResults.Add(r); }); } return(new NetworkStatusTimeline(networkControllerTestResults, tolerancePeriod, initialNetworkControllerStatus)); }
async Task <DirectMethodReportGeneratorMetadata> ProcessMismatchFailureCase() { ulong mismatchFailure = 0; ITestResultCollection <TestOperationResult> receiverTestResults = this.ReceiverTestResults.OrDefault(); Logger.LogError($"[{nameof(DirectMethodReportGenerator)}] Receiver test result source has unexpected results."); mismatchFailure++; // Log actual queue items Logger.LogError($"Unexpected Receiver test result: {receiverTestResults.Current.Source}, " + $"{receiverTestResults.Current.Type}, " + $"{receiverTestResults.Current.Result} at " + $"{receiverTestResults.Current.CreatedAt}"); bool hasReceiverResult = await receiverTestResults.MoveNextAsync(); return(new DirectMethodReportGeneratorMetadata { MismatchFailure = mismatchFailure, HasReceiverResult = hasReceiverResult }); }
internal DeploymentTestReportGenerator( string testDescription, string trackingId, string expectedSource, ITestResultCollection <TestOperationResult> expectedTestResults, string actualSource, ITestResultCollection <TestOperationResult> actualTestResults, ushort unmatchedResultsMaxSize) { this.TestDescription = Preconditions.CheckNonWhiteSpace(testDescription, nameof(testDescription)); this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.ExpectedTestResults = Preconditions.CheckNotNull(expectedTestResults, nameof(expectedTestResults)); this.ExpectedSource = Preconditions.CheckNonWhiteSpace(expectedSource, nameof(expectedSource)); this.ActualSource = Preconditions.CheckNonWhiteSpace(actualSource, nameof(actualSource)); this.ActualTestResults = Preconditions.CheckNotNull(actualTestResults, nameof(actualTestResults)); this.unmatchedResultsMaxSize = Preconditions.CheckRange <ushort>(unmatchedResultsMaxSize, 1); this.TestResultComparer = new DeploymentTestResultComparer(); this.ResultType = TestOperationResultType.Deployment.ToString(); }
internal TwinCountingReportGenerator( string testDescription, string trackingId, string expectedSource, ITestResultCollection<TestOperationResult> expectedTestResults, string actualSource, ITestResultCollection<TestOperationResult> actualTestResults, string testOperationResultType, SimpleTestOperationResultComparer testResultComparer, ushort unmatchedResultsMaxSize) { this.testDescription = Preconditions.CheckNonWhiteSpace(testDescription, nameof(testDescription)); this.trackingId = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId)); this.expectedTestResults = Preconditions.CheckNotNull(expectedTestResults, nameof(expectedTestResults)); this.expectedSource = Preconditions.CheckNonWhiteSpace(expectedSource, nameof(expectedSource)); this.actualSource = Preconditions.CheckNonWhiteSpace(actualSource, nameof(actualSource)); this.actualTestResults = Preconditions.CheckNotNull(actualTestResults, nameof(actualTestResults)); this.testResultComparer = Preconditions.CheckNotNull(testResultComparer, nameof(testResultComparer)); this.resultType = Preconditions.CheckNonWhiteSpace(testOperationResultType, nameof(testOperationResultType)); this.unmatchedResultsMaxSize = Preconditions.CheckRange<ushort>(unmatchedResultsMaxSize, 1); }
private void OnTestStart(ITestResultCollection statistics) { SessionStart?.Invoke(statistics); }
async Task <DirectMethodReportGeneratorMetadata> ProcessSenderTestResults( DirectMethodTestResult dmSenderTestResult, NetworkControllerStatus networkControllerStatus, bool isWithinTolerancePeriod, ITestResultCollection <TestOperationResult> senderTestResults) { ulong networkOnSuccess = 0; ulong networkOffSuccess = 0; ulong networkOnToleratedSuccess = 0; ulong networkOffToleratedSuccess = 0; ulong networkOnFailure = 0; ulong networkOffFailure = 0; HttpStatusCode statusCode = dmSenderTestResult.HttpStatusCode; if (NetworkControllerStatus.Disabled.Equals(networkControllerStatus)) { if (HttpStatusCode.OK.Equals(statusCode)) { networkOnSuccess++; } else { if (isWithinTolerancePeriod) { networkOnToleratedSuccess++; } else { networkOnFailure++; } } } else if (NetworkControllerStatus.Enabled.Equals(networkControllerStatus)) { if (HttpStatusCode.InternalServerError.Equals(statusCode)) { networkOffSuccess++; } else if (HttpStatusCode.OK.Equals(dmSenderTestResult.HttpStatusCode)) { if (isWithinTolerancePeriod) { networkOffToleratedSuccess++; } else { networkOffFailure++; } } else { throw new InvalidDataException($"Unexpected HttpStatusCode of {statusCode}"); } } bool hasSenderResult = await senderTestResults.MoveNextAsync(); return(new DirectMethodReportGeneratorMetadata { NetworkOnSuccess = networkOnSuccess, NetworkOffSuccess = networkOffSuccess, NetworkOnToleratedSuccess = networkOnToleratedSuccess, NetworkOffToleratedSuccess = networkOffToleratedSuccess, NetworkOnFailure = networkOnFailure, NetworkOffFailure = networkOffFailure, HasSenderResult = hasSenderResult }); }
private void OnTestOver(ITestResultCollection statistics) { SessionOver?.Invoke(statistics); }