/** * */ package gobblin.runtime.locks; import java.io.File; import org.apache.hadoop.fs.LocalFileSystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.Test; import com.google.common.base.Optional; import com.google.common.io.Files; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigValueFactory; import gobblin.runtime.api.JobSpec; /** * Unit tests for {@link FileBasedJobLockFactoryManager} */ public class FileBasedJobLockFactoryManagerTest { @Test public void testGetFactoryConfig() { FileBasedJobLockFactoryManager mgr = new FileBasedJobLockFactoryManager(); Config sysConfig1 = ConfigFactory.empty(); Assert.assertTrue(mgr.getFactoryConfig(sysConfig1).isEmpty()); Config sysConfig2 = sysConfig1.withValue("some.prop", ConfigValueFactory.fromAnyRef("test")); Assert.assertTrue(mgr.getFactoryConfig(sysConfig2).isEmpty()); Config sysConfig3 = sysConfig2.withValue(FileBasedJobLockFactoryManager.CONFIG_PREFIX + "." + FileBasedJobLockFactory.LOCK_DIR_CONFIG, ConfigValueFactory.fromAnyRef("/tmp")); Config factoryCfg3 = mgr.getFactoryConfig(sysConfig3); Assert.assertEquals(factoryCfg3.getString(FileBasedJobLockFactory.LOCK_DIR_CONFIG), "/tmp"); } @Test public void testGetJobLockFactory() throws Exception { final Logger log = LoggerFactory.getLogger("FileBasedJobLockFactoryManagerTest.testGetJobLockFactory"); FileBasedJobLockFactoryManager mgr = new FileBasedJobLockFactoryManager(); // Create an instance with default configs Config sysConfig1 = ConfigFactory.empty(); FileBasedJobLockFactory factory1 = mgr.getJobLockFactory(sysConfig1, Optional.of(log)); Assert.assertTrue(factory1.getLockFileDir().toString().startsWith(FileBasedJobLockFactory.DEFAULT_LOCK_DIR_PREFIX)); Assert.assertTrue(factory1.getFs() instanceof LocalFileSystem); Assert.assertTrue(factory1.getFs().exists(factory1.getLockFileDir())); JobSpec js1 = JobSpec.builder("gobblin-test:job1").build(); FileBasedJobLock lock11 = factory1.getJobLock(js1); Assert.assertTrue(lock11.getLockFile().getName().startsWith(FileBasedJobLockFactory.getJobName(js1))); Assert.assertTrue(lock11.tryLock()); lock11.unlock(); // Lock dir should be deleted after close() factory1.close(); Assert.assertFalse(factory1.getFs().exists(factory1.getLockFileDir())); // Create an instance with pre-existing lock dir File lockDir = Files.createTempDir(); Assert.assertTrue(lockDir.exists()); Config sysConfig2 = ConfigFactory.empty() .withValue(FileBasedJobLockFactoryManager.CONFIG_PREFIX + "." + FileBasedJobLockFactory.LOCK_DIR_CONFIG, ConfigValueFactory.fromAnyRef(lockDir.getAbsolutePath())); FileBasedJobLockFactory factory2 = mgr.getJobLockFactory(sysConfig2, Optional.of(log)); Assert.assertEquals(factory2.getLockFileDir().toString(), lockDir.getAbsolutePath()); Assert.assertTrue(factory2.getFs() instanceof LocalFileSystem); Assert.assertTrue(factory2.getFs().exists(factory2.getLockFileDir())); // Lock dir should not be removed on close factory2.close(); Assert.assertTrue(factory2.getFs().exists(factory2.getLockFileDir())); } }