def testAddDomain(self):
        header, body = parseResponse(
            asBytes(
                self.dna.all.handleRequest(
                    user=CallTrace(returnValues=dict(isAdmin=False)),
                    path="/actions/addDomain",
                    Body=bytes(urlencode(dict(identifier="aap")),
                               encoding="utf-8"),
                    Method='Post')))
        self.assertEqual(0, len(self.observable.calledMethods))
        self.assertEqual("200", header['StatusCode'])
        self.assertEqual("application/json", header['Headers']['Content-Type'])
        response = JsonDict.loads(body)
        self.assertFalse(response['success'])
        self.assertEqual("Not allowed", response['message'])

        header, body = parseResponse(
            asBytes(
                self.dna.all.handleRequest(
                    user=CallTrace(returnValues=dict(isAdmin=True)),
                    path="/actions/addDomain",
                    Body=bytes(urlencode(dict(identifier="aap")),
                               encoding="utf-8"),
                    Method='Post')))
        self.assertEqual("200", header['StatusCode'])
        self.assertEqual("application/json", header['Headers']['Content-Type'])
        response = JsonDict.loads(body)
        self.assertTrue(response['success'])
        self.assertEqual(1, len(self.observable.calledMethods))
        self.assertEqual("addDomain", self.observable.calledMethods[0].name)
        self.assertEqual(dict(identifier='aap'),
                         self.observable.calledMethods[0].kwargs)
Esempio n. 2
0
    def testETag(self):
        fm = StaticFileMapping(mapping={"/x": join(self.tempdir, "x")})

        headers, body = parseResponse(
            asBytes(fm.handleRequest(path="/x", Headers={})))
        self.assertTrue("Etag" in headers['Headers'], headers)
        etag = headers['Headers']['Etag']
        headers, body = parseResponse(
            asBytes(fm.handleRequest(path="/x", Headers={'etag': etag})))
        self.assertEqual('304', headers['StatusCode'])
 def testAddClosingHours(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/actions/addRepositoryClosingHours',
                 Body=bUrlencode(dict(repositoryId='repo-id',
                                      domainId='domain-id',
                                      week="*",
                                      day="1",
                                      startHour="10",
                                      endHour="14"),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=True), JsonDict.loads(body))
     self.assertEqual(1, len(self.observable.calledMethods))
     self.assertEqual('addClosingHours',
                      self.observable.calledMethods[0].name)
     self.assertEqual(
         {
             'day': '1',
             'domainId': 'domain-id',
             'endHour': '14',
             'identifier': 'repo-id',
             'startHour': '10',
             'week': '*'
         }, self.observable.calledMethods[0].kwargs)
 def testUpdateRepositoryGroup(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/somewhere/updateRepositoryGroup',
                 Body=bUrlencode(dict(
                     identifier='group',
                     domainId='domain',
                     nl_name="De nieuwe naam",
                     en_name="The old name",
                 ),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=True), JsonDict.loads(body))
     self.assertEqual(1, len(self.observable.calledMethods))
     self.assertEqual('updateRepositoryGroup',
                      self.observable.calledMethods[0].name)
     self.assertEqual(
         {
             'identifier': 'group',
             'domainId': 'domain',
             'name': {
                 'nl': 'De nieuwe naam',
                 'en': 'The old name'
             }
         }, self.observable.calledMethods[0].kwargs)
 def testIndex(self):
     sf = StaticFiles(libdir=self.tempdir,
                      path='/path',
                      allowDirectoryListing=True)
     headers, body = parseResponse(asString(
         sf.handleRequest(path='/path/')))
     self.assertTrue('<a href="data.txt"' in body, body)
Esempio n. 6
0
 def processTemplate(self, template):
     open(self.tempdir + '/afile.sf',
          'w').write('def main(tag, **kwargs):\n' + template)
     d = DynamicHtml([self.tempdir], reactor=CallTrace('Reactor'))
     header, body = parseResponse(asString(d.handleRequest(path='/afile')))
     self.assertEqual('200', header['StatusCode'], body)
     return body
Esempio n. 7
0
 def _request(self, from_=None, path=None, xcount=None, validate=True, **arguments):
     httpMethod = getattr(self, 'httpMethod', 'GET')
     if from_:
         arguments['from'] = from_
     if xcount:
         arguments['x-count'] = xcount
     RequestURI = 'http://example.org/oai'
     queryString = urlencode(arguments, doseq=True)
     if httpMethod == 'GET':
         RequestURI += '?' + queryString
         Body = None
     else:
         Body = bytes(queryString, encoding="utf-8")
         arguments = {}
     header, body = parseResponse(asBytes(compose(self.root.all.handleRequest(
             RequestURI=RequestURI,
             Headers={},
             Body=Body,
             Client=('127.0.0.1', 1324),
             Method=httpMethod,
             port=9000,
             arguments=arguments,
             path='/oai' if path is None else path,
         ))))
     parsedBody = XML(body)
     if validate:
         assertValidOai(parsedBody)
     return header, parsedBody
