package org.mitre.rhex;
import edu.umd.cs.findbugs.annotations.NonNull;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.mitre.test.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
/**
* <pre>
* 6.3 baseURL/root.xml
*
* 6.3.1 GET
*
* This operation [MUST] return an XML representation of the current root document,
* as defined by the HRF specification.
*
* Implies GET operation on a baseURL that does not exist must return a 404
* not found status code.
*
* Status Code: 200, [404]
* </pre>
*
* @author Jason Mathews, MITRE Corp.
* Date: 2/20/12 10:45 AM
*/
public class BaseUrlRootXmlNotFound extends BaseTest {
@NonNull
public String getId() {
return "6.3.1.2";
}
@Override
public boolean isRequired() {
return false; // implied requirement
}
@NonNull
public String getName() {
return "If baseURL does not exist then GET on baseURL/root.xml MUST return 404 status code";
}
@NonNull
public List<Class<? extends TestUnit>> getDependencyClasses() {
return Collections.emptyList(); // none
}
public void execute() throws TestException {
final Context context = Loader.getInstance().getContext();
String baseURL = context.getString("invalidBaseURL");
// test pre-conditions
if (baseURL == null) {
setStatus(StatusEnumType.SKIPPED, "Failed to specify valid invalidBaseURL property in configuration");
return;
}
if (baseURL.endsWith("/"))
baseURL += "root.xml";
else
baseURL += "/root.xml";
final URI uri;
try {
uri = new URI(baseURL);
} catch (URISyntaxException e) {
setStatus(StatusEnumType.SKIPPED, "Failed to construct valid URI to run test");
log.warn("", e);
return;
}
HttpClient client = context.getHttpClient();
try {
HttpGet req = new HttpGet(uri);
req.setHeader("Accept", MIME_APPLICATION_XML);
if (log.isDebugEnabled()) {
System.out.println("\nGET URL: " + req.getURI());
}
HttpResponse response = context.executeRequest(client, req);
int code = response.getStatusLine().getStatusCode();
if (code != 404) {
dumpResponse(req, response, log.isDebugEnabled());
setStatus(StatusEnumType.FAILED, "Expected 404 HTTP status code but was: " + code);
} else {
setStatus(StatusEnumType.SUCCESS);
}
} catch (IOException e) {
throw new TestException(e);
} finally {
client.getConnectionManager().shutdown();
}
}
}