Adding test for content negotiation
This commit is contained in:
parent
cba46c4f72
commit
86156aaad4
3 changed files with 321 additions and 0 deletions
89
utilities/testContentNegotiation/build.xml
Normal file
89
utilities/testContentNegotiation/build.xml
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<!-- ======================================================================
|
||||
Build script for the Selenium test runner.
|
||||
====================================================================== -->
|
||||
|
||||
<project name="testContentNegotiation" default="describe" basedir=".">
|
||||
|
||||
<property name="source.dir" location="${basedir}/src" />
|
||||
<property name="build.dir" value="${basedir}/.build" />
|
||||
|
||||
<!-- use library from vitro webapps lib -->
|
||||
<property name="lib.dir" location="${basedir}/../../webapp/lib" />
|
||||
|
||||
<path id="compile.classpath">
|
||||
<fileset dir="${lib.dir}" includes="*.jar" />
|
||||
</path>
|
||||
|
||||
<!-- =================================
|
||||
target: describe
|
||||
================================= -->
|
||||
<target name="describe" description="--> Describe the targets (this is the default).">
|
||||
<echo>
|
||||
clean - Delete all artifacts so the next build will be from scratch.
|
||||
compile - Compile the Java source files.
|
||||
</echo>
|
||||
</target>
|
||||
|
||||
<!-- =================================
|
||||
target: clean
|
||||
================================= -->
|
||||
<target name="clean" description="--> Remove any artifacts from previous builds.">
|
||||
<delete dir="${build.dir}" />
|
||||
</target>
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - -
|
||||
target: prepare
|
||||
- - - - - - - - - - - - - - - - - -->
|
||||
<target name="prepare">
|
||||
<mkdir dir="${build.dir}" />
|
||||
</target>
|
||||
|
||||
<!-- =================================
|
||||
target: compile
|
||||
================================= -->
|
||||
<target name="compile" depends="prepare"
|
||||
description="--> Compile the testContentNegotiation util.">
|
||||
|
||||
<path id="compile.classpath">
|
||||
<fileset dir="${lib.dir}" includes="*.jar" />
|
||||
</path>
|
||||
|
||||
<javac srcdir="${source.dir}"
|
||||
destdir="${build.dir}"
|
||||
debug="true"
|
||||
deprecation="true"
|
||||
encoding="UTF8"
|
||||
optimize="true"
|
||||
includeantruntime="false"
|
||||
source="1.6">
|
||||
<classpath refid="compile.classpath" />
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
|
||||
<target name="input-runargs" unless="args"
|
||||
description="prompts for command line arguments if necessary">
|
||||
<input addProperty="args"
|
||||
message="Type the desired command line arguments(url, username, pw):"/>
|
||||
</target>
|
||||
|
||||
<target name="run" depends="compile,input-runargs"
|
||||
description="--> run the TestContentNegotiation utility, requires -Dargs=url user pw">
|
||||
|
||||
<java
|
||||
classname="edu.cornell.mannlib.vitro.testContentNegotiation.TestContentNegotiation"
|
||||
failonerror="true">
|
||||
<classpath>
|
||||
<pathelement location="${build.dir}" />
|
||||
<path refid="compile.classpath" />
|
||||
</classpath>
|
||||
<arg line="${args}" />
|
||||
</java>
|
||||
|
||||
</target>
|
||||
|
||||
</project>
|
1
utilities/testContentNegotiation/readme.md
Normal file
1
utilities/testContentNegotiation/readme.md
Normal file
|
@ -0,0 +1 @@
|
|||
This directory contains a simple java utility to test of content neogation of a running VIVO instance.
|
|
@ -0,0 +1,231 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.testContentNegotiation;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
|
||||
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.impl.client.DefaultHttpClient;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
|
||||
/**
|
||||
* Utility to test content negotiation of some features
|
||||
* of a running vivo instance.
|
||||
*
|
||||
* usage:
|
||||
* java -cp $YOUR_CP edu.cornell.mannlib.vitro.testContentNegotiation VIVOURL email password
|
||||
*
|
||||
* This will return 0 and print "testContentNegotiation: Content negotiation tests passed.\n"
|
||||
* on success.
|
||||
* It will return 1 and print errors to STDOUT on failure.
|
||||
*/
|
||||
public class TestContentNegotiation{
|
||||
|
||||
static CNTest[] tests = {
|
||||
//URL, QUERY, Accept header, pattern for response Content-Type, pattern for body, description
|
||||
new CNTest(constants.servlet, constants.query, "none", ".*", ".*","Test to see if a basic request works")
|
||||
};
|
||||
|
||||
|
||||
public static void main(String[] argv){
|
||||
|
||||
if( argv.length != 3 ){
|
||||
doHelp();
|
||||
System.exit(2);
|
||||
}
|
||||
|
||||
String baseUrl = argv[0];
|
||||
String email = argv[1];
|
||||
String pw = argv[2];
|
||||
|
||||
List<String> errors = new ArrayList<String>();
|
||||
|
||||
for( CNTest test : tests ){
|
||||
String msg = test.doTest( baseUrl, email, pw);
|
||||
if( msg != null )
|
||||
errors.add( msg );
|
||||
}
|
||||
|
||||
if( errors.isEmpty() ){
|
||||
System.out.println("testContentNegotiation: Content negotiation tests passed.\n");
|
||||
System.exit(0);
|
||||
}else{
|
||||
doErrors( errors );
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static void doErrors( List<String> errors){
|
||||
System.out.println("ERROR testContentNegotiation: There were " + errors.size() + " errors.");
|
||||
for( String err : errors){
|
||||
System.out.println( err );
|
||||
}
|
||||
}
|
||||
|
||||
private static void doHelp(){
|
||||
System.out.println(
|
||||
"Utility to test content negotiation of some features \n" +
|
||||
"of a running vivo instance. \n" +
|
||||
"usage: \n" +
|
||||
"java -cp $YOUR_CP edu.cornell.mannlib.vitro.testContentNegotiation VIVOURL email password\n");
|
||||
}
|
||||
|
||||
protected static class CNTest{
|
||||
String request;
|
||||
String acceptHeader;
|
||||
String query;
|
||||
Pattern expectedResponseContentType;
|
||||
Pattern expectedBody;
|
||||
String description;
|
||||
|
||||
public CNTest(String request, String query, String acceptHeader,
|
||||
String expectedResponseContentType, String expectedBody,
|
||||
String description){
|
||||
this.request = request;
|
||||
this.acceptHeader = acceptHeader;
|
||||
this.query = query;
|
||||
this.expectedResponseContentType = Pattern.compile( expectedResponseContentType );
|
||||
this.expectedBody = Pattern.compile( expectedBody );
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a non-null string on failure.
|
||||
* Returns null on success.
|
||||
*/
|
||||
String doTest(String baseUrl, String email, String pw) {
|
||||
HttpClient httpClient = new DefaultHttpClient();
|
||||
HttpPost httpPost = new HttpPost( baseUrl + request );
|
||||
httpPost.addHeader("Accept", acceptHeader);
|
||||
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
|
||||
nvps.add(new BasicNameValuePair("email", "vip"));
|
||||
nvps.add(new BasicNameValuePair("password", "secret"));
|
||||
nvps.add(new BasicNameValuePair("query", query));
|
||||
try {
|
||||
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
|
||||
} catch (UnsupportedEncodingException e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
}
|
||||
|
||||
HttpResponse resp;
|
||||
try {
|
||||
resp = httpClient.execute(httpPost);
|
||||
} catch (Exception e){
|
||||
return "Failed, exception, " + e.getMessage() ;
|
||||
}
|
||||
|
||||
//Check response content type
|
||||
try{
|
||||
Header[] contentType = resp.getHeaders("Content-Type");
|
||||
if( contentType == null || contentType.length == 0 ){
|
||||
return "Failed, Content-Type was empty be expected " + expectedResponseContentType;
|
||||
}
|
||||
|
||||
boolean foundMatch = false;
|
||||
for( Header header : contentType){
|
||||
Matcher m = expectedResponseContentType.matcher( header.getValue() );
|
||||
if( m.matches() ){
|
||||
foundMatch = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !foundMatch ){
|
||||
return "Failed to match expected Content-Type " +
|
||||
expectedResponseContentType.toString() +
|
||||
" to value " + resp.getHeaders("Content-Type") ;
|
||||
}
|
||||
}finally{
|
||||
httpPost.releaseConnection();
|
||||
}
|
||||
|
||||
//TODO: Check body
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected static class constants{
|
||||
|
||||
static String servlet = "/admin/sparqlquery";
|
||||
|
||||
static String query =
|
||||
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
|
||||
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
|
||||
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
|
||||
"PREFIX owl: <http://www.w3.org/2002/07/owl#>\n" +
|
||||
"PREFIX swrl: <http://www.w3.org/2003/11/swrl#>\n" +
|
||||
"PREFIX swrlb: <http://www.w3.org/2003/11/swrlb#>\n" +
|
||||
"PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#>\n" +
|
||||
"PREFIX p.1: <http://purl.obolibrary.org/obo/arg/agent.owl#>\n" +
|
||||
"PREFIX p.2: <http://purl.obolibrary.org/obo/arg/bfo-bridge.owl#>\n" +
|
||||
"PREFIX bibo: <http://purl.org/ontology/bibo/>\n" +
|
||||
"PREFIX c4o: <http://purl.org/spar/c4o/>\n" +
|
||||
"PREFIX p.3: <http://purl.obolibrary.org/obo/arg/clinical.owl#>\n" +
|
||||
"PREFIX p.4: <http://purl.obolibrary.org/obo/arg/contact.owl#>\n" +
|
||||
"PREFIX p.5: <http://purl.obolibrary.org/obo/arg/contact-vcard.owl#>\n" +
|
||||
"PREFIX p.6: <http://purl.obolibrary.org/obo/arg/data-properties.owl#>\n" +
|
||||
"PREFIX p.7: <http://purl.obolibrary.org/obo/arg/date-time.owl#>\n" +
|
||||
"PREFIX p.8: <http://vivoweb.org/ontology/core/dateTimeValuePrecision.owl#>\n" +
|
||||
"PREFIX p.9: <http://vivoweb.org/ontology/core/documentStatus.owl#>\n" +
|
||||
"PREFIX dcelem: <http://purl.org/dc/elements/1.1/>\n" +
|
||||
"PREFIX dcterms: <http://purl.org/dc/terms/>\n" +
|
||||
"PREFIX p.10: <http://purl.obolibrary.org/obo/arg/education.owl#>\n" +
|
||||
"PREFIX p.11: <http://purl.obolibrary.org/obo/arg/event.owl#>\n" +
|
||||
"PREFIX event: <http://purl.org/NET/c4dm/event.owl#>\n" +
|
||||
"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n" +
|
||||
"PREFIX fabio: <http://purl.org/spar/fabio/>\n" +
|
||||
"PREFIX geo: <http://aims.fao.org/aos/geopolitical.owl#>\n" +
|
||||
"PREFIX p.12: <http://purl.obolibrary.org/obo/arg/geo-political.owl#>\n" +
|
||||
"PREFIX p.13: <http://purl.obolibrary.org/obo/arg/grant.owl#>\n" +
|
||||
"PREFIX p.14: <http://purl.obolibrary.org/obo/arg/location.owl#>\n" +
|
||||
"PREFIX p.15: <http://purl.obolibrary.org/obo/arg/object-properties.owl#>\n" +
|
||||
"PREFIX p.16: <http://purl.obolibrary.org/obo/arg/other.owl#>\n" +
|
||||
"PREFIX p.17: <http://purl.obolibrary.org/obo/arg/outreach.owl#>\n" +
|
||||
"PREFIX p.18: <http://purl.obolibrary.org/obo/arg/process.owl#>\n" +
|
||||
"PREFIX pvs: <http://vivoweb.org/ontology/provenance-support#>\n" +
|
||||
"PREFIX p.19: <http://purl.obolibrary.org/obo/arg/publication.owl#>\n" +
|
||||
"PREFIX p.20: <http://purl.obolibrary.org/obo/arg/relationship.owl#>\n" +
|
||||
"PREFIX p.21: <http://purl.obolibrary.org/obo/arg/research.owl#>\n" +
|
||||
"PREFIX p.22: <http://purl.obolibrary.org/obo/arg/research-resource.owl#>\n" +
|
||||
"PREFIX p.23: <http://purl.obolibrary.org/obo/arg/research-resource-iao.owl#>\n" +
|
||||
"PREFIX ero: <http://purl.obolibrary.org/obo/>\n" +
|
||||
"PREFIX p.24: <http://purl.obolibrary.org/obo/arg/role.owl#>\n" +
|
||||
"PREFIX scires: <http://vivoweb.org/ontology/scientific-research#>\n" +
|
||||
"PREFIX p.25: <http://purl.obolibrary.org/obo/arg/service.owl#>\n" +
|
||||
"PREFIX skos: <http://www.w3.org/2004/02/skos/core#>\n" +
|
||||
"PREFIX p.26: <http://purl.obolibrary.org/obo/arg/skos-vivo.owl#>\n" +
|
||||
"PREFIX p.27: <http://www.w3.org/2008/05/skos-xl#>\n" +
|
||||
"PREFIX p.28: <http://purl.obolibrary.org/obo/arg/teaching.owl#>\n" +
|
||||
"PREFIX vitro-public: <http://vitro.mannlib.cornell.edu/ns/vitro/public#>\n" +
|
||||
"PREFIX p.29: <http://purl.obolibrary.org/obo/arg/app-views/vivo/vivo-app.owl#>\n" +
|
||||
"PREFIX vivo: <http://vivoweb.org/ontology/core#>\n" +
|
||||
"\n" +
|
||||
"#\n" +
|
||||
"# This example query gets 20 geographic locations\n" +
|
||||
"# and (if available) their labels\n" +
|
||||
"#\n" +
|
||||
"SELECT ?geoLocation ?label\n" +
|
||||
"WHERE\n" +
|
||||
"{\n" +
|
||||
" ?geoLocation rdf:type vivo:GeographicLocation\n" +
|
||||
" OPTIONAL { ?geoLocation rdfs:label ?label } \n" +
|
||||
"}\n" +
|
||||
"LIMIT 20";
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue