/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.search.aggregations.pipeline.moving.avg; import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.search.aggregations.BasePipelineAggregationTestCase; import org.elasticsearch.search.aggregations.PipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; import org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.movavg.models.EwmaModel; import org.elasticsearch.search.aggregations.pipeline.movavg.models.HoltLinearModel; import org.elasticsearch.search.aggregations.pipeline.movavg.models.HoltWintersModel; import org.elasticsearch.search.aggregations.pipeline.movavg.models.HoltWintersModel.SeasonalityType; import org.elasticsearch.search.aggregations.pipeline.movavg.models.LinearModel; import org.elasticsearch.search.aggregations.pipeline.movavg.models.SimpleModel; public class MovAvgTests extends BasePipelineAggregationTestCase<MovAvgPipelineAggregationBuilder> { @Override protected MovAvgPipelineAggregationBuilder createTestAggregatorFactory() { String name = randomAlphaOfLengthBetween(3, 20); String bucketsPath = randomAlphaOfLengthBetween(3, 20); MovAvgPipelineAggregationBuilder factory = new MovAvgPipelineAggregationBuilder(name, bucketsPath); if (randomBoolean()) { factory.format(randomAlphaOfLengthBetween(1, 10)); } if (randomBoolean()) { factory.gapPolicy(randomFrom(GapPolicy.values())); } if (randomBoolean()) { switch (randomInt(4)) { case 0: factory.modelBuilder(new SimpleModel.SimpleModelBuilder()); factory.window(randomIntBetween(1, 100)); break; case 1: factory.modelBuilder(new LinearModel.LinearModelBuilder()); factory.window(randomIntBetween(1, 100)); break; case 2: if (randomBoolean()) { factory.modelBuilder(new EwmaModel.EWMAModelBuilder()); factory.window(randomIntBetween(1, 100)); } else { factory.modelBuilder(new EwmaModel.EWMAModelBuilder().alpha(randomDouble())); factory.window(randomIntBetween(1, 100)); } break; case 3: if (randomBoolean()) { factory.modelBuilder(new HoltLinearModel.HoltLinearModelBuilder()); factory.window(randomIntBetween(1, 100)); } else { factory.modelBuilder(new HoltLinearModel.HoltLinearModelBuilder().alpha(randomDouble()).beta(randomDouble())); factory.window(randomIntBetween(1, 100)); } break; case 4: default: if (randomBoolean()) { factory.modelBuilder(new HoltWintersModel.HoltWintersModelBuilder()); factory.window(randomIntBetween(2, 100)); } else { int period = randomIntBetween(1, 100); factory.modelBuilder( new HoltWintersModel.HoltWintersModelBuilder().alpha(randomDouble()).beta(randomDouble()).gamma(randomDouble()) .period(period).seasonalityType(randomFrom(SeasonalityType.values())).pad(randomBoolean())); factory.window(randomIntBetween(2 * period, 200 * period)); } break; } } factory.predict(randomIntBetween(1, 50)); if (factory.model().canBeMinimized() && randomBoolean()) { factory.minimize(randomBoolean()); } return factory; } public void testDefaultParsing() throws Exception { MovAvgPipelineAggregationBuilder expected = new MovAvgPipelineAggregationBuilder("commits_moving_avg", "commits"); String json = "{" + " \"commits_moving_avg\": {" + " \"moving_avg\": {" + " \"buckets_path\": \"commits\"" + " }" + " }" + "}"; PipelineAggregationBuilder newAgg = parse(createParser(JsonXContent.jsonXContent, json)); assertNotSame(newAgg, expected); assertEquals(expected, newAgg); assertEquals(expected.hashCode(), newAgg.hashCode()); } }