[ 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)