Esempio n. 8
0
    def testEtagUpdated(self):
        reactor = Reactor()

        fm = StaticFileMapping(mapping={"/x": join(self.tempdir, "x")},
                               reactor=reactor)
        headers, body = parseResponse(
            asBytes(fm.handleRequest(path="/x", Headers={})))
        self.assertTrue("Etag" in headers['Headers'], headers)
        etag = headers['Headers']['Etag']
        with open(join(self.tempdir, "x"), "w") as fp:
            fp.write("x" * 200)
        reactor.step()
        headers, body = parseResponse(
            asBytes(fm.handleRequest(path="/x", Headers={})))
        self.assertTrue("Etag" in headers['Headers'], headers)
        self.assertNotEqual(headers['Headers']['Etag'], etag)
Esempio n. 9
0
    def testGet(self):
        fm = StaticFileMapping(mapping={"/x": join(self.tempdir, "x")})

        headers, body = parseResponse(
            asBytes(fm.handleRequest(path="/x", Headers={})))
        self.assertEqual('200', headers['StatusCode'])
        self.assertEqual(100 * b"x", body)
    def testUpdateRepositoryFieldDefinition(self):
        header, body = parseResponse(
            asBytes(
                self.dna.all.handleRequest(
                    user=CallTrace(returnValues=dict(isAdmin=True)),
                    Method='POST',
                    path='/actions/updateRepositoryFieldDefinitions',
                    Body=bUrlencode(dict(
                        identifier='repo-id',
                        domainId='domain-id',
                        extra_name="Herman in de zon op een terras",
                        extra_no_such_field="Bestaat niet"),
                                    doseq=True))))
        self.assertEqual('200', header['StatusCode'])
        self.assertEqual(dict(success=True), JsonDict.loads(body))
        self.assertEqual(1, len(self.observable.calledMethods))
        self.assertEqual('updateRepositoryFieldDefinitions',
                         self.observable.calledMethods[0].name)

        self.assertEqual(
            {
                'identifier': 'repo-id',
                'domainId': 'domain-id',
                'extra_no_such_field': 'Bestaat niet',
                'extra_name': "Herman in de zon op een terras"
            }, self.observable.calledMethods[0].kwargs)
 def testUpdateRepositoryActionForm_Action(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/actions/updateRepositoryActionAttributes',
                 Body=bUrlencode(dict(
                     identifier='repo-id',
                     domainId='domain-id',
                     action="-",
                 ),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=True), JsonDict.loads(body))
     self.assertEqual(1, len(self.observable.calledMethods))
     self.assertEqual('updateRepositoryAttributes',
                      self.observable.calledMethods[0].name)
     self.assertEqual(
         {
             'complete': False,
             'continuous': None,
             'domainId': 'domain-id',
             'identifier': 'repo-id',
             'maximumIgnore': 0,
             'action': None,
             'use': False
         }, self.observable.calledMethods[0].kwargs)
    def testRetrieveCookie(self):
        sessions = []

        class MyObserver(Observable):
            def handleRequest(self, *args, **kwargs):
                session = self.ctx.session
                sessions.append(session)
                yield utils.okHtml + '<html/>'

        self.handler.addObserver(MyObserver())
        headers, _ = parseResponse(
            asBytes(
                self.handler.handleRequest(RequestURI='/path',
                                           Client=('127.0.0.1', 12345),
                                           Headers={})))
        headers = headers['Headers']
        self.assertTrue('Set-Cookie' in headers, headers)
        cookie = findCookies(headers, self.cookiestore.cookieName(),
                             'Set-Cookie')[0]
        consume(
            self.handler.handleRequest(RequestURI='/path',
                                       Client=('127.0.0.1', 12345),
                                       Headers={
                                           'Cookie':
                                           '{0}={1}'.format(
                                               self.cookiestore.cookieName(),
                                               cookie)
                                       }))
        self.assertEqual(sessions[0], sessions[1])
        self.assertEqual(id(sessions[0]), id(sessions[1]))
