/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ package org.opensearch.indexmanagement.rollup.util import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.eq import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.doReturn import org.junit.Before import org.mockito.ArgumentMatchers.anyString import org.opensearch.cluster.service.ClusterService import org.opensearch.indexmanagement.rollup.randomRollup import org.opensearch.ingest.TestTemplateService import org.opensearch.script.ScriptService import org.opensearch.script.TemplateScript import org.opensearch.test.OpenSearchTestCase class RollupFieldValueExpressionResolverTests : OpenSearchTestCase() { private val scriptService: ScriptService = mock() private val clusterService: ClusterService = mock() private var indexAliasUtils: RollupFieldValueExpressionResolver.IndexAliasUtils = mock() @Before fun settings() { this.indexAliasUtils = mock() RollupFieldValueExpressionResolver.registerServices(scriptService, clusterService, indexAliasUtils) } fun `test resolving no alias successfully`() { whenever(scriptService.compile(any(), eq(TemplateScript.CONTEXT))).doReturn(TestTemplateService.MockTemplateScript.Factory("test_index_123")) whenever(indexAliasUtils.isAlias(anyString())).doReturn(false) val rollup = randomRollup().copy(sourceIndex = "test_index_123", targetIndex = "{{ctx.source_index}}") val targetIndexResolvedName = RollupFieldValueExpressionResolver.resolve(rollup, rollup.targetIndex) assertEquals("test_index_123", targetIndexResolvedName) } fun `test resolving with alias successfully`() { whenever(scriptService.compile(any(), eq(TemplateScript.CONTEXT))).doReturn(TestTemplateService.MockTemplateScript.Factory("test_index_123")) whenever(indexAliasUtils.isAlias(anyString())).doReturn(true) whenever(indexAliasUtils.getWriteIndexNameForAlias(anyString())).doReturn("backing_index") val rollup = randomRollup().copy(sourceIndex = "test_index_123", targetIndex = "{{ctx.source_index}}") val targetIndexResolvedName = RollupFieldValueExpressionResolver.resolve(rollup, rollup.targetIndex) assertEquals("backing_index", targetIndexResolvedName) } fun `test resolving failed returned passed value`() { whenever(scriptService.compile(any(), eq(TemplateScript.CONTEXT))).doReturn(TestTemplateService.MockTemplateScript.Factory("")) whenever(indexAliasUtils.isAlias(anyString())).doReturn(false) val rollup = randomRollup().copy(sourceIndex = "test_index_123", targetIndex = "{{ctx.source_index}}") val targetIndexResolvedName = RollupFieldValueExpressionResolver.resolve(rollup, rollup.targetIndex) assertEquals("{{ctx.source_index}}", targetIndexResolvedName) } }