|  | 
| 5 | 5 | 
 | 
| 6 | 6 | package org.opensearch.indexmanagement.indexstatemanagement.coordinator | 
| 7 | 7 | 
 | 
|  | 8 | +import com.nhaarman.mockitokotlin2.mock | 
|  | 9 | +import com.nhaarman.mockitokotlin2.whenever | 
| 8 | 10 | import org.junit.Before | 
| 9 |  | -import org.mockito.Mockito | 
| 10 |  | -import org.opensearch.action.admin.cluster.node.info.NodesInfoAction | 
| 11 |  | -import org.opensearch.client.Client | 
| 12 |  | -import org.opensearch.cluster.ClusterChangedEvent | 
| 13 |  | -import org.opensearch.cluster.OpenSearchAllocationTestCase | 
|  | 11 | +import org.opensearch.Version | 
|  | 12 | +import org.opensearch.cluster.ClusterState | 
|  | 13 | +import org.opensearch.cluster.node.DiscoveryNode | 
|  | 14 | +import org.opensearch.cluster.node.DiscoveryNodes | 
|  | 15 | +import org.opensearch.cluster.service.ClusterService | 
|  | 16 | +import org.opensearch.core.common.transport.TransportAddress | 
| 14 | 17 | import org.opensearch.indexmanagement.indexstatemanagement.SkipExecution | 
|  | 18 | +import org.opensearch.test.OpenSearchTestCase | 
| 15 | 19 | 
 | 
