CgroupsLCEResourcesHandler implements LCEResourcesHandler { @VisibleForTesting String findControllerInMtab(String controller, Map<String, Set<String>> entries) { for (Entry<String, Set<String>> e : entries.entrySet()) { if (e.getValue().contains(controller)) { if (new File(e.getKey()).canRead()) { return e.getKey(); } else { LOG.warn(String.format( "Skipping inaccessible cgroup mount point %s", e.getKey())); } } } return null; } CgroupsLCEResourcesHandler(); @Override void setConf(Configuration conf); @Override Configuration getConf(); void init(LinuxContainerExecutor lce); void preExecute(ContainerId containerId, Resource containerResource); void postExecute(ContainerId containerId); String getResourcesOption(ContainerId containerId);  }
@Test public void testSelectCgroup() { File cpu = new File(cgroupDir, "cpu"); File cpuNoExist = new File(cgroupDir, "cpuNoExist"); File memory = new File(cgroupDir, "memory"); try { CgroupsLCEResourcesHandler handler = new CgroupsLCEResourcesHandler(); Map<String, Set<String>> cgroups = new LinkedHashMap<>(); Assert.assertTrue("temp dir should be created", cpu.mkdirs()); Assert.assertTrue("temp dir should be created", memory.mkdirs()); Assert.assertFalse("temp dir should not be created", cpuNoExist.exists()); cgroups.put( memory.getAbsolutePath(), Collections.singleton("memory")); cgroups.put( cpuNoExist.getAbsolutePath(), Collections.singleton("cpu")); cgroups.put(cpu.getAbsolutePath(), Collections.singleton("cpu")); String selectedCPU = handler.findControllerInMtab("cpu", cgroups); Assert.assertEquals("Wrong CPU mount point selected", cpu.getAbsolutePath(), selectedCPU); } finally { FileUtils.deleteQuietly(cpu); FileUtils.deleteQuietly(memory); } }