I just quickly chatted with the author/maintainer of ArchUnit, and a module
which depends on every module that should be tested seems to be the best
solution. How do you feel about using flink-tests for this vs. having a
separate module for this purpose?


Ingo

On Mon, Sep 6, 2021 at 3:04 PM Ingo Bürk <i...@ververica.com> wrote:

> Hi Chesnay,
>
> Those are all great questions, and I want to tackle those as well. For the
> moment I went per-module, but runtime-wise that isn't ideal the more
> modules we'd activate this in. ArchUnit does cache classes between tests,
> but if we run them individually per module, we'd still add up quite a bit
> of execution time (a single module in my IDE is around 10s with the tests I
> currently have implemented, but I suspect the bottleneck here is the
> importing of classes, not the number of tests). Ideally we'd just run them
> once in a module with a big enough classpath to cover everything. If we
> have such a place, that would probably be our best shot. I'll also keep
> investigating here, of course.
>
> For now I just pushed a solution to avoid the overlap when executing it
> per-module by matching on the URI. It's not the prettiest solution, but
> does work; but that's more to not fail the tests in unrelated modules and
> doesn't help much with execution time.
>
>
> Ingo
>
> On Mon, Sep 6, 2021 at 1:57 PM Chesnay Schepler <ches...@apache.org>
> wrote:
>
>> Do you have an estimate for long these tests would run for?
>>
>> For project-wide tests, what are the options for setting that up?
>> If we let the tests run per-module then I guess they'd overlap
>> considerably (because other Flink modules are being put on the
>> classpath), which isn't ideal.
>>
>> On 06/09/2021 13:51, David Morávek wrote:
>> > Hi Ingo,
>> >
>> > +1 for this effort. This could automate lot of "written rules" that are
>> > easy to forget about / not to be aware of (such as that each test should
>> > extend the TestLogger as Till has already mentioned).
>> >
>> > I went trough your examples and ArchUnit looks really powerful and
>> > expressive while still being easy to read.
>> >
>> > Best,
>> > D.
>> >
>> > On Mon, Sep 6, 2021 at 1:00 PM Ingo Bürk <i...@ververica.com> wrote:
>> >
>> >> Thanks for your input Chesnay!
>> >>
>> >> The limitations of ArchUnit probably mostly stem from the fact that it
>> >> operates on byte code and thus can't access anything not accessible
>> from
>> >> byte code, i.e. JavaDocs. But I think Checkstyle and ArchUnit are
>> >> complementing each other quite well here. The main reason against
>> >> Checkstyle for these tests is its limitation to single files only,
>> >> rendering many tests (including the one you mentioned) impossible. The
>> >> secondary reason is that ArchUnit has more declarative APIs and the
>> tests
>> >> become quite easy to write and maintain (some groundwork effort is
>> needed,
>> >> of course). Over time we could probably expand quite a bit more on
>> what is
>> >> tested with ArchUnit as it can test entire architectures (package
>> accesses
>> >> etc.), and it has support for "freezing" known violations to prevent
>> new
>> >> violations and removing existing ones over time.
>> >>
>> >> The @VisibleForTesting use case you mentioned is possible; I've pushed
>> a
>> >> version of that rule to the draft PR now as well.
>> >>
>> >>
>> >> Best
>> >> Ingo
>> >>
>> >> On Mon, Sep 6, 2021 at 12:11 PM Chesnay Schepler <ches...@apache.org>
>> >> wrote:
>> >>
>> >>> This sounds like an interesting effort.
>> >>>
>> >>> The draft you have opened uses ArchUnit; can you explain a bit what
>> the
>> >>> capabilities/limitations of said tool are?
>> >>>
>> >>> One thing we wanted to have for a long time is that methods/classes
>> >>> annotated with @VisibleForTesting are not called from production code;
>> >>> would that be something that could be implemented?
>> >>>
>> >>> It's not a problem imo that tests need to run in order to catch stuff;
>> >>> so long as it is noticed on CI.
>> >>>
>> >>> On 03/09/2021 08:48, Ingo Bürk wrote:
>> >>>> Hi Timo, Till,
>> >>>>
>> >>>> thanks for your input already. I'm glad to hear that the idea
>> >> resonates,
>> >>>> also thanks for the additional ideas!
>> >>>>
>> >>>> I've created a JIRA issue[1] for now just to track this idea. I'm
>> also
>> >>>> working on a bit of a proof of concept and opened it as a draft
>> PR[2].
>> >>> I'm
>> >>>> happy for anyone to join that PR to look and discuss. The PR doesn't
>> >>>> necessarily intend to be merged in its current state, but is rather
>> for
>> >>>> evaluation.
>> >>>>
>> >>>> Meanwhile I'm also collecting ideas in a Google Doc, so if anyone
>> wants
>> >>> to
>> >>>> suggest more use cases to explore or implement, please let me know.
>> >>>>
>> >>>> [1] https://issues.apache.org/jira/browse/FLINK-24138
>> >>>> [2] https://github.com/apache/flink/pull/17133
>> >>>>
>> >>>>
>> >>>> Best
>> >>>> Ingo
>> >>>>
>> >>>> On Thu, Sep 2, 2021 at 12:31 PM Till Rohrmann <trohrm...@apache.org>
>> >>> wrote:
>> >>>>> If it is possible to automate these kinds of checks, then I am all
>> for
>> >>> it
>> >>>>> because everything else breaks eventually. So +1 for this proposal.
>> >>>>>
>> >>>>> I don't have experience with what tools are available, though.
>> >>>>>
>> >>>>> I would like to add a rule that every test class extends directly or
>> >>>>> indirectly TestLogger because otherwise it is super hard to make
>> sense
>> >>> of
>> >>>>> the test logs (Arvid will probably chime in stating that this will
>> be
>> >>>>> solved with Junit5 eventually).
>> >>>>>
>> >>>>> Not sure whether this is possible or not but if we can check that
>> all
>> >>>>> interfaces have properly defined JavaDocs on each method, then this
>> >>> could
>> >>>>> also be helpful in my opinion.
>> >>>>>
>> >>>>> Cheers,
>> >>>>> Till
>> >>>>>
>> >>>>> On Thu, Sep 2, 2021 at 11:16 AM Timo Walther <twal...@apache.org>
>> >>> wrote:
>> >>>>>> Hi Ingo,
>> >>>>>>
>> >>>>>> thanks for starting this discussion. Having more automation is
>> >>>>>> definitely desirable. Esp. in the API / SDK areas where we
>> frequently
>> >>>>>> have to add similar comments to PRs. The more checks the better. We
>> >>>>>> definitely also need more guidelines (e.g. how to develop a Flink
>> >>>>>> connector) but automation is safer then long checklists that might
>> be
>> >>>>>> out of date quickly.
>> >>>>>>
>> >>>>>> +1 to the proposal. I don't have an opinion on the tool though.
>> >>>>>>
>> >>>>>> Regards,
>> >>>>>> Timo
>> >>>>>>
>> >>>>>>
>> >>>>>> On 01.09.21 11:03, Ingo Bürk wrote:
>> >>>>>>> Hello everyone,
>> >>>>>>>
>> >>>>>>> I would like to start a discussion on introducing automated tests
>> >> for
>> >>>>>> more
>> >>>>>>> architectural rather than stilistic topics. For example, here are
>> a
>> >>> few
>> >>>>>>> things that seem worth checking to me (this is Table-API-focused
>> >> since
>> >>>>> it
>> >>>>>>> is the subsystem I'm involved in):
>> >>>>>>>
>> >>>>>>> (a) All classes in o.a.f.table.api should be annotated with one
>> >>>>>>> of @Internal, @PublicEvolving, or @Public.
>> >>>>>>> (b) Classes whose name ends in *ConnectorOptions should be located
>> >> in
>> >>>>>>> o.a.f.connector.*.table
>> >>>>>>> (c) Classes implementing DynamicSourceFactory / DynamicSinkFactory
>> >>>>> should
>> >>>>>>> have no static members of type ConfigOption
>> >>>>>>>
>> >>>>>>> There are probably significantly more cases worth checking, and
>> also
>> >>>>> more
>> >>>>>>> involved ones (these are rather simple examples), like disallowing
>> >>>>> access
>> >>>>>>> between certain packages etc. There are two questions I would like
>> >> to
>> >>>>> ask
>> >>>>>>> to the community:
>> >>>>>>>
>> >>>>>>> (1) Do you think such tests are useful in general?
>> >>>>>>> (2) What use cases come to mind for you?
>> >>>>>>>
>> >>>>>>> If the idea finds consensus, I would like to use (2) to
>> investigate
>> >>>>> which
>> >>>>>>> tooling to use. An obvious candidate is Checkstyle, as this is
>> >> already
>> >>>>>>> used. It also has the advantage of being well integrated in the
>> IDE.
>> >>>>>>> However, it is limited to looking at single files only, and custom
>> >>>>> checks
>> >>>>>>> are pretty complicated and involved to implement[1]. Another
>> >> possible
>> >>>>>> tool
>> >>>>>>> is ArchUnit[2], which would be significantly easier to maintain
>> and
>> >> is
>> >>>>>> more
>> >>>>>>> powerful, but in turn requires tests to be executed. If you have
>> >>>>> further
>> >>>>>>> suggestions (or thoughts) they would of course also be quite
>> >> welcome,
>> >>>>>>> though for now I would focus on (1) and (2) and go from there to
>> >>>>>> evaluate.
>> >>>>>>> [1] https://checkstyle.sourceforge.io/writingchecks.html
>> >>>>>>> [2] https://www.archunit.org/
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> Best
>> >>>>>>> Ingo
>> >>>>>>>
>> >>>
>>
>>

Reply via email to