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();
     }
 }
Example #4
0
 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));
 }
Example #5
0
 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));
 }
Example #6
0
 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
            });
        }
Example #8
0
 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();
        }
Example #10
0
 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));
 }
Example #11
0
        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
            });
        }
Example #13
0
        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);
 }
Example #15
0
 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
            });
        }
Example #17
0
 private void OnTestOver(ITestResultCollection statistics)
 {
     SessionOver?.Invoke(statistics);
 }