package com.linkedin.camus.sweeper;
import java.util.List;
import java.util.Properties;
import org.apache.hadoop.fs.ContentSummary;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.Logger;
import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.junit.Test;
import com.linkedin.camus.sweeper.utils.DateUtils;
import static org.junit.Assert.*;
public class CamusSingleFolderSweeperPlannerTest extends EasyMockSupport {
@Test
public void testCreateSweeperJobProps() throws Exception {
FileSystem mockedFs = createMock(FileSystem.class);
Path inputDir = new Path("inputDir");
Path outputDir = new Path("outputDir");
DateUtils dUtils = new DateUtils(new Properties());
DateTime currentHour = dUtils.getCurrentHour();
DateTimeFormatter hourFormatter = dUtils.getDateTimeFormatter("YYYY/MM/dd/HH");
String hour = currentHour.minusHours(1).toString(hourFormatter);
Path inputDirWithHour = new Path(inputDir, hour);
Path outputDirWithHour = new Path(outputDir, hour);
//inputDir should exist, but outputDir shouldn't.
EasyMock.expect(mockedFs.exists(inputDir)).andReturn(true).once();
EasyMock.expect(mockedFs.exists(outputDirWithHour)).andReturn(false).once();
FileStatus mockedFileStatus = createMock(FileStatus.class);
FileStatus[] fileStatuses = { mockedFileStatus };
EasyMock.expect(mockedFs.globStatus((Path) EasyMock.anyObject())).andReturn(fileStatuses).once();
EasyMock.expect(mockedFileStatus.getPath()).andReturn(inputDirWithHour).anyTimes();
ContentSummary mockedContentSummary = createMock(ContentSummary.class);
long dataSize = 100;
EasyMock.expect(mockedContentSummary.getLength()).andReturn(dataSize).once();
EasyMock.expect(mockedFs.getContentSummary(inputDirWithHour)).andReturn(mockedContentSummary).once();
replayAll();
String topic = "testTopic";
List<Properties> jobPropsList =
new CamusSingleFolderSweeperPlanner().setPropertiesLogger(new Properties(), Logger.getLogger("testLogger"))
.createSweeperJobProps(topic, inputDir, outputDir, mockedFs);
assertEquals(1, jobPropsList.size());
Properties jobProps = jobPropsList.get(0);
String topicAndHour = topic + ":" + hour;
assertEquals(topic, jobProps.getProperty("topic"));
assertEquals(topicAndHour, jobProps.getProperty(CamusSingleFolderSweeper.TOPIC_AND_HOUR));
assertEquals(inputDirWithHour.toString(), jobProps.getProperty(CamusSingleFolderSweeper.INPUT_PATHS));
assertEquals(outputDirWithHour.toString(), jobProps.getProperty(CamusSingleFolderSweeper.DEST_PATH));
}
}