[ 
https://issues.apache.org/jira/browse/IGNITE-22388?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Zlenko reassigned IGNITE-22388:
------------------------------------

    Assignee: Ivan Zlenko

> Recheck tests from TableManagerTest for correctness 
> ----------------------------------------------------
>
>                 Key: IGNITE-22388
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22388
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Mikhail Efremov
>            Assignee: Ivan Zlenko
>            Priority: Major
>              Labels: ignite-3
>
> *Description*
> During IGNITE-22315 we found that tests 
> {{TableManagerTest#tableManagerStopTest*}} are failed and after 
> investigations there was clear that several static mocks aren't in use in 
> tests that leads to actually unworked tests. The special case was fixed in 
> IGNITE-22355, but there are more issued places, especially described below. 
> The main goal of the ticket is to revise the test class and rewrite it in 
> accordings to its purpose without any excessive, unused code lines.
> *Motivation*
> There will be provided 3 examples with problematic code the was found in 
> {{TableManagerTable#tableManagerStopTest*}} but not limited.
> The first code smell is the name of the tests: 
> {{{}TableManagerTable#tableManagerStopTest1-4{}}}. The names doesn't tell how 
> 1st and 4th are different.
> The second is another (except that in IGNITE-22355) static mock 
> {{schemaServiceMock}} in try-with-resources block that shouldn't work outside 
> the block:
> {code:java}
> private TableViewInternal mockManagersAndCreateTableWithDelay(
>         String tableName,
>         CompletableFuture<TableManager> tblManagerFut,
>         @Nullable Phaser phaser
> ) throws Exception {
>     String consistentId = "node0";
>     // ...
>     when(ts.getByConsistentId(any())).thenReturn(new ClusterNodeImpl(
>             UUID.randomUUID().toString(),
>             consistentId,
>             new NetworkAddress("localhost", 47500)
>     ));
>     try (MockedStatic<SchemaUtils> schemaServiceMock = 
> mockStatic(SchemaUtils.class)) {
>         schemaServiceMock.when(() -> 
> SchemaUtils.prepareSchemaDescriptor(any()))
>                 .thenReturn(mock(SchemaDescriptor.class));
>     }
>     try (MockedStatic<AffinityUtils> affinityServiceMock = 
> mockStatic(AffinityUtils.class)) {
>         ArrayList<List<ClusterNode>> assignment = new ArrayList<>(PARTITIONS);
>         for (int part = 0; part < PARTITIONS; part++) {
>             assignment.add(new ArrayList<>(Collections.singleton(node)));
>         }
>         affinityServiceMock.when(() -> 
> AffinityUtils.calculateAssignments(any(), anyInt(), anyInt()))
>                 .thenReturn(assignment);
>     }
>     //...
> {code}
> In the test class there are only two such mocks and {{affinityServiceMock}} 
> is removed in IGNITE-22355, but {{schemaServiceMock}} still requires 
> reworking.
> The third issue in the code above: the problem is that {{ts}} isn't really 
> uses: {{ts}} is topology service field in the test class, but for 
> {{TableManager}} creation topology service arrives from a mocked cluster 
> service:
> {code:java}
> private TableManager createTableManager(/*...*/) {
>       TableManager tableManager = new TableManager(
>               // ...
>               clusterService.topologyService(),
>               //...
> {code}
> {{topologyService}} is mocked in {{before}} with another mock:
> {code:java}
> @BeforeEach
>  void before() throws NodeStoppingException {
>      // ...
>      TopologyService topologyService = mock(TopologyService.class);
>      when(clusterService.topologyService()).thenReturn(topologyService);
>      // ...
> {code}
> That means, that {{ts}} field isn't in use and the code above is just for 
> nothing.
> There only 3 arguments, but they shows drastical problems with the test class 
> and the ticket calls for the class reworking.
> *Definition of done*
>  # Tests' names should have meaningful names that differs one from another.
>  # Tests shouldn't contain unused and meaningless code.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to