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