/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.mapred;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.hadoop.examples.SleepJob;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.ToolRunner;
/**
* System test methods for the fair scheduler.
*/
public abstract class FairSchedulerSystemTestBase {
protected void runSleepJob(JobConf conf, int sleepTimeMillis) throws Exception {
String[] args = { "-m", "1", "-r", "1", "-mt", "" + sleepTimeMillis,
"-rt", "" + sleepTimeMillis };
assertEquals(0, ToolRunner.run(conf, new SleepJob(), args));
}
/**
* Check the fair scheduler servlet for good status code and smoke test
* for contents.
*/
protected void checkServlet(boolean advanced, boolean poolNameIsGroupName,
int jobTrackerInfoPort) throws Exception {
String jtURL = "http://localhost:" + jobTrackerInfoPort;
URL url = new URL(jtURL + "/scheduler" +
(advanced ? "?advanced" : ""));
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
assertEquals(200, connection.getResponseCode());
// Just to be sure, slurp the content and make sure it looks like the scheduler
String contents = slurpContents(connection);
assertTrue("Bad contents for fair scheduler servlet: " + contents,
contents.contains("Fair Scheduler Administration"));
if (poolNameIsGroupName) {
String userGroups[] = UserGroupInformation.getCurrentUser().getGroupNames();
String primaryGroup = ">" + userGroups[0] + "<";
assertTrue("Pool name not group name, expected " + userGroups[0] +
" but contents was:\n" + contents,
contents.contains(primaryGroup));
}
}
protected void checkTaskGraphServlet(JobID job, int jobTrackerInfoPort)
throws Exception {
String jtURL = "http://localhost:" + jobTrackerInfoPort;
URL url = new URL(jtURL + "/taskgraph?jobid=" + job.toString() + "&type=map");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
assertEquals(200, connection.getResponseCode());
// Just to be sure, slurp the content and make sure it looks like a graph
String contents = slurpContents(connection);
if (contents.trim().length() > 0) {
assertTrue("Bad contents for job " + job + ":\n" + contents,
contents.contains("</svg>"));
}
}
protected String slurpContents(HttpURLConnection connection) throws Exception {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
return sb.toString();
}
}