Esempio n. 13
0
def processTemplate(self, template):
    # print '>>>', template
    open(self.tempdir + '/afile.sf', 'w').write(template)
    d = DynamicHtml([self.tempdir], reactor=CallTrace('Reactor'))
    header, body = parseResponse(asString(d.handleRequest(path='/afile')))
    if header['StatusCode'] != '200':
        print body
    return body
Esempio n. 14
0
def processTemplate(self, template):
    # print '>>>', template
    open(self.tempdir+'/afile.sf', 'w').write(template)
    d = DynamicHtml([self.tempdir], reactor=CallTrace('Reactor'))
    header, body = parseResponse(asString(d.handleRequest(path='/afile')))
    if header['StatusCode'] != '200':
        print body
    return body
Esempio n. 15
0
 def _httppost(self, **kwargs):
     if self._synchronous:
         req = Request("http://%(host)s:%(port)s%(request)s" % kwargs,
                       kwargs['body'])
         req.add_header('User-Agent', kwargs['headers']['User-Agent'])
         response = urlopen(req)
         return [dict(StatusCode=str(response.getcode())), response.read()]
     response = yield httppost(**kwargs)
     header, body = parseResponse(response)
     return [header, body]
Esempio n. 16
0
    def testPrefixStaticFiles(self):
        fullLibDir = join(self.tempdir, 'library-3.4.5')
        makedirs(fullLibDir)
        with open(join(fullLibDir, 'data.txt'), 'w') as f:
            f.write('DATA')
        prefixDir = join(self.tempdir, 'librar*')

        sf = StaticFiles(libdir=prefixDir, path='/jquery')

        headers, body = parseResponse(asBytes(sf.handleRequest(path='/jquery/data.txt')))
        self.assertEqual('200', headers['StatusCode'])
        self.assertEqual('text/plain', headers['Headers']['Content-Type'])
        self.assertEqual(b'DATA', body)
Esempio n. 17
0
def parseHeaderAndBody(h, b=None, parseBody=True):
    if b is None:
        h, b = h
    header, body = parseResponse(h + CRLF * 2 + b)
    if body and parseBody and 'Content-Type' in header['Headers']:
        contentType = header['Headers']['Content-Type']
        if 'xml' in contentType:
            return header, XML(body)
        if 'json' in contentType:
            try:
                return header, JsonDict.loads(body) if body[0] == '{' else JsonList.loads(body)
            except JSONDecodeError:
                return header, 'JSONDecodeError in: ' + body
    return header, body
 def testUpdateFieldDefinition_error(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/actions/updateFieldDefinition',
                 Body=bUrlencode(dict(
                     domainId='domain-id',
                     fieldDefinition='{"is no json"}',
                 ),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=False, message='Ongeldige JSON'),
                      JsonDict.loads(body))
     self.assertEqual(0, len(self.observable.calledMethods))
    def testInjectAnyCookie(self):
        sessions = []

        class MyObserver(Observable):
            def handleRequest(self, session=None, *args, **kwargs):
                sessions.append(session)
                yield utils.okHtml + '<html/>'

        self.handler.addObserver(MyObserver())
        headers, _ = parseResponse(
            asBytes(
                self.handler.handleRequest(
                    RequestURI='/path',
                    Client=('127.0.0.1', 12345),
                    Headers={
                        'Cookie':
                        '%s=%s' %
                        (self.cookiestore.cookieName(), 'injected_id')
                    })))
        headers = headers["Headers"]
        self.assertTrue('injected_id' not in ' '.join(headers['Set-Cookie']))
 def testDeleteClosingHours(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/actions/deleteRepositoryClosingHours',
                 Body=bUrlencode(dict(repositoryId='repo-id',
                                      domainId='domain-id',
                                      closingHour="0"),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=True), JsonDict.loads(body))
     self.assertEqual(1, len(self.observable.calledMethods))
     self.assertEqual('deleteClosingHours',
                      self.observable.calledMethods[0].name)
     self.assertEqual(
         {
             'domainId': 'domain-id',
             'identifier': 'repo-id',
             'closingHoursIndex': '0'
         }, self.observable.calledMethods[0].kwargs)
 def testUpdateFieldDefinition(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/actions/updateFieldDefinition',
                 Body=bUrlencode(dict(
                     domainId='domain-id',
                     fieldDefinition='{"is":"json"}',
                 ),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=True), JsonDict.loads(body))
     self.assertEqual(1, len(self.observable.calledMethods))
     self.assertEqual('updateFieldDefinition',
                      self.observable.calledMethods[0].name)
     self.assertEqual({
         'domainId': 'domain-id',
         'data': {
             'is': 'json'
         },
     }, self.observable.calledMethods[0].kwargs)
 def testCreateRepository(self):
     header, body = parseResponse(
         asBytes(
             self.dna.all.handleRequest(
                 user=CallTrace(returnValues=dict(isAdmin=True)),
                 Method='POST',
                 path='/actions/addRepository',
                 Body=bUrlencode(dict(
                     identifier='repo-id',
                     domainId='domain-id',
                     repositoryGroupId='repositoryGroupId',
                 ),
                                 doseq=True))))
     self.assertEqual('200', header['StatusCode'])
     self.assertEqual(dict(success=True), JsonDict.loads(body))
     self.assertEqual(1, len(self.observable.calledMethods))
     self.assertEqual('addRepository',
                      self.observable.calledMethods[0].name)
     self.assertEqual(
         {
             'domainId': 'domain-id',
             'identifier': 'repo-id',
             'repositoryGroupId': 'repositoryGroupId'
         }, self.observable.calledMethods[0].kwargs)
