public async Task StartAsync(
            DateTime runExpirationTime,
            DateTime edgeHubRestartedTime,
            CancellationToken cancellationToken)
        {
            (DateTime msgCompletedTime, HttpStatusCode mgsStatusCode) = await this.SendMessageAsync(
                Settings.Current.TrackingId,
                this.batchId,
                Settings.Current.MessageOutputEndpoint,
                runExpirationTime,
                cancellationToken);

            TestResultBase msgTestResult = new EdgeHubRestartMessageResult(
                this.GetSource(),
                DateTime.UtcNow,
                Settings.Current.TrackingId,
                this.batchId.ToString(),
                this.messageCount.ToString(),
                edgeHubRestartedTime,
                msgCompletedTime,
                mgsStatusCode);

            await ModuleUtil.ReportTestResultAsync(
                this.GetReportClient(),
                this.logger,
                msgTestResult,
                cancellationToken);
        }
Exemple #2
0
        // (sequenceNumber) is only valid if and only if (hasValue) is true
        async Task <(ulong resultCount, bool hasValue, long sequenceNumber)> MoveNextSenderResultAsync(ulong senderResultCount)
        {
            bool hasValue = await this.SenderTestResults.MoveNextAsync();

            long seqNum = 0;

            if (!hasValue)
            {
                return(resultCount : senderResultCount,
                       hasValue : hasValue,
                       sequenceNumber : seqNum);
            }

            senderResultCount++;

            EdgeHubRestartMessageResult senderResult = JsonConvert.DeserializeObject <EdgeHubRestartMessageResult>(this.SenderTestResults.Current.Result);

            seqNum = this.ParseSenderSequenceNumber(senderResult.SequenceNumber);

            this.AddEntryToCompletedStatusHistogram(senderResult);

            return(resultCount : senderResultCount,
                   hasValue : hasValue,
                   sequenceNumber : seqNum);
        }
Exemple #3
0
        bool VerifyCurrentResult(
            long senderSeqNum,
            long receiverSeqNum)
        {
            // Check if the current message is passing
            bool isCurrentMessagePassing = true;

            EdgeHubRestartMessageResult senderResult = JsonConvert.DeserializeObject <EdgeHubRestartMessageResult>(this.SenderTestResults.Current.Result);
            string receiverResult = this.ReceiverTestResults.Current.Result;

            // Verified "TrackingId;BatchId;SequenceNumber" altogether.
            isCurrentMessagePassing &= string.Compare(senderResult.GetMessageTestResult(), receiverResult) == 0;

            // Verify the sequence numbers
            isCurrentMessagePassing &= senderSeqNum == receiverSeqNum;

            // Verify if the report status is passable
            isCurrentMessagePassing &= senderResult.MessageCompletedStatusCode == HttpStatusCode.OK;

            // Log the data if the reportin result is failing
            if (!isCurrentMessagePassing)
            {
                Logger.LogDebug($"\n MessageResultVerification = {string.Compare(senderResult.GetMessageTestResult(), receiverResult) == 0}\n\t\t|{senderResult.GetMessageTestResult()}|\n\t\t|{receiverResult}|\n SeqeunceNumber = {senderSeqNum} {receiverSeqNum}\n MessageStatusCode = {senderResult.MessageCompletedStatusCode}\n");
            }

            return(isCurrentMessagePassing);
        }
Exemple #4
0
        void AddEntryToCompletedStatusHistogram(EdgeHubRestartMessageResult senderResult)
        {
            HttpStatusCode completedStatus = senderResult.MessageCompletedStatusCode;
            TimeSpan       completedPeriod = senderResult.MessageCompletedTime - senderResult.EdgeHubRestartedTime;

            // Try to allocate the list if it is the first time HttpStatusCode shows up
            this.completedStatusHistogram.TryAdd(completedStatus, new List <TimeSpan>());
            this.completedStatusHistogram[completedStatus].Add(completedPeriod);
        }