protected override bool MatchesSafely()

in src/Proton.TestPeer/Matchers/Types/Transport/TransferPayloadCompositeMatcher.cs [200:340]


      protected override bool MatchesSafely(byte[] payload)
      {
         MemoryStream stream = new(payload);
         long origLength = stream.Length;
         long bytesConsumed = 0;

         if (payloadLengthMatcher != null)
         {
            try
            {
               MatcherAssert.AssertThat("Payload length should match", origLength, payloadLengthMatcher);
            }
            catch (Exception t)
            {
               payloadLengthMatcherFailureDescription = "\nPayload Length Matcher generated throwable: " + t;

               return false;
            }
         }

         if (headersMatcher != null)
         {
            stream.Seek(bytesConsumed, SeekOrigin.Begin);

            try
            {
               bytesConsumed += headersMatcher.Verify(stream);
            }
            catch (Exception t)
            {
               headerMatcherFailureDescription += "\nMessageHeaderMatcher generated throwable: " + t;

               return false;
            }
         }

         if (deliveryAnnotationsMatcher != null)
         {
            stream.Seek(bytesConsumed, SeekOrigin.Begin);

            try
            {
               bytesConsumed += deliveryAnnotationsMatcher.Verify(stream);
            }
            catch (Exception t)
            {
               deliveryAnnotationsMatcherFailureDescription += "\nDeliveryAnnotationsMatcher generated throwable: " + t;

               return false;
            }
         }

         if (messageAnnotationsMatcher != null)
         {
            stream.Seek(bytesConsumed, SeekOrigin.Begin);

            try
            {
               bytesConsumed += messageAnnotationsMatcher.Verify(stream);
            }
            catch (Exception t)
            {
               messageAnnotationsMatcherFailureDescription += "\nMessageAnnotationsMatcher generated throwable: " + t;

               return false;
            }
         }

         if (propertiesMatcher != null)
         {
            stream.Seek(bytesConsumed, SeekOrigin.Begin);

            try
            {
               bytesConsumed += propertiesMatcher.Verify(stream);
            }
            catch (Exception t)
            {
               propertiesMatcherFailureDescription += "\nPropertiesMatcher generated throwable: " + t;

               return false;
            }
         }

         if (applicationPropertiesMatcher != null)
         {
            stream.Seek(bytesConsumed, SeekOrigin.Begin);

            try
            {
               bytesConsumed += applicationPropertiesMatcher.Verify(stream);
            }
            catch (Exception t)
            {
               applicationPropertiesMatcherFailureDescription += "\nApplicationPropertiesMatcher generated throwable: " + t;

               return false;
            }
         }

         if (msgContentMatchers.Count > 0)
         {
            foreach (IMatcher msgContentMatcher in msgContentMatchers)
            {
               stream.Seek(bytesConsumed, SeekOrigin.Begin);
               long originalReadableBytes = stream.Length - stream.Position;
               bool contentMatches = msgContentMatcher.Matches(stream);

               if (!contentMatches)
               {
                  IDescription desc = new StringDescription();
                  msgContentMatcher.DescribeTo(desc);
                  msgContentMatcher.DescribeMismatch(stream, desc);

                  msgContentMatcherFailureDescription = "\nMessageContentMatcher mismatch Description:";
                  msgContentMatcherFailureDescription += desc.ToString();

                  return false;
               }

               bytesConsumed += originalReadableBytes - (stream.Length - stream.Position);
            }
         }

         if (footersMatcher != null)
         {
            stream.Seek(bytesConsumed, SeekOrigin.Begin);
            try
            {
               bytesConsumed += footersMatcher.Verify(stream);
            }
            catch (Exception t)
            {
               footerMatcherFailureDescription += "\nFooterMatcher generated throwable: " + t;

               return false;
            }
         }

         return true;
      }