@@ -241,7 +241,7 @@ public void testCreateAnomalyDetector_withFlattenedResultIndex() throws Exceptio
241
241
.format (Locale .ROOT , "/opensearch-ad-plugin-result-test_flattened_%s" , id .toLowerCase (Locale .ROOT ));
242
242
// wait for the detector starts writing result
243
243
try {
244
- Thread .sleep (60 * 1000 );
244
+ Thread .sleep (20 * 1000 );
245
245
} catch (InterruptedException e ) {
246
246
Thread .currentThread ().interrupt ();
247
247
throw new RuntimeException ("Thread was interrupted while waiting" , e );
@@ -256,6 +256,81 @@ public void testCreateAnomalyDetector_withFlattenedResultIndex() throws Exceptio
256
256
assertEquals ("Dynamic field is not set to true" , "true" , dynamicValue .toString ());
257
257
Map <String , Object > properties = (Map <String , Object >) mappings .get ("properties" );
258
258
assertTrue ("Flattened field 'feature_data_feature_bytes' does not exist" , properties .containsKey ("feature_data_feature_bytes" ));
259
+
260
+ }
261
+
262
+ public void testUpdateAnomalyDetector_enableFlattenResultIndex_shouldCreatePipeline () throws Exception {
263
+ AnomalyDetector detector = createIndexAndGetAnomalyDetector (
264
+ INDEX_NAME ,
265
+ ImmutableList .of (TestHelpers .randomFeature ("feature_bytes" , "agg" , true )),
266
+ false ,
267
+ false
268
+ );
269
+
270
+ // test behavior when AD is enabled
271
+ updateClusterSettings (ADEnabledSetting .AD_ENABLED , true );
272
+ // create a detector with flatten result index disabled, shouldn't find related ingest pipeline
273
+ Response response = TestHelpers
274
+ .makeRequest (client (), "POST" , TestHelpers .AD_BASE_DETECTORS_URI , ImmutableMap .of (), TestHelpers .toHttpEntity (detector ), null );
275
+ assertEquals ("Create anomaly detector with flattened result index failed" , RestStatus .CREATED , TestHelpers .restStatus (response ));
276
+ Map <String , Object > responseMap = entityAsMap (response );
277
+ String id = (String ) responseMap .get ("_id" );
278
+ String expectedPipelineId = String .format (Locale .ROOT , "flatten_result_index_ingest_pipeline%s" , id .toLowerCase (Locale .ROOT ));
279
+ String getIngestPipelineEndpoint = String .format (Locale .ROOT , "_ingest/pipeline/%s" , expectedPipelineId );
280
+ ResponseException responseException = expectThrows (
281
+ ResponseException .class ,
282
+ () -> TestHelpers .makeRequest (client (), "GET" , getIngestPipelineEndpoint , ImmutableMap .of (), "" , null )
283
+ );
284
+ int statusCode = responseException .getResponse ().getStatusLine ().getStatusCode ();
285
+ assertEquals ("Expected 404 response but got: " + statusCode , 404 , statusCode );
286
+
287
+ // update the detector with flatten result index enabled, should be able to find ingest pipeline
288
+ List <Feature > features = detector .getFeatureAttributes ();
289
+ AnomalyDetector newDetector = new AnomalyDetector (
290
+ id ,
291
+ detector .getVersion (),
292
+ detector .getName (),
293
+ detector .getDescription (),
294
+ detector .getTimeField (),
295
+ detector .getIndices (),
296
+ features ,
297
+ detector .getFilterQuery (),
298
+ detector .getInterval (),
299
+ detector .getWindowDelay (),
300
+ detector .getShingleSize (),
301
+ detector .getUiMetadata (),
302
+ detector .getSchemaVersion (),
303
+ detector .getLastUpdateTime (),
304
+ null ,
305
+ detector .getUser (),
306
+ detector .getCustomResultIndexOrAlias (),
307
+ TestHelpers .randomImputationOption (features ),
308
+ randomIntBetween (1 , 10000 ),
309
+ randomInt (TimeSeriesSettings .MAX_SHINGLE_SIZE / 2 ),
310
+ randomIntBetween (1 , 1000 ),
311
+ null ,
312
+ null ,
313
+ null ,
314
+ null ,
315
+ true ,
316
+ detector .getLastBreakingUIChangeTime ()
317
+ );
318
+ Response updateResponse = TestHelpers
319
+ .makeRequest (
320
+ client (),
321
+ "PUT" ,
322
+ TestHelpers .AD_BASE_DETECTORS_URI + "/" + id + "?refresh=true" ,
323
+ ImmutableMap .of (),
324
+ TestHelpers .toHttpEntity (newDetector ),
325
+ null
326
+ );
327
+ assertEquals ("Update anomaly detector failed" , RestStatus .OK , TestHelpers .restStatus (updateResponse ));
328
+ Response getPipelineResponse = TestHelpers .makeRequest (client (), "GET" , getIngestPipelineEndpoint , ImmutableMap .of (), "" , null );
329
+ assertEquals (
330
+ "Expected 200 response but got: " + getPipelineResponse .getStatusLine ().getStatusCode (),
331
+ 200 ,
332
+ getPipelineResponse .getStatusLine ().getStatusCode ()
333
+ );
259
334
}
260
335
261
336
public void testUpdateAnomalyDetector_disableFlattenResultIndex_shouldDeletePipeline () throws Exception {
@@ -273,8 +348,8 @@ public void testUpdateAnomalyDetector_disableFlattenResultIndex_shouldDeletePipe
273
348
assertEquals ("Create anomaly detector with flattened result index failed" , RestStatus .CREATED , TestHelpers .restStatus (response ));
274
349
Map <String , Object > responseMap = entityAsMap (response );
275
350
String id = (String ) responseMap .get ("_id" );
276
- String expectedFlattenedIndex = String
277
- .format (Locale .ROOT , "opensearch-ad-plugin-result-test_flattened_%s" , id .toLowerCase (Locale .ROOT ));
351
+ // String expectedFlattenedIndex = String
352
+ // .format(Locale.ROOT, "opensearch-ad-plugin-result-test_flattened_%s", id.toLowerCase(Locale.ROOT));
278
353
String expectedPipelineId = String .format (Locale .ROOT , "flatten_result_index_ingest_pipeline%s" , id .toLowerCase (Locale .ROOT ));
279
354
String getIngestPipelineEndpoint = String .format (Locale .ROOT , "_ingest/pipeline/%s" , expectedPipelineId );
280
355
Response getPipelineResponse = TestHelpers .makeRequest (client (), "GET" , getIngestPipelineEndpoint , ImmutableMap .of (), "" , null );
0 commit comments