/** * Test {@link ResourceUsageMatcher}. */ @Test public void testResourceUsageMatcher() throws Exception { ResourceUsageMatcher matcher = new ResourceUsageMatcher(); Configuration conf = new Configuration(); conf.setClass(ResourceUsageMatcher.RESOURCE_USAGE_EMULATION_PLUGINS, TestResourceUsageEmulatorPlugin.class, ResourceUsageEmulatorPlugin.class); long currentTime = System.currentTimeMillis(); matcher.configure(conf, null, null, null); matcher.matchResourceUsage(); String id = TestResourceUsageEmulatorPlugin.DEFAULT_IDENTIFIER; long result = TestResourceUsageEmulatorPlugin.testInitialization(id, conf); assertTrue("Resource usage matcher failed to initialize the configured" + " plugin", result > currentTime); result = TestResourceUsageEmulatorPlugin.testEmulation(id, conf); assertTrue("Resource usage matcher failed to load and emulate the" + " configured plugin", result > currentTime); // test plugin order to first emulate cpu and then others conf.setStrings(ResourceUsageMatcher.RESOURCE_USAGE_EMULATION_PLUGINS, TestCpu.class.getName() + "," + TestOthers.class.getName()); matcher.configure(conf, null, null, null); // test the initialization order long time1 = TestResourceUsageEmulatorPlugin.testInitialization(TestCpu.ID, conf); long time2 = TestResourceUsageEmulatorPlugin.testInitialization(TestOthers.ID, conf); assertTrue("Resource usage matcher failed to initialize the configured" + " plugins in order", time1 < time2); matcher.matchResourceUsage(); // Note that the cpu usage emulator plugin is configured 1st and then the // others plugin. time1 = TestResourceUsageEmulatorPlugin.testInitialization(TestCpu.ID, conf); time2 = TestResourceUsageEmulatorPlugin.testInitialization(TestOthers.ID, conf); assertTrue("Resource usage matcher failed to load the configured plugins", time1 < time2); }
/** * Test {@link LoadJob.ResourceUsageMatcherRunner}. */ @Test @SuppressWarnings("unchecked") public void testResourceUsageMatcherRunner() throws Exception { Configuration conf = new Configuration(); FakeProgressive progress = new FakeProgressive(); // set the resource calculator plugin conf.setClass(TTConfig.TT_RESOURCE_CALCULATOR_PLUGIN, DummyResourceCalculatorPlugin.class, ResourceCalculatorPlugin.class); // set the resources // set the resource implementation class conf.setClass(ResourceUsageMatcher.RESOURCE_USAGE_EMULATION_PLUGINS, TestResourceUsageEmulatorPlugin.class, ResourceUsageEmulatorPlugin.class); long currentTime = System.currentTimeMillis(); // initialize the matcher class TaskAttemptID id = new TaskAttemptID("test", 1, TaskType.MAP, 1, 1); StatusReporter reporter = new DummyReporter(progress); TaskInputOutputContext context = new MapContextImpl(conf, id, null, null, null, reporter, null); FakeResourceUsageMatcherRunner matcher = new FakeResourceUsageMatcherRunner(context, null); // check if the matcher initialized the plugin String identifier = TestResourceUsageEmulatorPlugin.DEFAULT_IDENTIFIER; long initTime = TestResourceUsageEmulatorPlugin.testInitialization(identifier, conf); assertTrue("ResourceUsageMatcherRunner failed to initialize the" + " configured plugin", initTime > currentTime); // check the progress assertEquals("Progress mismatch in ResourceUsageMatcherRunner", 0, progress.getProgress(), 0D); // call match() and check progress progress.setProgress(0.01f); currentTime = System.currentTimeMillis(); matcher.test(); long emulateTime = TestResourceUsageEmulatorPlugin.testEmulation(identifier, conf); assertTrue("ProgressBasedResourceUsageMatcher failed to load and emulate" + " the configured plugin", emulateTime > currentTime); }