def setUp(self): SeecrTestCase.setUp(self) self._timeNow = 1257161136.0 # 2009-11-02 11:30:00 def time(): self._timeNow += 1.0 return self._timeNow directoryLog = DirectoryLog(self.tempdir) self.queryLog = QueryLog(log=directoryLog, loggedPaths=['/path/sru', '/path/srw']) self.queryLog._time = time
class QueryLogTest(SeecrTestCase): def setUp(self): SeecrTestCase.setUp(self) self._timeNow = 1257161136.0 # 2009-11-02 11:30:00 def time(): self._timeNow += 1.0 return self._timeNow directoryLog = DirectoryLog(self.tempdir) self.queryLog = QueryLog(log=directoryLog, loggedPaths=['/path/sru', '/path/srw']) self.queryLog._time = time def testLogging(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = (line for line in ['1', '2', '3']) self.queryLog.addObserver(observer) result = ''.join( compose( self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value'))) self.assertEqual('123', result) self.assertEqual(['handleRequest'], [m.name for m in observer.calledMethods]) self.assertEqual([ dict(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value') ], [m.kwargs for m in observer.calledMethods]) self.assertTrue(isfile(join(self.tempdir, '2009-11-02-query.log'))) with open(join(self.tempdir, '2009-11-02-query.log')) as fp: self.assertEqual( '2009-11-02T11:25:37Z 127.0.0.1 0.0K 1.000s - /path/sru \n', fp.read()) def testLogCanReturnCallables(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = ( f for f in ['1', lambda: None, '3']) self.queryLog.addObserver(observer) list( compose( self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value'))) with open(join(self.tempdir, '2009-11-02-query.log')) as fp: self.assertEqual(1, len(fp.readlines())) def testIncludedPathsOnly(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = (line for line in ['1', '2', '3']) self.queryLog.addObserver(observer) result = ''.join( compose( self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/not/included', otherArg='value'))) self.assertEqual('123', result) self.assertEqual(0, len(listdir(self.tempdir))) def testLoggedPathsIsStartOfAcceptedPath(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = (line for line in ['1', '2', '3']) self.queryLog.addObserver(observer) ''.join( compose( self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru/extended/path', otherArg='value'))) self.assertEqual(1, len(listdir(self.tempdir))) def testLogQueryParameters(self): class HandleRequestObserver(Observable): def handleRequest(self, **kwargs): self.ctx.queryLogValues['queryArguments'].update({ 'a': 'A', 'b': 'B', 'c': 'C', 'd': ['D', 'DD'] }) yield 'result' self.queryLog.addObserver(HandleRequestObserver()) result = ''.join( compose( self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value'))) self.assertEqual('result', result) with open(join(self.tempdir, '2009-11-02-query.log')) as fp: self.assertEqual( '2009-11-02T11:25:37Z 127.0.0.1 0.0K 1.000s - /path/sru a=A&b=B&c=C&d=D&d=DD\n', fp.read()) def testQueryLogHelperForSru(self): __callstack_var_queryLogValues__ = {'queryArguments': {}} helper = QueryLogHelperForSru() observer = CallTrace('observer') helper.addObserver(observer) def searchRetrieve(**kwargs): yield 'result' observer.methods['searchRetrieve'] = searchRetrieve list( compose( helper.searchRetrieve( query=['query'], sortKeys=[dict(sortBy='field', sortDescending=False)], sruArguments={ 'x-term-drilldown': 'drilldown', 'under_score': 'value', 'sortKeys': 'field,,0', 'query': ['query'] }))) self.assertEqual( { 'query': ['query'], 'x-term-drilldown': 'drilldown', 'under_score': 'value', 'sortKeys': 'field,,0' }, __callstack_var_queryLogValues__['queryArguments']) def testQueryLogHelper(self): __callstack_var_queryLogValues__ = {'queryArguments': {}} helper = QueryLogHelper() observer = CallTrace('observer') helper.addObserver(observer) def handleRequest(**kwargs): yield 'result' observer.methods['handleRequest'] = handleRequest result = list( compose( helper.handleRequest(arguments={ 'key': ['value'], 'key2': ['value1', 'value2'] }, path='path'))) self.assertEqual(['result'], result) self.assertEqual({ 'key': ['value'], 'key2': ['value1', 'value2'] }, __callstack_var_queryLogValues__['queryArguments']) self.assertEqual([{ 'arguments': { 'key': ['value'], 'key2': ['value1', 'value2'] }, 'path': 'path' }], [m.kwargs for m in observer.calledMethods]) def testAllQueryHelpersForSRU(self): index = CallTrace('index') def executeQuery(**kwargs): return Response(total=3201, hits=[]) yield index.methods['executeQuery'] = executeQuery index.ignoredAttributes.extend( ['echoedExtraRequestData', 'extraResponseData', 'all_unknown']) server = be(( Observable(), (self.queryLog, (SruParser(), (QueryLogHelperForSru(), (SruHandler(extraRecordDataNewStyle=True), (QueryLogHelperForExecuteCQL(), (index, )))))), )) ''.join( compose( server.all.handleRequest( path='/path/sru', Client=('11.22.33.44', 8080), arguments={ 'operation': ['searchRetrieve'], 'version': ['1.2'], 'maximumRecords': ['0'], 'query': ['field=value'], }, ))) with open(join(self.tempdir, '2009-11-02-query.log')) as fp: self.assertEqual( '2009-11-02T11:25:37Z 11.22.33.44 0.7K 1.000s 3201hits /path/sru maximumRecords=0&operation=searchRetrieve&query=field%3Dvalue&recordPacking=xml&recordSchema=dc&startRecord=1&version=1.2\n', fp.read())
class QueryLogTest(SeecrTestCase): def setUp(self): SeecrTestCase.setUp(self) self._timeNow = 1257161136.0 # 2009-11-02 11:30:00 def time(): self._timeNow += 1.0 return self._timeNow directoryLog = DirectoryLog(self.tempdir) self.queryLog = QueryLog(log=directoryLog, loggedPaths=['/path/sru', '/path/srw']) self.queryLog._time = time def testLogging(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = (line for line in ['1','2','3']) self.queryLog.addObserver(observer) result = ''.join(compose(self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value'))) self.assertEquals('123', result) self.assertEquals(['handleRequest'], [m.name for m in observer.calledMethods]) self.assertEquals([dict(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value')], [m.kwargs for m in observer.calledMethods]) self.assertTrue(isfile(join(self.tempdir, '2009-11-02-query.log'))) self.assertEquals('2009-11-02T11:25:37Z 127.0.0.1 0.0K 1.000s - /path/sru \n', open(join(self.tempdir, '2009-11-02-query.log')).read()) def testLogCanReturnCallables(self): observer= CallTrace('observer') observer.returnValues['handleRequest'] = (f for f in ['1', lambda: None,'3']) self.queryLog.addObserver(observer) list(compose(self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value'))) self.assertEquals(1, len(open(join(self.tempdir, '2009-11-02-query.log')).readlines())) def testIncludedPathsOnly(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = (line for line in ['1','2','3']) self.queryLog.addObserver(observer) result = ''.join(compose(self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/not/included', otherArg='value'))) self.assertEquals('123', result) self.assertEquals(0, len(listdir(self.tempdir))) def testLoggedPathsIsStartOfAcceptedPath(self): observer = CallTrace('observer') observer.returnValues['handleRequest'] = (line for line in ['1','2','3']) self.queryLog.addObserver(observer) ''.join(compose(self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru/extended/path', otherArg='value'))) self.assertEquals(1, len(listdir(self.tempdir))) def testLogQueryParameters(self): class HandleRequestObserver(Observable): def handleRequest(self, **kwargs): self.ctx.queryLogValues['queryArguments'].update({'a':'A', 'b':'B', 'c':'C', 'd':['D','DD']}) yield 'result' self.queryLog.addObserver(HandleRequestObserver()) result = ''.join(compose(self.queryLog.handleRequest(Client=('127.0.0.1', 47785), path='/path/sru', otherArg='value'))) self.assertEquals('result', result) self.assertEquals('2009-11-02T11:25:37Z 127.0.0.1 0.0K 1.000s - /path/sru a=A&b=B&c=C&d=D&d=DD\n', open(join(self.tempdir, '2009-11-02-query.log')).read()) def testQueryLogHelperForSru(self): __callstack_var_queryLogValues__ = {'queryArguments':{}} helper = QueryLogHelperForSru() observer = CallTrace('observer') helper.addObserver(observer) def searchRetrieve(**kwargs): yield 'result' observer.methods['searchRetrieve'] = searchRetrieve list(compose(helper.searchRetrieve(query=['query'], sortKeys=[dict(sortBy='field', sortDescending=False)], sruArguments={'x-term-drilldown':'drilldown', 'under_score':'value', 'sortKeys':'field,,0', 'query': ['query']}))) self.assertEquals({'query': ['query'], 'x-term-drilldown': 'drilldown', 'under_score': 'value', 'sortKeys':'field,,0'}, __callstack_var_queryLogValues__['queryArguments']) def testQueryLogHelper(self): __callstack_var_queryLogValues__ = {'queryArguments':{}} helper = QueryLogHelper() observer = CallTrace('observer') helper.addObserver(observer) def handleRequest(**kwargs): yield 'result' observer.methods['handleRequest'] = handleRequest result = list(compose(helper.handleRequest(arguments={'key':['value'], 'key2':['value1', 'value2']}, path='path'))) self.assertEquals(['result'], result) self.assertEquals({'key':['value'], 'key2':['value1', 'value2']}, __callstack_var_queryLogValues__['queryArguments']) self.assertEquals([{'arguments': {'key':['value'], 'key2':['value1', 'value2']}, 'path':'path'}], [m.kwargs for m in observer.calledMethods]) def testAllQueryHelpersForSRU(self): index = CallTrace('index') def executeQuery(**kwargs): raise StopIteration(Response(total=3201, hits=[])) yield index.methods['executeQuery'] = executeQuery index.ignoredAttributes.extend(['echoedExtraRequestData', 'extraResponseData', 'all_unknown']) server = be((Observable(), (self.queryLog, (SruParser(), (QueryLogHelperForSru(), (SruHandler(extraRecordDataNewStyle=True), (QueryLogHelperForExecuteCQL(), (index,) ) ) ) ) ), )) ''.join(compose(server.all.handleRequest( path='/path/sru', Client=('11.22.33.44', 8080), arguments={ 'operation': ['searchRetrieve'], 'version': ['1.2'], 'maximumRecords': ['0'], 'query': ['field=value'], }, ))) self.assertEquals('2009-11-02T11:25:37Z 11.22.33.44 0.7K 1.000s 3201hits /path/sru maximumRecords=0&operation=searchRetrieve&query=field%3Dvalue&recordPacking=xml&recordSchema=dc&startRecord=1&version=1.2\n', open(join(self.tempdir, '2009-11-02-query.log')).read())