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