Ali Ustek
12/14/2022, 11:13 AMAli Ustek
02/12/2023, 8:20 PMPactAvroPluginService is the Plugin implementation. I've lots of questions but here is a small list before I can continue
1- what is supposed to be in the ConfigureInteractionResponse, what is the content of the each Interaction? is it what ever the user put into the test for the consumer?
2- I've tried a dummy Interaction but getting While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length., so far I don't know why
3- What is plugin supposed to do? get a request, get a response and make the mock server respond with that response given the request?
4- where do content matchers/generators get into picture?Ali Ustek
02/16/2023, 4:48 PMAli Ustek
02/16/2023, 4:48 PMAli Ustek
02/28/2023, 11:36 PMCompareContentsRequest.actual and CompareContentsRequest.expected are of type ByteString . how are the values of those fields calculated. Can I just use actualBody.getContent.toStringUtf8 to and use it to build the Avro message?Ali Ustek
02/28/2023, 11:36 PMAli Ustek
03/07/2023, 11:00 AMAli Ustek
03/07/2023, 11:03 AMContentMismatch.actual and ContentMismatch.expected ?Ali Ustek
03/14/2023, 9:49 AMAli Ustek
03/14/2023, 9:51 AMAli Ustek
03/14/2023, 10:02 AMAli Ustek
03/14/2023, 10:02 AM09:42:14.391 [main] DEBUG a.c.d.pact.provider.ProviderVerifier - found class @au.com.dius.pact.provider.junitsupport.Provider("order-provider") @au.com.dius.pact.provider.junitsupport.loader.PactBroker(url="<http://localhost:9292>", host="${pactbroker.host:}", port="${pactbroker.port:}", scheme="${pactbroker.scheme:http}", tags={${pactbroker.tags:}}, consumerVersionSelectors={@au.com.dius.pact.provider.junitsupport.loader.VersionSelector(tag="${pactbroker.consumerversionselectors.tags:}", latest="${pactbroker.consumerversionselectors.latest:}", consumer="${pactbroker.consumers:}", fallbackTag="")}, consumers={${pactbroker.consumers:}}, authentication=@au.com.dius.pact.provider.junitsupport.loader.PactBrokerAuth(username="${pactbroker.auth.username:}", password="${pactbroker.auth.password:}", token="${pactbroker.auth.token:}", headerName="Authorization"), valueResolver=au.com.dius.pact.core.support.expressions.SystemPropertyResolver.class, enablePendingPacts="${pactbroker.enablePending:false}", providerTags={${pactbroker.providerTags:}}, providerBranch="${pactbroker.providerBranch:}", includeWipPactsSince="${pactbroker.includeWipPactsSince:}", enableInsecureTls="${pactbroker.enableInsecureTls:false}") class com.collibra.example.pulsar.avro.PactPulsarProducerTest
09:42:14.393 [main] DEBUG a.c.d.pact.provider.ProviderVerifier - found method [@au.com.dius.pact.provider.PactVerifyProvider("Order Created") public au.com.dius.pact.provider.MessageAndMetadata orderCreatedEvent()]
09:42:14.399 [main] DEBUG a.c.d.pact.provider.ProviderVerifier - Found methods = [public au.com.dius.pact.provider.MessageAndMetadata com.collibra.example.pulsar.avro.PactPulsarProducerTest.orderCreatedEvent() throws java.io.IOException]
generates a message which
has a matching body (FAILED)
has matching metadata (OK)
Failures:
1) Order Created: generates a message which has a matching body
1.1) body: / Actual body '�name-1��|A�������?�street nameItem-1Item21' is not equal to the expected body '�name-1��|A�������?�street nameItem-1Item-2'
09:42:14.720 [main] DEBUG a.c.d.p.p.DefaultTestResultAccumulator - Received test result 'Failed(results=[{attribute=body, description=Actual body '�name-1��|A�������?�street nameItem-1Item21' is not equal to the expected body '�name-1��|A�������?�street nameItem-1Item-2', identifier=/, diff=null, interactionId=857a381662884d96adb1cb05bc50788bf9d1ed65}], description=Body had differences)' for Pact order-provider-avro-consumer and Order Created (Pact Broker <http://localhost:9292/pacts/provider/order-provider/consumer/avro-consumer/pact-version/d5c261bfc261542df7e0d1f0ba81810ef94bb192/metadata/c1tdW2N2XT05>)
09:42:14.723 [main] DEBUG a.c.d.p.p.DefaultTestResultAccumulator - Number of interactions #1 and results: [Failed(results=[{attribute=body, description=Actual body '�name-1��|A�������?�street nameItem-1Item21' is not equal to the expected body '�name-1��|A�������?�street nameItem-1Item-2', identifier=/, diff=null, interactionId=857a381662884d96adb1cb05bc50788bf9d1ed65}], description=Body had differences)]
09:42:14.724 [main] DEBUG a.c.d.p.p.DefaultTestResultAccumulator - All interactions for Pact order-provider-avro-consumer have a verification result
09:42:14.724 [main] WARN a.c.d.p.p.DefaultTestResultAccumulator - Skipping publishing of verification results as it has been disabled (pact.verifier.publishResults is not 'true')
09:42:14.725 [main] DEBUG a.c.d.p.p.j.PactVerificationStateChangeExtension - afterEach for interaction 'Order Created'Ali Ustek
03/14/2023, 11:20 AMMessageAndMetadata target and using matcher <http://au.com|au.com>.dius.pact.core.matchers.Matching#matchBodyContents not the matcher from the plugin what am I missing?Yousaf Nabi (pactflow.io)
Ali Ustek
03/14/2023, 4:23 PMAli Ustek
03/14/2023, 4:25 PMAli Ustek
03/14/2023, 4:25 PMMap.entry("pact:avro", schemasPath),
Map.entry("pact:record-name", "Order"),
Map.entry("pact:content-type", "avro/binary"),Ali Ustek
03/14/2023, 4:25 PMuglyog
Ali Ustek
03/16/2023, 11:19 PMcompareContents method request.getPluginConfiguration.interactionConfiguration has no configuration, did I miss something?Yousaf Nabi (pactflow.io)
Tõnis Ojandu
03/24/2023, 5:32 PMAli Ustek
11/29/2023, 6:55 AMYousaf Nabi (pactflow.io)
Nathan Deamer
01/08/2025, 4:19 PM`body: $ Plugin Avro Schema configuration item with key '65304033840260accc36fc52520ed0ff' is required`
I've built a sample repo showing the problem here:
https://github.com/nathandeamer/pact-sample-avro
It seems to be because the metadata.plugins.configuration in the consumer pact file only gets populated with 1 of the 2 schemas
(Disclaimer: This is my first time using avro and pact plugins).Ali Ustek
09/06/2026, 8:42 AMAli Ustek
09/23/2026, 10:39 PMV4Pact(consumer, provider, merged, metadata, source)). Plugin config stored in metadata.plugins by later @Pact methods is dropped.
Impact: the Avro plugin stores each schema pact-wide under metadata.plugins[].configuration, keyed by hash. With one avsc per @Pact method, the merged pact only holds the first schema, and provider verification fails with "Plugin Avro Schema configuration item with key '<hash>' is required".
Repro: github.com/nathandeamer/pact-sample-avro
Is the metadata behaviour intentional? If not, would you accept a PR that merges metadata.plugins across the merged pacts? I'm making the Avro plugin resilient either way, by embedding the schema on each interaction's own config.
github.com/ZirekHQ/pact-avro-plugin/issues/50Ali Ustek
09/29/2026, 7:50 PMAli Ustek
10/03/2026, 7:52 PM