blob: cf90f04965ac842bfb60443eac3bdc757291f208 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.apache.falcon.lifecycle.retention;
import org.apache.falcon.FalconException;
import org.apache.falcon.entity.parser.ValidationException;
import org.apache.falcon.entity.v0.Frequency;
import org.apache.falcon.entity.v0.feed.Cluster;
import org.apache.falcon.entity.v0.feed.Clusters;
import org.apache.falcon.entity.v0.feed.Feed;
import org.apache.falcon.entity.v0.feed.LateArrival;
import org.apache.falcon.entity.v0.feed.Lifecycle;
import org.apache.falcon.entity.v0.feed.Properties;
import org.apache.falcon.entity.v0.feed.Property;
import org.apache.falcon.entity.v0.feed.RetentionStage;
import org.apache.falcon.entity.v0.feed.Sla;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* Tests for AgeBasedDelete Policy validations.
*/
public class AgeBasedDeleteTest {
private static Feed feed;
private static String clusterName = "testCluster";
@BeforeMethod
private void init() {
feed = new Feed();
Cluster cluster = new Cluster();
cluster.setName(clusterName);
Property property = new Property();
property.setName(AgeBasedDelete.LIMIT_PROPERTY_NAME);
property.setValue("hours(3)");
Properties properties = new Properties();
properties.getProperties().add(property);
RetentionStage retentionStage = new RetentionStage();
retentionStage.setProperties(properties);
Lifecycle lifecycle = new Lifecycle();
lifecycle.setRetentionStage(retentionStage);
cluster.setLifecycle(lifecycle);
Clusters clusters = new Clusters();
clusters.getClusters().add(cluster);
feed.setClusters(clusters);
//set sla
Sla sla = new Sla();
sla.setSlaLow(new Frequency("hours(3)"));
sla.setSlaHigh(new Frequency("hours(3)"));
feed.setSla(sla);
// set late data arrival
LateArrival lateArrival = new LateArrival();
lateArrival.setCutOff(new Frequency("hours(3)"));
feed.setLateArrival(lateArrival);
}
@Test(expectedExceptions = ValidationException.class,
expectedExceptionsMessageRegExp = ".*slaHigh of Feed:.*")
public void testSlaValidation() throws FalconException {
feed.getSla().setSlaHigh(new Frequency("hours(4)"));
new AgeBasedDelete().validate(feed, clusterName);
}
@Test(expectedExceptions = ValidationException.class,
expectedExceptionsMessageRegExp = ".*Feed's retention limit:.*")
public void testLateDataValidation() throws FalconException {
feed.getLateArrival().setCutOff(new Frequency("hours(4)"));
new AgeBasedDelete().validate(feed, clusterName);
}
@Test(expectedExceptions = FalconException.class,
expectedExceptionsMessageRegExp = ".*Invalid value for property.*")
public void testValidateLimit() throws FalconException {
feed.getClusters().getClusters().get(0).getLifecycle().getRetentionStage().getProperties().getProperties()
.get(0).setValue("invalid");
new AgeBasedDelete().validate(feed, clusterName);
}
@Test(expectedExceptions = FalconException.class, expectedExceptionsMessageRegExp = ".*limit is required.*")
public void testStageValidity() throws Exception {
feed.getClusters().getClusters().get(0).getLifecycle().getRetentionStage().getProperties().getProperties()
.clear();
new AgeBasedDelete().validate(feed, clusterName);
}
}