[
https://issues.apache.org/jira/browse/FLINK-25220?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jing Ge updated FLINK-25220:
----------------------------
Description:
The original idea of this PR is to build architectural rules for ITCase and
quickly found that current architecture test submodule only focuses on
production code. In order to check the architecture violation of test code,
followings should be done:
* build the architecture test infra for test code
* isolate the classpaths of production code and test code, i.e. separation of
concers.
* define architectural rules for ITCase
* create ArchUnit test for some submodules
The first try was using test jars of submodules and check the architectural
violation centrally. There are some cons of this solution. First, it will need
each submodule to create standard test jars that have conflict with some
submodules who need extra exclusion filter for their test jars. Second,
production code and test code mixed up, which makes it very difficult to define
the scope of analyse classes for each rule, because some rules should only have
effect on production code and others should only be used for test code. As
second try, a distributed solution will be used. The architecture-test module
will be split into three submodules: base for ArchUnit common extension,
production for ArchUnit test of production code, test for defining rules for
test code centrally. The real ArchUnit tests will be distributed and developed
within submodules where architectural violation check is required.
Architectural rules are required to verify that all IT cases should have:
* for JUnit4
a public, static, final member of type MiniClusterWithClientResource annotated
with ClassRule.
or
a public, non-static, final member of type MiniClusterWithClientResource
annotated with Rule.
* for JUnit5
a public, static, final member of type MiniClusterExtension
and
a public, static, final member of type AllCallbackWrapper annotated with
RegisterExtension
The inheritance hierarchy need to be checked, because the member of MiniCluster
could be defined in the super class.
was:
Writing an architectural rule verifies that all IT cases (within
o.a.f.table.*?) have for JUnit 4:
# a public, static member of type MiniClusterWithClientResource annotated with
ClassRule.
# a public, non-static member of type MiniClusterWithClientResource annotated
with Rule.
Cover MiniClusterWithClientExtension for JUnit 5.
Detect resources setup in parent classes.
> Write an architectural rule for all IT cases w.r.t. MiniCluster
> ---------------------------------------------------------------
>
> Key: FLINK-25220
> URL: https://issues.apache.org/jira/browse/FLINK-25220
> Project: Flink
> Issue Type: Improvement
> Components: Tests
> Reporter: Jing Ge
> Assignee: Jing Ge
> Priority: Major
> Labels: pull-request-available
>
> The original idea of this PR is to build architectural rules for ITCase and
> quickly found that current architecture test submodule only focuses on
> production code. In order to check the architecture violation of test code,
> followings should be done:
> * build the architecture test infra for test code
> * isolate the classpaths of production code and test code, i.e. separation
> of concers.
> * define architectural rules for ITCase
> * create ArchUnit test for some submodules
> The first try was using test jars of submodules and check the architectural
> violation centrally. There are some cons of this solution. First, it will
> need each submodule to create standard test jars that have conflict with some
> submodules who need extra exclusion filter for their test jars. Second,
> production code and test code mixed up, which makes it very difficult to
> define the scope of analyse classes for each rule, because some rules should
> only have effect on production code and others should only be used for test
> code. As second try, a distributed solution will be used. The
> architecture-test module will be split into three submodules: base for
> ArchUnit common extension, production for ArchUnit test of production code,
> test for defining rules for test code centrally. The real ArchUnit tests will
> be distributed and developed within submodules where architectural violation
> check is required.
> Architectural rules are required to verify that all IT cases should have:
> * for JUnit4
> a public, static, final member of type MiniClusterWithClientResource
> annotated with ClassRule.
> or
> a public, non-static, final member of type MiniClusterWithClientResource
> annotated with Rule.
> * for JUnit5
> a public, static, final member of type MiniClusterExtension
> and
> a public, static, final member of type AllCallbackWrapper annotated with
> RegisterExtension
> The inheritance hierarchy need to be checked, because the member of
> MiniCluster could be defined in the super class.
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)