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