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