| 16 |  | -class SkipExecutionTests : OpenSearchAllocationTestCase() { | 
|  | 20 | +class SkipExecutionTests : OpenSearchTestCase() { | 
|  | 21 | +    private var clusterService: ClusterService = mock() | 
| 17 | 22 | 
 | 
| 18 |  | -    private lateinit var client: Client | 
|  | 23 | +    private lateinit var clusterState: ClusterState | 
| 19 | 24 |     private lateinit var skip: SkipExecution | 
| 20 | 25 | 
 | 
| 21 | 26 |     @Before | 
| 22 |  | -    @Throws(Exception::class) | 
| 23 | 27 |     fun setup() { | 
| 24 |  | -        client = Mockito.mock(Client::class.java) | 
| 25 |  | -        skip = SkipExecution(client) | 
|  | 28 | +        skip = SkipExecution() | 
| 26 | 29 |     } | 
| 27 | 30 | 
 | 
| 28 |  | -    fun `test cluster change event`() { | 
| 29 |  | -        val event = Mockito.mock(ClusterChangedEvent::class.java) | 
| 30 |  | -        Mockito.`when`(event.nodesChanged()).thenReturn(true) | 
| 31 |  | -        skip.sweepISMPluginVersion() | 
| 32 |  | -        Mockito.verify(client).execute(Mockito.eq(NodesInfoAction.INSTANCE), Mockito.any(), Mockito.any()) | 
|  | 31 | +    fun `test sweepISMPluginVersion should set flag to false and hasLegacyPlugin to false when all nodes have the same version`() { | 
|  | 32 | +        val version = Version.CURRENT | 
|  | 33 | +        val node1 = DiscoveryNode("node1", TransportAddress(TransportAddress.META_ADDRESS, 9300), version) | 
|  | 34 | +        val node2 = DiscoveryNode("node2", TransportAddress(TransportAddress.META_ADDRESS, 9301), version) | 
|  | 35 | +        val discoveryNodes = DiscoveryNodes.builder().add(node1).add(node2).build() | 
|  | 36 | +        clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).nodes(discoveryNodes).build() | 
|  | 37 | +        whenever(clusterService.state()).thenReturn(clusterState) | 
|  | 38 | + | 
|  | 39 | +        skip.sweepISMPluginVersion(clusterService) | 
|  | 40 | + | 
|  | 41 | +        assertFalse(skip.flag) | 
|  | 42 | +        assertFalse(skip.hasLegacyPlugin) | 
|  | 43 | +    } | 
|  | 44 | + | 
|  | 45 | +    fun `test sweepISMPluginVersion should set flag to true and hasLegacyPlugin to false when all nodes have the different versions`() { | 
|  | 46 | +        val version1 = Version.CURRENT | 
|  | 47 | +        val version2 = Version.V_2_0_0 | 
|  | 48 | +        val node1 = DiscoveryNode("node1", TransportAddress(TransportAddress.META_ADDRESS, 9300), version1) | 
|  | 49 | +        val node2 = DiscoveryNode("node2", TransportAddress(TransportAddress.META_ADDRESS, 9301), version2) | 
|  | 50 | +        val node3 = DiscoveryNode("node3", TransportAddress(TransportAddress.META_ADDRESS, 9302), version2) | 
|  | 51 | +        val discoveryNodes = DiscoveryNodes.builder().add(node1).add(node2).add(node3).build() | 
|  | 52 | +        clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).nodes(discoveryNodes).build() | 
|  | 53 | +        whenever(clusterService.state()).thenReturn(clusterState) | 
|  | 54 | + | 
|  | 55 | +        skip.sweepISMPluginVersion(clusterService) | 
|  | 56 | + | 
|  | 57 | +        assertTrue(skip.flag) | 
|  | 58 | +        assertFalse(skip.hasLegacyPlugin) | 
|  | 59 | +    } | 
|  | 60 | + | 
|  | 61 | +    fun `test sweepISMPluginVersion should set flag to true and hasLegacyPlugin to true when there are different versions including current version`() { | 
|  | 62 | +        val minVersion = Version.fromString("7.10.0") | 
|  | 63 | +        val maxVersion = Version.CURRENT | 
|  | 64 | +        val node1 = DiscoveryNode("node1", TransportAddress(TransportAddress.META_ADDRESS, 9300), minVersion) | 
|  | 65 | +        val node2 = DiscoveryNode("node2", TransportAddress(TransportAddress.META_ADDRESS, 9301), maxVersion) | 
|  | 66 | +        val node3 = DiscoveryNode("node3", TransportAddress(TransportAddress.META_ADDRESS, 9302), maxVersion) | 
|  | 67 | +        val discoveryNodes = DiscoveryNodes.builder().add(node1).add(node2).add(node3).build() | 
|  | 68 | +        clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).nodes(discoveryNodes).build() | 
|  | 69 | +        whenever(clusterService.state()).thenReturn(clusterState) | 
|  | 70 | + | 
|  | 71 | +        skip.sweepISMPluginVersion(clusterService) | 
|  | 72 | + | 
|  | 73 | +        assertTrue(skip.flag) | 
|  | 74 | +        assertTrue(skip.hasLegacyPlugin) | 
|  | 75 | +    } | 
|  | 76 | + | 
|  | 77 | +    fun `test sweepISMPluginVersion should set flag to true and hasLegacyPlugin to true with different versions`() { | 
|  | 78 | +        val minVersion = Version.fromString("7.10.0") | 
|  | 79 | +        val maxVersion = Version.V_2_0_0 | 
|  | 80 | +        val node1 = DiscoveryNode("node1", TransportAddress(TransportAddress.META_ADDRESS, 9300), minVersion) | 
|  | 81 | +        val node2 = DiscoveryNode("node2", TransportAddress(TransportAddress.META_ADDRESS, 9301), maxVersion) | 
|  | 82 | +        val node3 = DiscoveryNode("node3", TransportAddress(TransportAddress.META_ADDRESS, 9302), maxVersion) | 
|  | 83 | + | 
|  | 84 | +        val discoveryNodes = DiscoveryNodes.builder().add(node1).add(node2).add(node3).build() | 
|  | 85 | +        clusterState = ClusterState.builder(ClusterState.EMPTY_STATE).nodes(discoveryNodes).build() | 
|  | 86 | +        whenever(clusterService.state()).thenReturn(clusterState) | 
|  | 87 | + | 
|  | 88 | +        skip.sweepISMPluginVersion(clusterService) | 
|  | 89 | + | 
|  | 90 | +        assertTrue(skip.flag) | 
|  | 91 | +        assertTrue(skip.hasLegacyPlugin) | 
| 33 | 92 |     } | 
| 34 | 93 | } | 
0 commit comments