[Mulgara-svn] r1851 - in projects/SparqlTester/trunk: dist src/org/duraspace/sparql/test
pag at mulgara.org
pag at mulgara.org
Thu Nov 19 19:57:03 UTC 2009
Author: pag
Date: 2009-11-19 11:57:01 -0800 (Thu, 19 Nov 2009)
New Revision: 1851
Modified:
projects/SparqlTester/trunk/dist/sparqltest.jar
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/DirProcessor.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestExecutor.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestFinder.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/NegativeSyntaxTest.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/PositiveSyntaxTest.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/QueryEvalTest.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestHarness.scala
projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestInstance.scala
Log:
Better reporting of results, and now using a better connection manager that doesn't hang after the first few connections
Modified: projects/SparqlTester/trunk/dist/sparqltest.jar
===================================================================
(Binary files differ)
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/DirProcessor.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/DirProcessor.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/DirProcessor.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -19,6 +19,8 @@
import java.io.File
import java.io.FileFilter
+import scala.collection.mutable.ListBuffer
+
/**
* An object for applying an action to files in a directory, recursing down
* the directories.
@@ -38,13 +40,16 @@
* Apply a function to all files that this processor represents.
* @param fn The function to the apply to each file
*/
- def apply(fn: (File) => Unit) {
+ def apply[T](fn: (File) => T): Seq[T] = {
// process the files in the current directory
val files = dir.listFiles(new FileFilter { def accept(path: File) = filter(path) })
- for (f <- files) fn(f)
+ // use a mutable list buffer because we are iterating over Java arrays
+ val results = new ListBuffer[T]
+ for (f <- files) results += fn(f)
// process each of the subdirectories
val dirs = dir.listFiles(new FileFilter { def accept(path: File) = path.isDirectory })
- for (d <- dirs) new DirProcessor(d, filter).apply(fn)
+ for (d <- dirs) results ++ new DirProcessor(d, filter).apply(fn)
+ results
}
}
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestExecutor.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestExecutor.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestExecutor.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -22,8 +22,15 @@
def this(s: String) = this(new URI(s))
- def execute(m: Manifest) {
+ /**
+ * Run all the tests in a manifest.
+ * @return tuple (Number passed, Number run)
+ */
+ def execute(m: Manifest): (Int, Int) = {
System.out.println("Executing manifest: " + m.file)
- for (t <- m.tests) t.run(endpoint)
+ val testList = m.tests
+ val passed = testList.foldLeft(0)((s, test) => s + (if (test.run(endpoint)) 1 else 0))
+ println("Manifest: " + m.file + ", passed " + passed + "/" + testList.size)
+ (passed, testList.size)
}
}
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestFinder.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestFinder.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/ManifestFinder.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -22,14 +22,13 @@
* This object contains methods to find manifests in a directory tree and run a function on them.
*/
object ManifestFinder {
- def run(dir: File, fn: (Manifest) => Unit) {
- val directory = new DirProcessor(dir, f => f.getName.toLowerCase == "manifest.ttl")
- directory.apply(f => {
- val m = new Manifest(f)
- fn(m)
- })
+ val ManifestFileName = "manifest.ttl"
+
+ def run(dir: File, fn: (Manifest) => (Int, Int)): Seq[(Int, Int)] = {
+ val directory = new DirProcessor(dir, _.getName.toLowerCase == ManifestFileName)
+ directory.apply(f => fn(new Manifest(f)))
}
- def run(file: String, fn: (Manifest) => Unit) { run(new File(file), fn) }
+ def run(file: String, fn: (Manifest) => (Int, Int)): Seq[(Int, Int)] = run(new File(file), fn)
}
\ No newline at end of file
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/NegativeSyntaxTest.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/NegativeSyntaxTest.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/NegativeSyntaxTest.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -23,11 +23,13 @@
class NegativeSyntaxTest (name: String, queryFile: File, approved: Boolean) extends TestInstance(name, queryFile, approved) {
+ private val MinError = 400
+
override def toString = "NegativeSyntaxTest: \"" + name + "\", file=" + queryFile + ", approved=" + approved
def getURL(endpoint: URI) = endpoint.toString + "?query=" + query
// return true if an error code in the response
- def handleResponse(response: HttpResponse) = response.getStatusLine.getStatusCode >= 400
+ def handleResponse(response: HttpResponse) = response.getStatusLine.getStatusCode >= MinError
}
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/PositiveSyntaxTest.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/PositiveSyntaxTest.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/PositiveSyntaxTest.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -29,6 +29,9 @@
*/
class PositiveSyntaxTest (name: String, queryFile: File, approved: Boolean) extends TestInstance(name, queryFile, approved) {
+ private val MinGood = 200
+ private val MaxGood = 300
+
override def toString = "PositiveSyntaxTest: \"" + name + "\", file=" + queryFile + ", approved=" + approved
def getURL(endpoint: URI) = endpoint.toString + "?query=" + query
@@ -36,6 +39,6 @@
// return true if not an error code on the stream
def handleResponse(response: HttpResponse) = {
val code = response.getStatusLine.getStatusCode
- code >= 200 && code < 300
+ code >= MinGood && code < MaxGood
}
}
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/QueryEvalTest.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/QueryEvalTest.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/QueryEvalTest.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -27,6 +27,9 @@
class QueryEvalTest(name: String, queryFile: File, val dataFile: File, val resultFile: File, approved: Boolean)
extends TestInstance(name, queryFile, approved) {
+ private val MinGood = 200
+ private val MaxGood = 300
+
override def toString = "QueryEvalTest: \"" + name + "\", file=" + queryFile + ", approved=" + approved +
", [data=" + dataFileName + ", results=" + resultFile + "]"
@@ -41,7 +44,7 @@
// return true if not an error code on the stream
def handleResponse(response: HttpResponse) = {
val code = response.getStatusLine.getStatusCode
- (code >= 200 && code < 300) && expectedData(response.getEntity.getContent)
+ (code >= MinGood && code < MaxGood) && expectedData(response.getEntity.getContent)
}
// compare the resulting stream to the data in the expected results file
@@ -50,4 +53,5 @@
val expectedResults = new SparqlResult(XML.loadFile(resultFile))
results == expectedResults
}
+
}
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestHarness.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestHarness.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestHarness.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -21,7 +21,7 @@
import org.duraspace.rdf.parser.ParseException
object TestHarness {
- val endpoint = "http://localhost:8080/sparql/"
+ val DefaultEndpoint = "http://localhost:8080/sparql/"
def main(args : Array[String]) : Unit = {
if (args.size == 0) {
@@ -29,9 +29,15 @@
return
}
+ val endpoint = if (args.size == 2) args(1) else DefaultEndpoint
+
val executor = new ManifestExecutor(endpoint)
try {
- ManifestFinder.run(args(0), executor.execute(_))
+ val resultList = ManifestFinder.run(args(0), executor.execute(_))
+ val result = resultList.foldLeft((0, 0)) {
+ (acc, tuple) => (acc._1 + tuple._1, acc._2 + tuple._2)
+ }
+ println("Total: " + result._1 + "/" + result._2)
} catch {
case e: ParseException => System.err.println("Error reading file")
e.printStackTrace()
Modified: projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestInstance.scala
===================================================================
--- projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestInstance.scala 2009-11-19 12:08:01 UTC (rev 1850)
+++ projects/SparqlTester/trunk/src/org/duraspace/sparql/test/TestInstance.scala 2009-11-19 19:57:01 UTC (rev 1851)
@@ -17,6 +17,7 @@
package org.duraspace.sparql.test
import java.io.BufferedReader
+import java.io.InputStream
import java.io.InputStreamReader
import java.io.IOException
import java.io.File
@@ -25,12 +26,24 @@
import java.net.URI
import java.net.URLEncoder
+import org.apache.http.HttpHost
import org.apache.http.HttpResponse
+import org.apache.http.conn.ClientConnectionManager
+import org.apache.http.conn.params.ConnManagerParams
+import org.apache.http.conn.params.ConnPerRouteBean
+import org.apache.http.conn.routing.HttpRoute
+import org.apache.http.conn.scheme.PlainSocketFactory
+import org.apache.http.conn.scheme.Scheme
+import org.apache.http.conn.scheme.SchemeRegistry
+import org.apache.http.conn.ssl.SSLSocketFactory
import org.apache.http.client.ClientProtocolException
-import org.apache.http.impl.client.DefaultHttpClient
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.methods.HttpUriRequest
+import org.apache.http.params.BasicHttpParams
import org.apache.http.params.CoreProtocolPNames
+import org.apache.http.params.CoreConnectionPNames
+import org.apache.http.impl.client.DefaultHttpClient
+import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
import TestInstance._
@@ -38,21 +51,29 @@
def run(endpoint: URI): Boolean = {
print(name + ": ")
- val client = new DefaultHttpClient()
+ val client = getHttpClient
val url = getURL(endpoint)
// println("Accessing: " + url)
val get = new HttpGet(url)
- client.getParams.setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false)
try {
- val result = handleResponse(client.execute(get))
+ val resp = client.execute(get)
+ val result = handleResponse(resp)
+ val entity = resp.getEntity
+ if (entity != null) entity.consumeContent
if (result) println("PASSED") else println("FAILED")
result
} catch {
- case e: ClientProtocolException => throw new Exception("Error in protocol: " + e.getMessage())
- case e: IOException => throw new Exception("Error executing GET: " + e.getMessage())
- case t: Throwable => throw new Exception("Unexpected exception", t)
+ case e: ClientProtocolException => throw new Exception("Error in protocol: " + e.getMessage, e)
+ case e: IOException => {
+ println("\nError executing GET: " + e.getMessage)
+ false
+ }
+ case t: Throwable => {
+ println("\nError in response: " + t.getMessage)
+ false
+ }
}
}
@@ -64,20 +85,56 @@
}
+
object TestInstance {
val UTF8 = "UTF-8"
private val BufferSize = 1024
- def readFile(file: File): String = {
+ def readFile(file: File) = read(new FileReader(file))
+
+ def readStream(content: InputStream) = try {
+ read(new InputStreamReader(content))
+ } finally {
+ content.close
+ }
+
+ def read(r: Reader) = {
val buffer = new Array[Char](BufferSize)
val result = new StringBuilder
- val reader = new FileReader(file)
- var length = reader.read(buffer)
+ var length = r.read(buffer)
while (length >= 0) {
result.append(buffer, 0, length)
- length = reader.read(buffer)
+ length = r.read(buffer)
}
result.toString
}
+
+ def getHttpClient = {
+ val params = new BasicHttpParams
+ params.setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false)
+ params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000)
+ new DefaultHttpClient(getConnectionManager, params)
+ }
+
+ var cm: ClientConnectionManager = null
+
+ def getConnectionManager = {
+ if (cm == null) {
+ val params = new BasicHttpParams()
+ ConnManagerParams.setMaxTotalConnections(params, 200)
+ val connPerRoute = new ConnPerRouteBean(20)
+ val localhost = new HttpHost("locahost", 80)
+ connPerRoute.setMaxForRoute(new HttpRoute(localhost), 50)
+ ConnManagerParams.setMaxConnectionsPerRoute(params, connPerRoute)
+ val schemeRegistry = new SchemeRegistry()
+ schemeRegistry.register(
+ new Scheme("http", PlainSocketFactory.getSocketFactory(), 80))
+ schemeRegistry.register(
+ new Scheme("https", SSLSocketFactory.getSocketFactory(), 443))
+
+ cm = new ThreadSafeClientConnManager(params, schemeRegistry)
+ }
+ cm
+ }
}
\ No newline at end of file
More information about the Mulgara-svn
mailing list