Hi Matthias, I think that strategy definitely works, abstracting away changes to FixedKeyRecord from users, I can put that new factory class and update the KIP.
This might be a discussion for another KIP, but would it also make sense to rename the InternalFixedKeyRecordFactory to just FixedKeyRecordFactory also make sense? Regards, Shashwat Pandey On Mon, Jun 10, 2024 at 5:07 PM Matthias J. Sax <mj...@apache.org> wrote: > Shaswhat, > > any updates on this KIP? -- I still think that recommending to use > `InternalFixedKeyRecordFactory` is not the best way to write test code. > Changing `FixedKeyRecord` constructor (as I mentioned in my last email) > might not be a good solution either. > > Maybe a cleaner way would be (so sidestep this problem), to add a new > public "factory class" into the test package to generate > FixedKeyRecords, and this factory could internally use > `InternalFixedKeyRecordFactory`? It looks cleaner to me from an API POV, > and if we change anything how `FixedKeyRecord` can be created, it would > become a non-user-facing / internal change to the "factory" we provide. > > > -Matthias > > On 5/22/24 12:02 AM, Matthias J. Sax wrote: > > I was not aware of `InternalFixedKeyRecordFactory`. As the name > > indicates, it's considered an internal class, so not sure if we should > > recommend to use it in test... > > > > I understand why this class is required, and why it was put into a > > public package; the way Java works, enforces this. Not sure if we could > > find a better solution. > > > > Might be good to hear from others. > > > > > > -Matthias > > > > On 5/21/24 3:57 PM, Shashwat Pandey wrote: > >> Looking at the ticket and the sample code, I think it would be > >> possible to > >> continue using `InternalFixedKeyRecordFactory` as the avenue to create > >> `FixedKeyRecord`s in tests. As long as there was a > >> MockFixedKeyProcessorContext, I think we would be able to test > >> FixedKeyProcessors without a Topology. > >> > >> I created a sample repo with the `MockFixedKeyProcessorContext` here is > >> what I think the tests would look like: > >> > https://github.com/s7pandey/kafka-processor-tests/blob/main/src/test/java/com/example/demo/MyFixedKeyProcessorTest.java > >> > >> > >> > >> On Mon, May 20, 2024 at 9:05 PM Matthias J. Sax <mj...@apache.org> > wrote: > >> > >>> Had a discussion on https://issues.apache.org/jira/browse/KAFKA-15242 > >>> and it was pointed out, that we also need to do something about > >>> `FixedKeyRecord`. It does not have a public constructor (what is > >>> correct; it should not have one). However, this makes testing > >>> `FixedKeyProcessor` impossible w/o extending `FixedKeyRecord` manually > >>> what does not seem to be right (too clumsy). > >>> > >>> It seems, we either need some helper builder method (but not clear to > me > >>> where to add it in an elegant way) which would provide us with a > >>> `FixedKeyRecord`, or add some sub-class to the test-utils module which > >>> would extend `FixedKeyRecord`? -- Or maybe an even better solution? I > >>> could not think of something else so far. > >>> > >>> > >>> Thoughts? > >>> > >>> > >>> On 5/3/24 9:46 AM, Matthias J. Sax wrote: > >>>> Please also update the KIP. > >>>> > >>>> To get a wiki account created, please request it via a commet on this > >>>> ticket: https://issues.apache.org/jira/browse/INFRA-25451 > >>>> > >>>> After you have the account, please share your wiki id, and we can give > >>>> you write permission on the wiki. > >>>> > >>>> > >>>> > >>>> -Matthias > >>>> > >>>> On 5/3/24 6:30 AM, Shashwat Pandey wrote: > >>>>> Hi Matthias, > >>>>> > >>>>> Sorry this fell out of my radar for a bit. > >>>>> > >>>>> Revisiting the topic, I think you’re right and we accept the > >>>>> duplicated > >>>>> nesting as an appropriate solution to not affect the larger public > >>>>> API. > >>>>> > >>>>> I can update my PR with the change. > >>>>> > >>>>> Regards, > >>>>> Shashwat Pandey > >>>>> > >>>>> > >>>>> On Wed, May 1, 2024 at 11:00 PM Matthias J. Sax <mj...@apache.org> > >>> wrote: > >>>>> > >>>>>> Any updates on this KIP? > >>>>>> > >>>>>> On 3/28/24 4:11 AM, Matthias J. Sax wrote: > >>>>>>> It seems that `MockRecordMetadata` is a private class, and thus not > >>>>>>> part > >>>>>>> of the public API. If there are any changes required, we don't > >>>>>>> need to > >>>>>>> discuss on the KIP. > >>>>>>> > >>>>>>> > >>>>>>> For `CapturedPunctuator` and `CapturedForward` it's a little bit > >>>>>>> more > >>>>>>> tricky. My gut feeling is, that the classes might not need to be > >>>>>>> changed, but if we use them within `MockProcessorContext` and > >>>>>>> `MockFixedKeyProcessorContext` it might be weird to keep the > current > >>>>>>> nesting... The problem I see is, that it's not straightforward > >>>>>>> how to > >>>>>>> move the classes w/o breaking compatibility, nor if we duplicate > >>>>>>> them as > >>>>>>> standalone classes w/o a larger "splash radius". (We would need > >>>>>>> to add > >>>>>>> new overloads for MockProcessorContext#scheduledPunctuators() and > >>>>>>> MockProcessorContext#forwarded()). > >>>>>>> > >>>>>>> Might be good to hear from others if we think it's worth this > larger > >>>>>>> changes to get rid of the nesting, or just accept the somewhat not > >>>>>>> ideal > >>>>>>> nesting as it technically is not a real issue? > >>>>>>> > >>>>>>> > >>>>>>> -Matthias > >>>>>>> > >>>>>>> > >>>>>>> On 3/15/24 1:47 AM, Shashwat Pandey wrote: > >>>>>>>> Thanks for the feedback Matthias! > >>>>>>>> > >>>>>>>> The reason I proposed the extension of MockProcessorContext was > >>>>>>>> more > >>>>>>>> to do > >>>>>>>> with the internals of the class (MockRecordMetadata, > >>>>>>>> CapturedPunctuator and > >>>>>>>> CapturedForward). > >>>>>>>> > >>>>>>>> However, I do see your point, I would then think to split > >>>>>>>> MockProcessorContext and MockFixedKeyProcessorContext, some of the > >>>>>>>> internal > >>>>>>>> classes should also be extracted i.e. MockRecordMetadata, > >>>>>>>> CapturedPunctuator and probably a new CapturedFixedKeyForward. > >>>>>>>> > >>>>>>>> Let me know what you think! > >>>>>>>> > >>>>>>>> > >>>>>>>> Regards, > >>>>>>>> Shashwat Pandey > >>>>>>>> > >>>>>>>> > >>>>>>>> On Mon, Mar 11, 2024 at 10:09 PM Matthias J. Sax < > mj...@apache.org> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Thanks for the KIP Shashwat. Closing this testing gap is great! > It > >>>>>>>>> did > >>>>>>>>> come up a few time already... > >>>>>>>>> > >>>>>>>>> One question: why do you propose to `extend > MockProcessorContext`? > >>>>>>>>> > >>>>>>>>> Given how the actual runtime context classes are setup, it seems > >>> that > >>>>>>>>> the regular context and fixed-key-context are distinct, and thus > I > >>>>>>>>> believe both mock-context classes should be distinct, too? > >>>>>>>>> > >>>>>>>>> What I mean is that FixedKeyProcessorContext does not extend > >>>>>>>>> ProcessorContext. Both classes have a common parent > >>> ProcessINGContext > >>>>>>>>> (note the very similar but different names), but they are > >>>>>>>>> "siblings" > >>>>>>>>> only, so why make the mock processor a parent-child relationship? > >>>>>>>>> > >>>>>>>>> It seems better to do > >>>>>>>>> > >>>>>>>>> public class MockFixedKeyProcessorContext<KForward, VForward> > >>>>>>>>> implements FixedKeyProcessorContext<KForward, VForward>, > >>>>>>>>> RecordCollector.Supplier > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Of course, if there is code we can share between both > mock-context > >>> we > >>>>>>>>> should so this, but it should not leak into the public API? > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -Matthias > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On 3/11/24 5:21 PM, Shashwat Pandey wrote: > >>>>>>>>>> Hi everyone, > >>>>>>>>>> > >>>>>>>>>> I would like to start the discussion on > >>>>>>>>>> > >>>>>>>>> > >>>>>> > >>> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-1027%3A+Add+MockFixedKeyProcessorContext > >>>>>>>>>> > >>>>>>>>>> This adds MockFixedKeyProcessorContext to the Kafka Streams Test > >>>>>>>>>> Utils > >>>>>>>>>> library. > >>>>>>>>>> > >>>>>>>>>> Regards, > >>>>>>>>>> Shashwat Pandey > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>> > >>>>> > >>> > >> > >> >