def testExecuteQueryWithtriplestoreHostPortFromObserver(self): self.request = TriplestoreRequest() self.request.addObserver(self.observer) self.observer.returnValues['triplestoreServer'] = ('this.server.nl', 1234) self.responseData = RESULT_JSON consume(self.request.executeQuery("select ?x where {}")) self.assertEquals(['triplestoreServer', 'httprequest', 'handleQueryTimes'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[1].kwargs request = httprequestKwargs.pop('request') self.assertEquals({ 'headers': None, 'method': 'GET', 'host': 'this.server.nl', 'port': 1234, }, httprequestKwargs) parsed = urlparse(request) self.assertEquals('/query', parsed.path) self.assertEquals({'query': ['''select ?x where {}''']}, parse_qs(parsed.query)) handleQueryTimesKwargs = self.observer.calledMethods[2].kwargs self.assertEquals(['index', 'queryTime'], handleQueryTimesKwargs.keys()) self.assertEquals(Decimal('0.042'), handleQueryTimesKwargs['index']) qt = float(handleQueryTimesKwargs['queryTime']) self.assertTrue(0.0 <= qt <0.1, qt)
def setUp(self): super(TriplestoreRequestTest, self).setUp() self.responseStatus = '200' self.responseData = 'SOME RESPONSE' def httprequest(**kwargs): raise StopIteration(''.join([ _RESULT_HEADER % self.responseStatus, CRLF*2, self.responseData, ])) yield self.observer = CallTrace(methods={'httprequest':httprequest}) self.request = TriplestoreRequest(host='example.org', port=9999) self.request.addObserver(self.observer)
def testUpdateWithtriplestoreHostPortFromObserver(self): self.request = TriplestoreRequest() self.request.addObserver(self.observer) self.observer.returnValues['triplestoreServer'] = ('this.server.nl', 1234) consume(self.request.addTriple("uri:subject", "uri:predicate", "value")) self.assertEquals(['triplestoreServer', 'httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[1].kwargs self.assertEquals({ 'body': 'uri:subject|uri:predicate|value', 'headers': {}, 'method': 'POST', 'host': 'this.server.nl', 'port': 1234, 'request': '/addTriple', }, httprequestKwargs)
class TriplestoreRequestTest(SeecrTestCase): def setUp(self): super(TriplestoreRequestTest, self).setUp() self.responseStatus = '200' self.responseData = 'SOME RESPONSE' def httprequest(**kwargs): raise StopIteration(''.join([ _RESULT_HEADER % self.responseStatus, CRLF*2, self.responseData, ])) yield self.observer = CallTrace(methods={'httprequest':httprequest}) self.request = TriplestoreRequest(host='example.org', port=9999) self.request.addObserver(self.observer) def testAdd(self): consume(self.request.add(identifier="id", partname="ignored", data=RDFDATA)) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({ 'body': RDFDATA, 'headers': { 'Content-Type': 'text/xml' }, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/update?identifier=id', }, httprequestKwargs) def testAddIOError(self): self.responseStatus = '500' self.responseData = 'Error Description' self.assertRaises(IOError, lambda: consume(self.request.add(identifier="id", partname="ignored", data=RDFDATA))) def testAddAsNTRIPLES(self): consume(self.request.add(identifier="id", partname="ignored", data=RDFDATA, format=NTRIPLES)) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({'Content-Type': 'text/plain'}, httprequestKwargs['headers']) def testAddTriple(self): consume(self.request.addTriple(subject="uri:subj", predicate="uri:pred", object="uri:obj")) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({ 'body': 'uri:subj|uri:pred|uri:obj', 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/addTriple', }, httprequestKwargs) def testRemoveTriple(self): consume(self.request.removeTriple(subject="uri:subj", predicate="uri:pred", object="uri:obj")) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({ 'body': 'uri:subj|uri:pred|uri:obj', 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/removeTriple', }, httprequestKwargs) def testDelete(self): consume(self.request.delete(identifier="id")) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({ 'body': None, 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/delete?identifier=id', }, httprequestKwargs) def testDeleteError(self): self.responseStatus = '500' self.assertRaises(IOError, lambda: consume(self.request.delete(identifier="id"))) def testValidate(self): self.responseData = 'Ok' consume(self.request.validate(data=RDFDATA)) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({ 'body': RDFDATA, 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/validate', }, httprequestKwargs) def testValidateError(self): self.responseData = 'Invalid\nError Description' self.assertRaises(InvalidRdfXmlException, lambda: consume(self.request.validate(data=RDFDATA))) def testCommit(self): consume(self.request.commit()) self.assertEqual(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[-1].kwargs self.assertEquals({ 'body': None, 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/commit', }, httprequestKwargs) def testGetStatementsSparQL(self): self.assertEquals("SELECT DISTINCT ?s ?p ?o WHERE { ?s ?p ?o }", ''.join(self.request._getStatementsSparQL(subject=None, predicate=None, object=None))) self.assertEquals("SELECT DISTINCT ?p ?o WHERE { <http://cq2.org/person/0001> ?p ?o }", ''.join(self.request._getStatementsSparQL(subject="http://cq2.org/person/0001"))) self.assertEquals("SELECT DISTINCT ?o WHERE { <http://cq2.org/person/0001> <http://xmlns.com/foaf/0.1/name> ?o }", ''.join(self.request._getStatementsSparQL(subject="http://cq2.org/person/0001", predicate="http://xmlns.com/foaf/0.1/name"))) self.assertEquals("SELECT DISTINCT * WHERE { <http://cq2.org/person/0001> <http://xmlns.com/foaf/0.1/name> <uri:obj> }", ''.join(self.request._getStatementsSparQL(subject="http://cq2.org/person/0001", predicate="http://xmlns.com/foaf/0.1/name", object="uri:obj"))) self.assertEquals("SELECT DISTINCT * WHERE { <http://cq2.org/person/0001> <http://xmlns.com/foaf/0.1/name> \"object\" }", ''.join(self.request._getStatementsSparQL(subject="http://cq2.org/person/0001", predicate="http://xmlns.com/foaf/0.1/name", object="object"))) def testExecuteQuery(self): self.responseData = RESULT_JSON result = retval(self.request.executeQuery('SPARQL')) self.assertEquals(PARSED_RESULT_JSON, result) self.assertEquals(['httprequest', 'handleQueryTimes'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[0].kwargs self.assertEquals({ 'headers': None, 'method': 'GET', 'host': 'example.org', 'port': 9999, 'request': '/query?query=SPARQL', }, httprequestKwargs) def testDontParseIfNotJSON(self): SPARQL_XML = """<sparql xmlns='http://www.w3.org/2005/sparql-results#'> <head> <variable name='x'/> </head> <results> <result> <binding name='x'> <bnode>node1</bnode> </binding> </result> </results> </sparql>""" self.responseData = SPARQL_XML result = retval(self.request.executeQuery('SPARQL', queryResultFormat="application/sparql-results+xml")) self.assertEquals(SPARQL_XML, result) def testGetStatements(self): self.responseData = RESULT_JSON result = retval(self.request.getStatements(subject='uri:subject')) self.assertEquals(RESULT_SPO, list(result)) self.assertEquals(['httprequest', 'handleQueryTimes'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[0].kwargs request = httprequestKwargs.pop('request') self.assertEquals({ 'headers': None, 'method': 'GET', 'host': 'example.org', 'port': 9999, }, httprequestKwargs) parsed = urlparse(request) self.assertEquals('/query', parsed.path) self.assertEquals({'query': ['''SELECT DISTINCT ?p ?o WHERE { <uri:subject> ?p ?o }''']}, parse_qs(parsed.query)) def testGetStatementsGuards(self): self.assertRaises(ValueError, lambda: consume(self.request.getStatements(subject='literal'))) self.assertRaises(ValueError, lambda: consume(self.request.getStatements(predicate='literal'))) def testExport(self): consume(self.request.export(identifier="id")) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[0].kwargs self.assertEquals({ 'body': None, 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/export?identifier=id', }, httprequestKwargs) def testImport(self): trigData = """@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . <uri:aContext> { <uri:aSubject> <uri:aPredicate> "a literal value" . }""" consume(self.request.importTrig(data=trigData)) self.assertEquals(['httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[0].kwargs self.assertEquals({ 'body': trigData, 'headers': {}, 'method': 'POST', 'host': 'example.org', 'port': 9999, 'request': '/import', }, httprequestKwargs) def testExecuteQueryWithtriplestoreHostPortFromObserver(self): self.request = TriplestoreRequest() self.request.addObserver(self.observer) self.observer.returnValues['triplestoreServer'] = ('this.server.nl', 1234) self.responseData = RESULT_JSON consume(self.request.executeQuery("select ?x where {}")) self.assertEquals(['triplestoreServer', 'httprequest', 'handleQueryTimes'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[1].kwargs request = httprequestKwargs.pop('request') self.assertEquals({ 'headers': None, 'method': 'GET', 'host': 'this.server.nl', 'port': 1234, }, httprequestKwargs) parsed = urlparse(request) self.assertEquals('/query', parsed.path) self.assertEquals({'query': ['''select ?x where {}''']}, parse_qs(parsed.query)) handleQueryTimesKwargs = self.observer.calledMethods[2].kwargs self.assertEquals(['index', 'queryTime'], handleQueryTimesKwargs.keys()) self.assertEquals(Decimal('0.042'), handleQueryTimesKwargs['index']) qt = float(handleQueryTimesKwargs['queryTime']) self.assertTrue(0.0 <= qt <0.1, qt) def testUpdateWithtriplestoreHostPortFromObserver(self): self.request = TriplestoreRequest() self.request.addObserver(self.observer) self.observer.returnValues['triplestoreServer'] = ('this.server.nl', 1234) consume(self.request.addTriple("uri:subject", "uri:predicate", "value")) self.assertEquals(['triplestoreServer', 'httprequest'], self.observer.calledMethodNames()) httprequestKwargs = self.observer.calledMethods[1].kwargs self.assertEquals({ 'body': 'uri:subject|uri:predicate|value', 'headers': {}, 'method': 'POST', 'host': 'this.server.nl', 'port': 1234, 'request': '/addTriple', }, httprequestKwargs) def testErrorInHttpGet(self): self.observer.exceptions['httprequest'] = ValueError('error') self.assertRaises(ValueError, lambda: consume(self.request.executeQuery("select ?x where {}")))