package com.mongodb.hadoop;
import com.mongodb.hadoop.output.MongoOutputCommitter;
import com.mongodb.hadoop.util.CompatUtils;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapred.JobConf;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class MongoOutputCommitterTest {
@Test
public void testGetTaskAttemptPath() {
// Empty configuration.
JobConf conf = new JobConf();
String taskName = "attempt_local138413205_0007_m_000000_0";
String suffix = String.format(
"/%s/%s/_out", taskName, MongoOutputCommitter.TEMP_DIR_NAME);
CompatUtils.TaskAttemptContext context =
CompatUtils.getTaskAttemptContext(conf, taskName);
conf.clear();
// /tmp
assertEquals(
"/tmp" + suffix,
MongoOutputCommitter.getTaskAttemptPath(context).toUri().getPath());
// system-wide tmp dir
conf.set("hadoop.tmp.dir", "/system-wide");
assertEquals(
"/system-wide" + suffix,
MongoOutputCommitter.getTaskAttemptPath(context).toUri().getPath());
// old style option
conf.set("mapred.child.tmp", "/child-tmp");
assertEquals(
"/child-tmp" + suffix,
MongoOutputCommitter.getTaskAttemptPath(context).toUri().getPath());
// new style option
conf.set("mapreduce.task.tmp.dir", "/new-child-tmp");
assertEquals(
"/new-child-tmp" + suffix,
MongoOutputCommitter.getTaskAttemptPath(context).toUri().getPath());
}
@Test
public void testCleanupResources() throws IOException {
// Empty configuration.
JobConf conf = new JobConf();
String taskName = "attempt_local138413205_0007_m_000000_0";
CompatUtils.TaskAttemptContext context =
CompatUtils.getTaskAttemptContext(conf, taskName);
conf.clear();
conf.set("mapreduce.task.tmp.dir", "/tmp");
conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
Path taskAttemptDir = MongoOutputCommitter.getTaskAttemptPath(context);
FileSystem fs = FileSystem.getLocal(conf);
fs.create(taskAttemptDir);
MongoOutputCommitter committer = new MongoOutputCommitter();
// Trigger cleanupResources.
committer.abortTask(context);
assertFalse(fs.exists(taskAttemptDir));
assertFalse(fs.exists(new Path("/tmp/" + taskName)));
assertTrue(fs.exists(new Path("/tmp")));
}
}