/*
* 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 gobblin.source.extractor.watermark;
import java.util.Map;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.google.common.collect.Maps;
/**
* Unit tests for {@link DateWatermark}.
*
* @author ydai
*/
@Test(groups = { "gobblin.source.extractor.watermark" })
public class DateWatermarkTest {
/**
* Test the method getIntervals, when the lowWaterMark is greater than the highWaterMark.
*/
@Test
public void testGetIntervalsOnNegDiff() {
DateWatermark datewm = new DateWatermark("Datewatermark", "test");
long lwm = 20150206000000l;
long hwm = 20150201000000l;
int partition = 30;
int maxInterval = 4;
Map<Long, Long> results = datewm.getIntervals(lwm, hwm, partition, maxInterval);
Assert.assertEquals(results.size(), 0);
}
/**
* Test the method getIntervals, when the lowWaterMark is equal to the highWaterMark.
*/
@Test
public void testGetIntervalsOnZeroDiff() {
DateWatermark datewm = new DateWatermark("Datewatermark", "test");
long lwm = 20150201000000l;
long hwm = 20150201000000l;
int partition = 30;
int maxInterval = 4;
Map<Long, Long> results = datewm.getIntervals(lwm, hwm, partition, maxInterval);
Map<Long, Long> expected = Maps.newHashMap();
Assert.assertEquals(results, expected);
}
/**
* Test the method getIntervals.
* Test when the number of intervals divided by the partition value is smaller than maxInterval,
* result intervals should be based on the partition value.
*/
@Test
public void testGetIntervalsOnParition() {
DateWatermark datewm = new DateWatermark("Datewatermark", "test");
long lwm = 20150201000000l;
long hwm = 20150206000000l;
//Partition by one day.
int partition = 30;
int maxInterval = 4;
Map<Long, Long> results = datewm.getIntervals(lwm, hwm, partition, maxInterval);
Map<Long, Long> expected = Maps.newHashMap();
expected.put(20150201000000l, 20150203000000l);
expected.put(20150203000000l, 20150205000000l);
expected.put(20150205000000l, 20150206000000l);
Assert.assertEquals(results, expected);
}
/**
* Test the method getIntervals.
* Test when the number of intervals divided by the partition value is greater than maxInterval,
* the number of result intervals should be equal to the maxInterval.
*/
@Test
public void testGetIntervalsOnMaxInterval() {
DateWatermark datewm = new DateWatermark("Datewatermark", "test");
long lwm = 20150201000000l;
long hwm = 20150206000000l;
int partition = 30;
int maxInterval = 2;
Map<Long, Long> results = datewm.getIntervals(lwm, hwm, partition, maxInterval);
Map<Long, Long> expected = Maps.newHashMap();
expected.put(20150201000000l, 20150204000000l);
expected.put(20150204000000l, 20150206000000l);
Assert.assertEquals(results, expected);
}
/**
* Test the method getIntervals, when taking invalid input of maxIntervals.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testGetIntervalsOnInvalidMaxInterval() {
DateWatermark datewm = new DateWatermark("Datewatermark", "test");
long lwm = 20150201011111l;
long hwm = 20150206111111l;
int partition = 30;
int maxInterval = -1;
datewm.getIntervals(lwm, hwm, partition, maxInterval);
}
/**
* Test the method getIntervals, when taking invalid input of partitionInterval.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testGetIntervalsOnInvalidPartitionInterval() {
DateWatermark datewm = new DateWatermark("Datewatermark", "test");
long lwm = 20150201011111l;
long hwm = 20150206111111l;
int partition = 20;
int maxInterval = 2;
datewm.getIntervals(lwm, hwm, partition, maxInterval);
}
}