Esempio n. 23
0
 def testData(self):
     headers, body = parseResponse(asString(self.sf.handleRequest(path='/jquery/data.txt')))
     self.assertEqual('200', headers['StatusCode'])
     self.assertEqual('text/plain', headers['Headers']['Content-Type'])
     self.assertEqual('DATA', body)
Esempio n. 24
0
 def testDoesNotExist(self):
     headers, body = parseResponse(asBytes(self.sf.handleRequest(path='/jquery/no')))
     self.assertEqual('404', headers['StatusCode'])
Esempio n. 25
0
 def testData(self):
     headers, body = parseResponse(asBytes(self.sf.handleRequest(path='/jquery/data.txt')))
     self.assertEqual('200', headers['StatusCode'])
     self.assertEqual('text/plain', headers['Headers']['Content-Type'])
     self.assertEqual(b'DATA', body)
Esempio n. 26
0
 def httprequest1_1Mock(**kwargs):
     raise StopIteration(parseResponse(HTTP_RESPONSE))
     yield
Esempio n. 27
0
 def testDoesNotExist(self):
     headers, body = parseResponse(asString(self.sf.handleRequest(path='/jquery/no')))
     self.assertEqual('404', headers['StatusCode'])
Esempio n. 28
0
 def testIndex(self):
     sf = StaticFiles(libdir=self.tempdir, path='/path', allowDirectoryListing=True)
     headers, body = parseResponse(asString(sf.handleRequest(path='/path/')))
     self.assertTrue('<a href="data.txt"' in body, body)
    def testUpdateRepositoryAttributes(self):
        header, body = parseResponse(
            asBytes(
                self.dna.all.handleRequest(
                    user=CallTrace(returnValues=dict(isAdmin=True)),
                    Method='POST',
                    path='/actions/updateRepositoryAttributes',
                    Body=bUrlencode(dict(
                        identifier='repo-id',
                        domainId='domain-id',
                        userAgent="Herman in de zon op een terras",
                    ),
                                    doseq=True))))
        self.assertEqual('200', header['StatusCode'])
        self.assertEqual(dict(success=True), JsonDict.loads(body))
        self.assertEqual(1, len(self.observable.calledMethods))
        self.assertEqual('updateRepositoryAttributes',
                         self.observable.calledMethods[0].name)

        self.assertEqual(
            {
                'identifier': 'repo-id',
                'domainId': 'domain-id',
                'baseurl': None,
                'set': None,
                'metadataPrefix': None,
                'userAgent': 'Herman in de zon op een terras',
                'collection': None,
                'authorizationKey': None,
                'mappingId': None,
                'targetId': None
            }, self.observable.calledMethods[0].kwargs)

        header, body = parseResponse(
            asBytes(
                self.dna.all.handleRequest(
                    user=CallTrace(returnValues=dict(isAdmin=True)),
                    Method='POST',
                    path='/actions/updateRepositoryAttributes',
                    Body=bUrlencode(dict(
                        identifier='repo-id',
                        domainId='domain-id',
                        userAgent="",
                    ),
                                    doseq=True))))
        self.assertEqual('200', header['StatusCode'])
        self.assertEqual(dict(success=True), JsonDict.loads(body))
        self.assertEqual(2, len(self.observable.calledMethods))
        self.assertEqual('updateRepositoryAttributes',
                         self.observable.calledMethods[1].name)
        self.assertEqual(
            {
                'identifier': 'repo-id',
                'domainId': 'domain-id',
                'baseurl': None,
                'set': None,
                'metadataPrefix': None,
                'userAgent': None,
                'collection': None,
                'authorizationKey': None,
                'mappingId': None,
                'targetId': None
            }, self.observable.calledMethods[1].kwargs)