diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/conf/TestFSSchedulerConfigurationStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/conf/TestFSSchedulerConfigurationStore.java index f5da5acb66b..7f15785046b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/conf/TestFSSchedulerConfigurationStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/conf/TestFSSchedulerConfigurationStore.java @@ -20,7 +20,6 @@ import java.io.File; import java.io.IOException; -import java.util.HashMap; import java.util.Map; import org.apache.commons.io.FileUtils; @@ -31,7 +30,7 @@ import org.apache.hadoop.hdfs.HdfsConfiguration; import org.apache.hadoop.hdfs.MiniDFSCluster; import org.apache.hadoop.yarn.conf.YarnConfiguration; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.conf.YarnConfigurationStore.LogMutation; +import org.apache.hadoop.yarn.server.records.Version; import org.hamcrest.CoreMatchers; import org.junit.After; import org.junit.Before; @@ -39,28 +38,25 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; /** * Tests {@link FSSchedulerConfigurationStore}. */ -public class TestFSSchedulerConfigurationStore { - private static final String TEST_USER = "test"; - private FSSchedulerConfigurationStore configurationStore; - private Configuration conf; +public class TestFSSchedulerConfigurationStore extends + PersistentConfigurationStoreBaseTest { private File testSchedulerConfigurationDir; @Before + @Override public void setUp() throws Exception { - configurationStore = new FSSchedulerConfigurationStore(); + super.setUp(); testSchedulerConfigurationDir = new File( TestFSSchedulerConfigurationStore.class.getResource("").getPath() + FSSchedulerConfigurationStore.class.getSimpleName()); testSchedulerConfigurationDir.mkdirs(); - conf = new Configuration(); conf.set(YarnConfiguration.SCHEDULER_CONFIGURATION_FS_PATH, testSchedulerConfigurationDir.getAbsolutePath()); } @@ -82,53 +78,47 @@ public void tearDown() throws Exception { } @Test - public void confirmMutationWithValid() throws Exception { - conf.setInt( - YarnConfiguration.SCHEDULER_CONFIGURATION_FS_MAX_VERSION, 2); - conf.set("a", "a"); - conf.set("b", "b"); - conf.set("c", "c"); - writeConf(conf); - configurationStore.initialize(conf, conf, null); - Configuration storeConf = configurationStore.retrieve(); - compareConfig(conf, storeConf); - - Configuration expectConfig = new Configuration(conf); - expectConfig.unset("a"); - expectConfig.set("b", "bb"); + public void checkVersion() { + try { + confStore.checkVersion(); + } catch (Exception e) { + fail("checkVersion throw exception"); + } + } - prepareParameterizedLogMutation(configurationStore, true, - "a", null, "b", "bb"); - storeConf = configurationStore.retrieve(); - assertNull(storeConf.get("a")); - assertEquals("bb", storeConf.get("b")); - assertEquals("c", storeConf.get("c")); + @Test + public void testConfigRetrieval() throws Exception { + Configuration schedulerConf = new Configuration(); + schedulerConf.set("a", "a"); + schedulerConf.setLong("long", 1L); + schedulerConf.setBoolean("boolean", true); + writeConf(schedulerConf); - compareConfig(expectConfig, storeConf); + confStore.initialize(conf, conf, null); + Configuration storedConfig = confStore.retrieve(); - prepareParameterizedLogMutation(configurationStore, true, - "a", null, "b", "bbb"); - storeConf = configurationStore.retrieve(); - assertNull(storeConf.get("a")); - assertEquals("bbb", storeConf.get("b")); - assertEquals("c", storeConf.get("c")); + compareConfig(schedulerConf, storedConfig); } @Test - public void confirmMutationWithInvalid() throws Exception { - conf.set("a", "a"); - conf.set("b", "b"); - conf.set("c", "c"); - writeConf(conf); - configurationStore.initialize(conf, conf, null); - Configuration storeConf = configurationStore.retrieve(); - compareConfig(conf, storeConf); - - prepareParameterizedLogMutation(configurationStore, false, - "a", null, "b", "bb"); - storeConf = configurationStore.retrieve(); - - compareConfig(conf, storeConf); + public void testFormatConfiguration() throws Exception { + Configuration persistedSchedConf = new Configuration(); + persistedSchedConf.set("a", "a"); + writeConf(persistedSchedConf); + confStore.initialize(conf, conf, null); + Configuration storedConfig = confStore.retrieve(); + assertEquals("Retrieved config should match the stored one", "a", + storedConfig.get("a")); + confStore.format(); + try { + confStore.retrieve(); + fail("Expected an IOException with message containing \"no capacity " + + "scheduler file in\" to be thrown"); + } catch (IOException e) { + assertThat("Exception message should contain the predefined string.", + e.getMessage(), + CoreMatchers.containsString("no capacity scheduler file in")); + } } @Test @@ -146,18 +136,15 @@ public void testFileSystemClose() throws Exception { fs.mkdirs(path); } - FSSchedulerConfigurationStore configStore = - new FSSchedulerConfigurationStore(); hdfsConfig.set(YarnConfiguration.SCHEDULER_CONFIGURATION_FS_PATH, path.toString()); - configStore.initialize(hdfsConfig, hdfsConfig, null); + confStore.initialize(hdfsConfig, hdfsConfig, null); // Close the FileSystem object and validate fs.close(); try { - prepareParameterizedLogMutation(configStore, true, - "testkey", "testvalue"); + confStore.confirmMutation(prepareLogMutation("key", "val"), true); } catch (IOException e) { if (e.getMessage().contains("Filesystem closed")) { fail("FSSchedulerConfigurationStore failed to handle " + @@ -176,50 +163,13 @@ public void testFileSystemClose() throws Exception { } } - @Test - public void testFormatConfiguration() throws Exception { - Configuration schedulerConf = new Configuration(); - schedulerConf.set("a", "a"); - writeConf(schedulerConf); - configurationStore.initialize(conf, conf, null); - Configuration storedConfig = configurationStore.retrieve(); - assertEquals("a", storedConfig.get("a")); - configurationStore.format(); - try { - configurationStore.retrieve(); - fail("Expected an IOException with message containing \"no capacity " + - "scheduler file in\" to be thrown"); - } catch (IOException e) { - assertThat(e.getMessage(), - CoreMatchers.containsString("no capacity scheduler file in")); - } - } - - @Test - public void retrieve() throws Exception { - Configuration schedulerConf = new Configuration(); - schedulerConf.set("a", "a"); - schedulerConf.setLong("long", 1L); - schedulerConf.setBoolean("boolean", true); - writeConf(schedulerConf); - - configurationStore.initialize(conf, conf, null); - Configuration storedConfig = configurationStore.retrieve(); - - compareConfig(schedulerConf, storedConfig); - } - - @Test - public void checkVersion() { - try { - configurationStore.checkVersion(); - } catch (Exception e) { - fail("checkVersion throw exception"); - } + @Override + public void testMaxLogs() { + // This test should do nothing in this class } private void compareConfig(Configuration schedulerConf, - Configuration storedConfig) { + Configuration storedConfig) { for (Map.Entry entry : schedulerConf) { assertEquals(entry.getKey(), schedulerConf.get(entry.getKey()), storedConfig.get(entry.getKey())); @@ -231,26 +181,13 @@ private void compareConfig(Configuration schedulerConf, } } - private void prepareParameterizedLogMutation( - FSSchedulerConfigurationStore configStore, - boolean validityFlag, String... values) throws Exception { - Map updates = new HashMap<>(); - String key; - String value; - - if (values.length % 2 != 0) { - throw new IllegalArgumentException("The number of parameters should be " + - "even."); - } - - for (int i = 1; i <= values.length; i += 2) { - key = values[i - 1]; - value = values[i]; - updates.put(key, value); - } + @Override + public YarnConfigurationStore createConfStore() { + return new FSSchedulerConfigurationStore(); + } - LogMutation logMutation = new LogMutation(updates, TEST_USER); - configStore.logMutation(logMutation); - configStore.confirmMutation(logMutation, validityFlag); + @Override + Version getVersion() { + return null; } } \ No newline at end of file