コード例 #1
0
    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
コード例 #2
0
 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
コード例 #3
0
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())
コード例 #4
0
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())