@@ -147,4 +147,87 @@ class TransitionActionIT : IndexStateManagementRestTestCase() {
147147 // Should have evaluated to true
148148 waitFor { assertEquals(AttemptTransitionStep .getSuccessMessage(indexName, secondStateName), getExplainManagedIndexMetaData(indexName).info?.get(" message" )) }
149149 }
150+
151+ fun `test noAlias transition condition` () {
152+ val indexName = " ${testIndexName} _no_alias"
153+ val policyID = " ${testIndexName} _no_alias_policy"
154+ val secondStateName = " second"
155+ val states =
156+ listOf (
157+ State (" first" , listOf (), listOf (Transition (secondStateName, Conditions (noAlias = true )))),
158+ State (secondStateName, listOf (), listOf ()),
159+ )
160+
161+ val policy =
162+ Policy (
163+ id = policyID,
164+ description = " $testIndexName description" ,
165+ schemaVersion = 1L ,
166+ lastUpdatedTime = Instant .now().truncatedTo(ChronoUnit .MILLIS ),
167+ errorNotification = randomErrorNotification(),
168+ defaultState = states[0 ].name,
169+ states = states,
170+ )
171+
172+ createPolicy(policy, policyID)
173+ createIndex(indexName, policyID)
174+
175+ val managedIndexConfig = getExistingManagedIndexConfig(indexName)
176+
177+ // Initializing the policy/metadata
178+ updateManagedIndexConfigStartTime(managedIndexConfig)
179+
180+ waitFor { assertEquals(policyID, getExplainManagedIndexMetaData(indexName).policyID) }
181+
182+ // Evaluating transition conditions for first time (should succeed, no alias)
183+ updateManagedIndexConfigStartTime(managedIndexConfig)
184+ waitFor { assertEquals(AttemptTransitionStep .getSuccessMessage(indexName, secondStateName), getExplainManagedIndexMetaData(indexName).info?.get(" message" )) }
185+
186+ // Create a new index and add an alias, then attach the policy with noAlias=true (should NOT transition)
187+ val indexWithAlias = " ${testIndexName} _with_alias"
188+ createIndex(indexWithAlias, policyID, " foo-alias" )
189+ addPolicyToIndex(indexWithAlias, policyID)
190+ val managedIndexConfigWithAlias = getExistingManagedIndexConfig(indexWithAlias)
191+ updateManagedIndexConfigStartTime(managedIndexConfigWithAlias)
192+ waitFor { assertEquals(policyID, getExplainManagedIndexMetaData(indexWithAlias).policyID) }
193+ updateManagedIndexConfigStartTime(managedIndexConfigWithAlias)
194+ // Should not transition because alias exists and noAlias=true
195+ waitFor { assertEquals(AttemptTransitionStep .getEvaluatingMessage(indexWithAlias), getExplainManagedIndexMetaData(indexWithAlias).info?.get(" message" )) }
196+
197+ // Now test noAlias=false: should transition if alias exists
198+ val indexWithAlias2 = " ${indexWithAlias} _2"
199+ val policyIDWithNoAliasFalse = " ${testIndexName} _no_alias_false_policy"
200+ val statesWithNoAliasFalse =
201+ listOf (
202+ State (" first" , listOf (), listOf (Transition (secondStateName, Conditions (noAlias = false )))),
203+ State (secondStateName, listOf (), listOf ()),
204+ )
205+ val policyWithAlias =
206+ Policy (
207+ id = policyIDWithNoAliasFalse,
208+ description = " $testIndexName description" ,
209+ schemaVersion = 1L ,
210+ lastUpdatedTime = Instant .now().truncatedTo(ChronoUnit .MILLIS ),
211+ errorNotification = randomErrorNotification(),
212+ defaultState = statesWithNoAliasFalse[0 ].name,
213+ states = statesWithNoAliasFalse,
214+ )
215+ createPolicy(policyWithAlias, policyIDWithNoAliasFalse)
216+ waitFor { assertNotNull(getPolicy(policyIDWithNoAliasFalse)) }
217+ createIndex(indexWithAlias2, policyIDWithNoAliasFalse, " foo-alias-2" )
218+ addPolicyToIndex(indexWithAlias2, policyIDWithNoAliasFalse)
219+ val managedIndexConfigWithAlias2 = getExistingManagedIndexConfig(indexWithAlias2)
220+ updateManagedIndexConfigStartTime(managedIndexConfigWithAlias2)
221+ waitFor { assertEquals(policyIDWithNoAliasFalse, getExplainManagedIndexMetaData(indexWithAlias2).policyID) }
222+ updateManagedIndexConfigStartTime(managedIndexConfigWithAlias2)
223+ // Should transition because alias exists and noAlias=false
224+ waitFor {
225+ assertEquals(
226+ AttemptTransitionStep .getSuccessMessage(indexWithAlias2, secondStateName),
227+ getExplainManagedIndexMetaData(
228+ indexWithAlias2,
229+ ).info?.get(" message" ),
230+ )
231+ }
232+ }
150233}
0 commit comments