Esempio n. 1
0
    def __init__(self, stateName, tests=None, fastMode=False):
        _IntegrationState.__init__(self,
                                   "solr-" + stateName,
                                   tests=tests,
                                   fastMode=fastMode)

        self.testdataDir = join(dirname(mydir), 'data/integration')
        self.solrStatePath = join(self.integrationTempdir, 'solr')

        self.solrPort = PortNumberGenerator.next()
        self.solrClientPort = PortNumberGenerator.next()

        self.solrCore = "records"
        self.config = {
            self.solrCore: {
                'autocomplete': True,
                'suggestions': {
                    'field': '__all__'
                },
                'autoCommit': {
                    'autoCommitMaxTime': 500
                }
            },
            'core2': {},
            'core3': {}
        }
        self.configPath = join(self.integrationTempdir, 'solr.config')
        with open(self.configPath, 'w') as f:
            f.write(dumps(self.config))
Esempio n. 2
0
    def testHttpGetViaProxy(self):
        get_request = []
        port = PortNumberGenerator.next()
        proxyPort = PortNumberGenerator.next()
        self.proxyServer(proxyPort, get_request)
        self.referenceHttpServer(port, get_request)

        responses = []
        def gethandler(*args, **kwargs):
            response = yield httpget('localhost', port, '/path',
                    headers={'Content-Type': 'text/plain', 'Content-Length': 0},
                    proxyServer="http://localhost:%s" % proxyPort
            )
            yield response
            responses.append(response)
        self.handler = gethandler
        clientget('localhost', self.port, '/')

        self._loopReactorUntilDone()

        self.assertTrue("GET RESPONSE" in responses[0], responses[0])
        self.assertEquals('CONNECT', get_request[0]['command'])
        self.assertEquals('localhost:%s' % port, get_request[0]['path'])
        self.assertEquals('GET', get_request[1]['command'])
        self.assertEquals('/path', get_request[1]['path'])
Esempio n. 3
0
    def testUnbindPortNumberV6(self):
        if not has_dual_stack():
            return printDualStackSkipped()

        p = PortNumberGenerator.next(bind=True)
        self.assertNotBound(
            bindV4(ip='::1', port=p, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=p)

        self.assertBoundAndUnbind(
            bindV6(ip='::1', port=p, protocol='tcp', reuse=False)
        )  # Same IP-version, protocol, host, port combination: basically testing bindV6's close happened.
        for protocol in ['tcp', 'udp']:
            self.assertBoundAndUnbind(
                bindV4(ip='127.0.0.1', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(
                bindV4(ip='0.0.0.0', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(
                bindV6(ip='::1', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(
                bindV6(ip='::', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(
                bindV6(ip='::1',
                       port=p,
                       protocol=protocol,
                       reuse=False,
                       ipV6Only=False))
            self.assertBoundAndUnbind(
                bindV6(ip='::',
                       port=p,
                       protocol=protocol,
                       reuse=False,
                       ipV6Only=False))
Esempio n. 4
0
    def testHttpGetViaProxy(self):
        get_request = []
        port = PortNumberGenerator.next()
        proxyPort = PortNumberGenerator.next()
        self.proxyServer(proxyPort, get_request)
        self.referenceHttpServer(port, get_request)

        responses = []

        def gethandler(*args, **kwargs):
            response = yield httpget('localhost',
                                     port,
                                     '/path',
                                     headers={
                                         'Content-Type': 'text/plain',
                                         'Content-Length': 0
                                     },
                                     proxyServer="http://localhost:%s" %
                                     proxyPort)
            yield response
            responses.append(response)

        self.handler = gethandler
        clientget('localhost', self.port, '/')

        self._loopReactorUntilDone()

        self.assertTrue("GET RESPONSE" in responses[0], responses[0])
        self.assertEquals('CONNECT', get_request[0]['command'])
        self.assertEquals('localhost:%s' % port, get_request[0]['path'])
        self.assertEquals('GET', get_request[1]['command'])
        self.assertEquals('/path', get_request[1]['path'])
Esempio n. 5
0
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self, "examples-" + stateName, tests=tests, fastMode=fastMode)

        self.testdataDir = join(dirname(mydir), 'data')
        self.gatewayPort = PortNumberGenerator.next()
        self.indexPort = PortNumberGenerator.next()
        self.apiPort = PortNumberGenerator.next()
        self.lucenePort = PortNumberGenerator.next()
Esempio n. 6
0
    def testConnectFails(self):
        def failingserver(*args, **kwarg):
            response = yield httpget(*target)

        self.handler = failingserver

        clientget('localhost', self.port, '/')
        target = ('localhost', 'port', '/') # non-numeric port
        self._loopReactorUntilDone()

        expectedTraceback = ignoreLineNumbers("""Traceback (most recent call last):
  File "%(__file__)s", line 0, in handle
      yield self.handler(*args, **kwargs)
  File "%(__file__)s", line 85, in failingserver
    response = yield httpget(*target)
  File "%(httprequest.py)s", line 78, in httprequest
    result = s.getResult()
  File "%(suspend.py)s", line 34, in __call__
    self._doNext(self)
  File "%(httprequest.py)s", line 35, in _do
    sok.connect((host, port))
  File "<string>", line 1, in connect
TypeError: an integer is required
       """ % fileDict)
        if PYVERSION == "2.7":
            expectedTraceback = ignoreLineNumbers("""Traceback (most recent call last):
  File "%(__file__)s", line 0, in handle
      yield self.handler(*args, **kwargs)
  File "%(__file__)s", line 85, in failingserver
    response = yield httpget(*target)
  File "%(httprequest.py)s", line 78, in httprequest
    result = s.getResult()
  File "%(suspend.py)s", line 34, in __call__
    self._doNext(self)
  File "%(httprequest.py)s", line 35, in _do
    sok.connect((host, port))
  File "/usr/lib/python2.7/socket.py", line [#], in meth
    return getattr(self._sock,name)(*args)
TypeError: an integer is required
       """ % fileDict)
        self.assertEquals(TypeError, self.error[0])
        self.assertEqualsWS(expectedTraceback, ignoreLineNumbers(''.join(format_exception(*self.error))))

        target = ('localhost', 87, '/') # invalid port
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()
        self.assertEquals(IOError, self.error[0])

        target = ('UEYR^$*FD(#>NDJ.khfd9.(*njnd', PortNumberGenerator.next(), '/') # invalid host
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()
        self.assertEquals(SocketGaiError, self.error[0])

        target = ('127.0.0.1', PortNumberGenerator.next(), '/')  # No-one listens
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()
        self.assertEquals(IOError, self.error[0])
        self.assertEquals('111', str(self.error[1]))
Esempio n. 7
0
 def __init__(self, stateName, tests=None, fastMode=False):
     IntegrationState.__init__(self,
                               stateName,
                               tests=tests,
                               fastMode=fastMode)
     self.testdataDir = join(dirname(mydir), 'updateRequest')
     self.gatewayPort = PortNumberGenerator.next()
     self.apiPort = PortNumberGenerator.next()
     self.resolverPort = PortNumberGenerator.next()
    def testBindPortRangeNumberGiven(self):
        port = PortNumberGenerator.next(blockSize=2)
        port2 = port + 1
        PortNumberGenerator.bind(port=port, blockSize=2)
        self.assertNotBound(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        self.assertNotBound(bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=port, blockSize=2)
        self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True))
    def testUnbindPortNumberV4(self):
        p = PortNumberGenerator.next(bind=True)
        self.assertNotBound(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=p)
        self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False))
        self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False)) # Same IP-version, protocol, host, port combination: basically testing bindV4's close happened.
        self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=False))
        self.assertBoundAndUnbind(bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=False))
        self.assertBoundAndUnbind(bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=False))
Esempio n. 10
0
 def __init__(self, stateName, tests=None, fastMode=False):
     SeecrIntegrationState.__init__(self, "meresco-lucene-" + stateName, tests=tests, fastMode=fastMode)
     self.stateName = stateName
     if not fastMode:
         system('rm -rf ' + self.integrationTempdir)
         system('mkdir --parents '+ self.integrationTempdir)
     self.suggestionServerPort = PortNumberGenerator.next()
     self.luceneServerPort = PortNumberGenerator.next()
     self.httpPort = PortNumberGenerator.next()
     self.testdataDir = join(dirname(mydir), "data")
Esempio n. 11
0
    def testBindPortNumberGiven(self):
        port, close = attemptBinding(bindPort=0); close()
        PortNumberGenerator.bind(port=port)
        self.assertNotBound(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        if has_dual_stack():
            self.assertNotBound(bindV6(ip='::1', port=port, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=port)
        self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        if has_dual_stack():
            self.assertBoundAndUnbind(bindV6(ip='::1', port=port, protocol='tcp', reuse=True))
Esempio n. 12
0
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self,
                                  "examples-" + stateName,
                                  tests=tests,
                                  fastMode=fastMode)

        self.testdataDir = join(dirname(mydir), 'data')
        self.gatewayPort = PortNumberGenerator.next()
        self.indexPort = PortNumberGenerator.next()
        self.apiPort = PortNumberGenerator.next()
        self.lucenePort = PortNumberGenerator.next()
        self.sruslavePort = PortNumberGenerator.next()
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self, stateName=stateName, tests=tests, fastMode=fastMode)

        self.virtuosoDataDir = join(self.integrationTempdir, 'virtuoso-data')
        self.bulkLoadDir = join(self.integrationTempdir, 'bulk-load-data')
        self.virtuosoPort = PortNumberGenerator.next()
        self.odbcPort = PortNumberGenerator.next()
        self.httpPort = PortNumberGenerator.next()
        self.testdataDir = join(dirname(myDir), 'data')
        if not fastMode:
            system('rm -rf ' + self.integrationTempdir)
            system('mkdir --parents ' + self.virtuosoDataDir)
Esempio n. 14
0
 def __init__(self, stateName, tests=None, fastMode=False):
     SeecrIntegrationState.__init__(self, "meresco-lucene-" + stateName, tests=tests, fastMode=fastMode)
     self.stateName = stateName
     if not fastMode:
         system('rm -rf ' + self.integrationTempdir)
         system('mkdir --parents '+ self.integrationTempdir)
     self.suggestionServerPort = PortNumberGenerator.next()
     self.luceneServerPort = PortNumberGenerator.next()
     self.httpPort = PortNumberGenerator.next()
     self.testdataDir = join(dirname(mydir), "data")
     self.JAVA_BIN = "/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin"
     if not isdir(self.JAVA_BIN):
         self.JAVA_BIN = "/usr/lib/jvm/java-1.8.0/bin"
Esempio n. 15
0
 def testBindPortNumbersGeneratedV4(self):
     p = PortNumberGenerator.next(bind=True)
     self.assertTrue(0 < p < 65536)
     for reuse in [True, False]:
         self.assertNotBound(
             bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=reuse))
         self.assertNotBound(
             bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=reuse))
         self.assertNotBound(
             bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=reuse))
         self.assertNotBound(
             bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=reuse))
     PortNumberGenerator.unbind(p)
Esempio n. 16
0
    def testBindPortRangeNumberGiven(self):
        port = PortNumberGenerator.next(blockSize=2)
        port2 = port + 1
        PortNumberGenerator.bind(port=port, blockSize=2)
        self.assertNotBound(
            bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        self.assertNotBound(
            bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=port, blockSize=2)
        self.assertBoundAndUnbind(
            bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        self.assertBoundAndUnbind(
            bindV4(ip='127.0.0.1', port=port2, protocol='tcp', reuse=True))
Esempio n. 17
0
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self, "harvester-"+stateName, tests=tests, fastMode=fastMode)
        self.helperServerPortNumber = PortNumberGenerator.next()
        self.harvesterInternalServerPortNumber = PortNumberGenerator.next()

        self.helperDir = join(self.integrationTempdir, 'helper')
        self.dumpDir = join(self.helperDir, 'dump')
        self.harvesterLogDir = join(self.integrationTempdir, "log")
        self.harvesterStateDir = join(self.integrationTempdir, "state")

        copytree(join("integration-data", "data"), join(self.integrationTempdir, 'data'))
        for f in listdir(join(self.integrationTempdir, "data")):
            filepath = join(self.integrationTempdir, "data", f)
            if isfile(filepath):
                fileSubstVars(filepath, helperServerPortNumber=self.helperServerPortNumber, integrationTempdir=self.integrationTempdir)
Esempio n. 18
0
    def testReasonableAmountOfUniquePortNumbers(self):
        number = PortNumberGenerator.next()

        self.assertEquals(int, type(number))

        numbers = []
        # More than 14000 gets *very* slow or fails
        # When guaranteed uniqe numbers for that many ports are needed,
        # change the approach (say reading: cat /proc/net/tcp | awk '{print $2}' | sed -e '1d')
        for i in xrange(14000):
            numbers.append(PortNumberGenerator.next())

        self.assertEquals(14000, len(numbers))
        self.assertEquals(14000, len(set(numbers)))
        self.assertEquals(True, all((0 <= n < 65536) for n in numbers))
Esempio n. 19
0
    def testReasonableAmountOfUniquePortNumbers(self):
        number = PortNumberGenerator.next()

        self.assertEqual(int, type(number))

        numbers = []
        # More than 14000 gets *very* slow or fails
        # When guaranteed uniqe numbers for that many ports are needed,
        # change the approach (say reading: cat /proc/net/tcp | awk '{print $2}' | sed -e '1d')
        for i in range(4000):
            numbers.append(PortNumberGenerator.next())

        self.assertEqual(4000, len(numbers))
        self.assertEqual(4000, len(set(numbers)))
        self.assertEqual(True, all((0 <= n < 65536) for n in numbers))
Esempio n. 20
0
    def testHttpAndHttpsGetStreaming(self):
        for useSsl in [False, True]:
            get_request = []
            port = PortNumberGenerator.next()
            streamingData = StreamingData(data=[c for c in "STREAMING GET RESPONSE"])
            self.referenceHttpServer(port, get_request, ssl=useSsl, streamingData=streamingData)

            dataHandled = []
            def handleDataFragment(data):
                dataHandled.append(data)
                if '\r\n\r\n' in ''.join(dataHandled):
                    streamingData.doNext()

            responses = []
            def gethandler(*args, **kwargs):
                f = httpsget if useSsl else httpget
                response = 'no response yet'
                try:
                    response = yield f('localhost', port, '/path',
                        headers={'Accept': 'text/plain'},
                        handlePartialResponse=handleDataFragment,
                    )
                finally:
                    responses.append(response)
            self.handler = gethandler
            clientget('localhost', self.port, '/')
            self._loopReactorUntilDone()

            self.assertEquals([None], responses)
            self.assertTrue("STREAMING GET RESPONSE" in ''.join(dataHandled), dataHandled)
            self.assertTrue(len(dataHandled) > len("STREAMING GET RESPONSE"), dataHandled)
            self.assertEquals('GET', get_request[0]['command'])
            self.assertEquals('/path', get_request[0]['path'])
            headers = get_request[0]['headers'].headers
            self.assertEquals(['Accept: text/plain\r\n'], headers)
Esempio n. 21
0
    def testSuspendProtocolWithThrow(self):
        with Reactor() as reactor:
            suspend = Suspend()

            def handler(**httpvars):
                yield 'before suspend'
                yield suspend
                try:
                    suspend.getResult()
                    self.fail()
                except ValueError, e:
                    tbstring = format_exc()
                    yield "result = %s" % tbstring
                yield 'after suspend'

            listener = MyMockSocket()
            port = PortNumberGenerator.next()
            httpserver = HttpServer(reactor, port, handler, sok=listener)
            httpserver.listen()
            reactor.removeReader(listener)  # avoid new connections
            httpserver._acceptor._accept()
            reactor.step()
            reactor.step()
            reactor.step()
            self.assertEquals(reactor, suspend._reactor)
            self.assertEquals(0, len(reactor._fds))

            def raiser():
                raise ValueError("BAD VALUE")

            try:
                raiser()
            except ValueError, e:
                exc_type, exc_value, exc_traceback = exc_info()
                suspend.throw(exc_type, exc_value, exc_traceback)
    def testConnect(self):
        self.req = False
        serverResponse = 'Hello World'
        def onRequest(**kwargs):
            yield 'HTTP/1.0 200 OK\r\n\r\n' + serverResponse
            self.req = True

        port = PortNumberGenerator.next()
        with Reactor() as reactor:
            try:
                server = HttpsServer(reactor, port, onRequest, keyfile='ssl/server.pkey', certfile='ssl/server.cert')
                server.listen()

                p = Popen('wget -O - --no-check-certificate --quiet https://localhost:%s' % port, shell=True, stdout=PIPE)

                popenStdout = []
                def readPopenStdout():
                    popenStdout.append(p.stdout.read())
                reactor.addReader(p.stdout, readPopenStdout)

                while not self.req:
                   reactor.step()

                reactor.step()
                self.assertEquals(1, len(popenStdout))
                self.assertEquals(serverResponse, popenStdout[0])
            finally:
                server.shutdown()

            # cleanup
            reactor.removeReader(p.stdout)
 def testServerBindAddress(self):
     reactor = CallTrace()
     port = PortNumberGenerator.next()
     server = ObservableHttpServer(reactor, port, bindAddress='127.0.0.1')
     server.startServer()
     self.assertEquals(('127.0.0.1', port),
                       server._httpserver._acceptor._sok.getsockname())
Esempio n. 24
0
    def testHttpsGet(self):
        get_request = []
        port = PortNumberGenerator.next()
        self.referenceHttpServer(port, get_request, ssl=True)

        responses = []

        def gethandler(*args, **kwargs):
            response = yield httpsget('localhost',
                                      port,
                                      '/path',
                                      headers={
                                          'Content-Type': 'text/plain',
                                          'Content-Length': 0
                                      })
            yield response
            responses.append(response)

        self.handler = gethandler
        clientget('localhost', self.port, '/')

        self._loopReactorUntilDone()

        self.assertTrue("GET RESPONSE" in responses[0], responses[0])
        self.assertEquals('GET', get_request[0]['command'])
        self.assertEquals('/path', get_request[0]['path'])
        headers = get_request[0]['headers'].headers
        self.assertEquals(
            ['Content-Length: 0\r\n', 'Content-Type: text/plain\r\n'], headers)
Esempio n. 25
0
    def testHttpRequest(self):
        get_request = []
        port = PortNumberGenerator.next()
        self.referenceHttpServer(port, get_request)

        responses = []

        def gethandler(*args, **kwargs):
            response = 'no response yet'
            try:
                response = yield httprequest(method='MYMETHOD',
                                             host='localhost',
                                             port=port,
                                             request='/path',
                                             headers={
                                                 'Content-Type': 'text/plain',
                                                 'Content-Length': 0
                                             },
                                             prio=4)
            finally:
                responses.append(response)
            yield 'HTTP/1.0 200 OK\r\n\r\n'

        self.handler = gethandler
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()

        self.assertTrue(
            "Message: Unsupported method ('MYMETHOD')" in responses[0],
            responses[0])
Esempio n. 26
0
 def setUp(self):
     TestCase.setUp(self)
     self.tempdir = mkdtemp()
     fd, self.tempfile = mkstemp()
     os.close(fd)
     self.reactor = Reactor()
     self.port = PortNumberGenerator.next()
Esempio n. 27
0
    def testHttpsPost(self):
        post_request = []
        port = PortNumberGenerator.next()
        self.referenceHttpServer(port, post_request, ssl=True)
        body = u"BÖDY" * 20000
        responses = []

        def posthandler(*args, **kwargs):
            response = yield httpspost('localhost',
                                       port,
                                       '/path',
                                       body,
                                       headers={'Content-Type': 'text/plain'})
            yield response
            responses.append(response)

        self.handler = posthandler
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()

        self.assertTrue("POST RESPONSE" in responses[0], responses[0])
        self.assertEquals('POST', post_request[0]['command'])
        self.assertEquals('/path', post_request[0]['path'])
        headers = post_request[0]['headers'].headers
        self.assertEquals(
            ['Content-Length: 100000\r\n', 'Content-Type: text/plain\r\n'],
            headers)
        self.assertEquals(body, post_request[0]['body'])
    def testCloseStatesLocalFirst(self):
        remoteport = PortNumberGenerator.next()
        server = socket()
        server.bind(('localhost', remoteport))
        server.listen(1)
        local = socket()
        local.connect(('localhost', remoteport))
        localport = local.getsockname()[1]

        remote = server.accept()[0]
        self.assertNetStat(remoteport, localport, 'ESTABLISHED')
        self.assertNetStat(localport, remoteport, 'ESTABLISHED')

        local.close()
        self.assertNetStat(localport, remoteport, 'FIN_WAIT')
        self.assertNetStat(remoteport, localport, 'CLOSE_WAIT')

        remote.close()
        self.assertNetStat(localport, remoteport, 'TIME_WAIT')
        self.assertNetStat(remoteport, localport, None)

        server = socket()
        try:
            server.bind(('127.0.0.1', remoteport))
        except:
            self.fail('bind must succeed')
Esempio n. 29
0
    def testBindPortNumberGiven(self):
        port, close = attemptBinding(bindPort=0)
        close()
        PortNumberGenerator.bind(port=port)
        self.assertNotBound(
            bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        if has_dual_stack():
            self.assertNotBound(
                bindV6(ip='::1', port=port, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=port)
        self.assertBoundAndUnbind(
            bindV4(ip='127.0.0.1', port=port, protocol='tcp', reuse=True))
        if has_dual_stack():
            self.assertBoundAndUnbind(
                bindV6(ip='::1', port=port, protocol='tcp', reuse=True))
Esempio n. 30
0
    def testSuspendProtocol(self):
        with Reactor() as reactor:
            suspend = Suspend()
            def handler(**httpvars):
                yield 'before suspend'
                yield suspend
                yield "result = %s" % suspend.getResult()
                yield 'after suspend'
            listener = MyMockSocket()
            port = PortNumberGenerator.next()
            httpserver = HttpServer(reactor, port, handler, sok=listener)
            httpserver.listen()
            reactor.removeReader(listener) # avoid new connections
            httpserver._acceptor._accept()
            self.assertEquals(1, len(reactor._fds))
            self.assertEquals([READ_INTENT], [v.intent for v in reactor._fds.values()])
            reactor.step()
            self.assertEquals(1, len(reactor._fds))
            self.assertEquals([WRITE_INTENT], [v.intent for v in reactor._fds.values()])
            reactor.step()
            reactor.step()
            self.assertEquals(reactor, suspend._reactor)
            self.assertEquals(0, len(reactor._fds))
            suspend.resume('RESPONSE')
            self.assertEquals(1, len(reactor._fds))
            self.assertEquals([WRITE_INTENT], [v.intent for v in reactor._fds.values()])
            reactor.step()
            reactor.step()
            reactor.step()
            self.assertEquals(['before suspend', 'result = RESPONSE', 'after suspend'], listener.data)
            self.assertEquals(0, len(reactor._fds))

            # cleanup (most) fd's
            listener.close()
Esempio n. 31
0
    def testBindPortNumbersGeneratedV6(self):
        if not has_dual_stack():
            return printDualStackSkipped()

        p = PortNumberGenerator.next(bind=True)
        self.assertTrue(0 < p < 65536)
        for protocol in ['tcp', 'udp']:
            for reuse in [True, False]:
                self.assertNotBound(
                    bindV4(ip='127.0.0.1',
                           port=p,
                           protocol=protocol,
                           reuse=reuse))
                self.assertNotBound(
                    bindV4(ip='0.0.0.0',
                           port=p,
                           protocol=protocol,
                           reuse=reuse))
                self.assertNotBound(
                    bindV6(ip='::1', port=p, protocol=protocol, reuse=reuse))
                self.assertNotBound(
                    bindV6(ip='::', port=p, protocol=protocol, reuse=reuse))
                self.assertNotBound(
                    bindV6(ip='::1',
                           port=p,
                           protocol=protocol,
                           reuse=reuse,
                           ipV6Only=False))
                self.assertNotBound(
                    bindV6(ip='::',
                           port=p,
                           protocol=protocol,
                           reuse=reuse,
                           ipV6Only=False))
 def setUp(self):
     TestCase.setUp(self)
     self.tempdir = mkdtemp()
     fd, self.tempfile = mkstemp()
     os.close(fd)
     self.reactor = Reactor()
     self.port = PortNumberGenerator.next()
Esempio n. 33
0
 def testSuspendProtocolWithThrow(self):
     with Reactor() as reactor:
         suspend = Suspend()
         def handler(**httpvars):
             yield 'before suspend'
             yield suspend
             try:
                 suspend.getResult()
                 self.fail()
             except ValueError, e:
                 tbstring = format_exc()
                 yield "result = %s" % tbstring
             yield 'after suspend'
         listener = MyMockSocket()
         port = PortNumberGenerator.next()
         httpserver = HttpServer(reactor, port, handler, sok=listener)
         httpserver.listen()
         reactor.removeReader(listener) # avoid new connections
         httpserver._acceptor._accept()
         reactor.step()
         reactor.step()
         reactor.step()
         self.assertEquals(reactor, suspend._reactor)
         self.assertEquals(0, len(reactor._fds))
         def raiser():
             raise ValueError("BAD VALUE")
         try:
             raiser()
         except ValueError, e:
             exc_type, exc_value, exc_traceback = exc_info()
             suspend.throw(exc_type, exc_value, exc_traceback)
 def __init__(self, stateName, tests=None, fastMode=False):
     SeecrIntegrationState.__init__(self,
                                    "meresco-lucene-" + stateName,
                                    tests=tests,
                                    fastMode=fastMode)
     self.stateName = stateName
     if not fastMode:
         system('rm -rf ' + self.integrationTempdir)
         system('mkdir --parents ' + self.integrationTempdir)
     self.suggestionServerPort = PortNumberGenerator.next()
     self.luceneServerPort = PortNumberGenerator.next()
     self.httpPort = PortNumberGenerator.next()
     self.testdataDir = join(dirname(mydir), "data")
     self.JAVA_BIN = "/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin"
     if not isdir(self.JAVA_BIN):
         self.JAVA_BIN = "/usr/lib/jvm/java-1.8.0/bin"
Esempio n. 35
0
    def testBindPortNumbersGenerated_withBlockSize_V4(self):
        blockSize = 3
        p = PortNumberGenerator.next(bind=True, blockSize=blockSize)

        for consequative_p in range(p, p + blockSize):
            for reuse in [False, True]:
                self.assertNotBound(
                    bindV4(ip='127.0.0.1',
                           port=consequative_p,
                           protocol='tcp',
                           reuse=reuse))
                self.assertNotBound(
                    bindV4(ip='127.0.0.1',
                           port=consequative_p,
                           protocol='udp',
                           reuse=reuse))
                self.assertNotBound(
                    bindV4(ip='0.0.0.0',
                           port=consequative_p,
                           protocol='tcp',
                           reuse=reuse))
                self.assertNotBound(
                    bindV4(ip='0.0.0.0',
                           port=consequative_p,
                           protocol='udp',
                           reuse=reuse))
Esempio n. 36
0
    def testHttpRequestWithTimeout(self):
        # And thus too http(s)get/post/... and friends.
        get_request = []
        port = PortNumberGenerator.next()

        def slowData():
            for i in xrange(5):
                yield i
                sleep(0.01)

        responses = []

        def handlerFactory(timeout):
            def gethandler(*args, **kwargs):
                try:
                    response = yield httprequest(
                        method='GET',
                        host='localhost',
                        port=port,
                        request='/path',
                        headers={
                            'Content-Type': 'text/plain',
                            'Content-Length': 0,
                            'Host': 'localhost'
                        },
                        timeout=timeout,
                    )
                    responses.append(response)
                except TimeoutException, e:
                    responses.append(e)
                finally:
                    assert responses, 'Either a timeout or response should have occurred.'
Esempio n. 37
0
    def __init__(self, stateName, tests=None, fastMode=False):
        _IntegrationState.__init__(self,
                                   "meresco-html-server-" + stateName,
                                   tests=tests,
                                   fastMode=fastMode)

        self.port = PortNumberGenerator.next()
    def testCloseStatesRemoteFirst(self):
        remoteport = PortNumberGenerator.next()
        server = socket()
        server.bind(('127.0.0.1', remoteport))
        server.listen(1)
        local = socket()
        local.connect(('127.0.0.1', remoteport))
        localport = local.getsockname()[1]

        remote = server.accept()[0]
        self.assertNetStat(remoteport, localport, 'ESTABLISHED')
        self.assertNetStat(localport, remoteport, 'ESTABLISHED')

        remote.close()
        self.assertNetStat(remoteport, localport, 'FIN_WAIT')
        self.assertNetStat(localport, remoteport, 'CLOSE_WAIT')

        local.close()
        self.assertNetStat(remoteport, localport, 'TIME_WAIT')
        self.assertNetStat(localport, remoteport, None)

        server.close()
        server = socket()
        try:
            server.bind(('127.0.0.1', remoteport))
            self.fail('re-bind must raise Address Already in Use Exception')
        except AssertionError:
            raise
        except Exception, e:
            pass
Esempio n. 39
0
    def testHttpGet(self):
        get_request = []
        port = PortNumberGenerator.next()
        self.referenceHttpServer(port, get_request)

        responses = []
        def gethandler(*args, **kwargs):
            response = 'no response yet'
            try:
                response = yield httpget('localhost', port, '/path',
                        headers={'Content-Type': 'text/plain', 'Content-Length': 0},
                        prio=4
                )
            finally:
                responses.append(response)
            yield 'HTTP/1.0 200 OK\r\n\r\n'
        self.handler = gethandler
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()

        self.assertTrue("GET RESPONSE" in responses[0], responses[0])
        self.assertEquals('GET', get_request[0]['command'])
        self.assertEquals('/path', get_request[0]['path'])
        headers = get_request[0]['headers'].headers
        self.assertEquals(['Content-Length: 0\r\n', 'Content-Type: text/plain\r\n'], headers)
Esempio n. 40
0
    def testHttpGetWithReallyLargeHeaders(self):
        get_request = []
        port = PortNumberGenerator.next()
        self.referenceHttpServer(port, get_request)

        responses = []
        headersOrig = {'Accept': 'text/plain'}
        headersOrig.update([
            ('X-Really-Largely-Large-%s' % i, 'aLargelyLargeValue')
            for i in range(10000)
        ])
        def gethandler(*args, **kwargs):
            response = 'no response yet'
            try:
                response = yield httpget('localhost', port, '/path',
                    headers=headersOrig,
                )
            finally:
                responses.append(response)

            yield 'HTTP/1.0 200 OK\r\n\r\n'
        self.handler = gethandler
        clientget('localhost', self.port, '/')
        self._loopReactorUntilDone()

        headers = get_request[0]['headers'].headers
        headersAsDict = dict([tuple(h.strip().split(': ', 1)) for h in headers])
        self.assertEquals(len(headersOrig), len(headersAsDict))
        self.assertEquals(headersOrig, headersAsDict)

        self.assertTrue("GET RESPONSE" in responses[0], responses[0])
        self.assertEquals('GET', get_request[0]['command'])
        self.assertEquals('/path', get_request[0]['path'])
Esempio n. 41
0
    def testUnbindPortNumberV4(self):
        p = PortNumberGenerator.next(bind=True)
        self.assertNotBound(
            bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=p)
        self.assertBoundAndUnbind(
            bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False))
        self.assertBoundAndUnbind(
            bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=False)
        )  # Same IP-version, protocol, host, port combination: basically testing bindV4's close happened.
        self.assertBoundAndUnbind(
            bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=False))
        self.assertBoundAndUnbind(
            bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=False))
        self.assertBoundAndUnbind(
            bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=False))
Esempio n. 42
0
 def posthandler(*args, **kwargs):
     response = yield httpspost('localhost',
                                PortNumberGenerator.next(),
                                '/path',
                                "body",
                                headers={'Content-Type': 'text/plain'})
     yield response
     responses.append(response)
Esempio n. 43
0
 def testBindPortNumbersGeneratedV4(self):
     p = PortNumberGenerator.next(bind=True)
     self.assertTrue(0 < p < 65536)
     for reuse in [True, False]:
         self.assertNotBound(bindV4(ip='127.0.0.1', port=p, protocol='tcp', reuse=reuse))
         self.assertNotBound(bindV4(ip='127.0.0.1', port=p, protocol='udp', reuse=reuse))
         self.assertNotBound(bindV4(ip='0.0.0.0', port=p, protocol='tcp', reuse=reuse))
         self.assertNotBound(bindV4(ip='0.0.0.0', port=p, protocol='udp', reuse=reuse))
Esempio n. 44
0
    def testUnbindPortNumberV6(self):
        if not has_dual_stack():
            return printDualStackSkipped()

        p = PortNumberGenerator.next(bind=True)
        self.assertNotBound(bindV4(ip='::1', port=p, protocol='tcp', reuse=True))

        PortNumberGenerator.unbind(port=p)

        self.assertBoundAndUnbind(bindV6(ip='::1', port=p, protocol='tcp', reuse=False)) # Same IP-version, protocol, host, port combination: basically testing bindV6's close happened.
        for protocol in ['tcp', 'udp']:
            self.assertBoundAndUnbind(bindV4(ip='127.0.0.1', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(bindV4(ip='0.0.0.0', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(bindV6(ip='::1', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(bindV6(ip='::', port=p, protocol=protocol, reuse=False))
            self.assertBoundAndUnbind(bindV6(ip='::1', port=p, protocol=protocol, reuse=False, ipV6Only=False))
            self.assertBoundAndUnbind(bindV6(ip='::', port=p, protocol=protocol, reuse=False, ipV6Only=False))
Esempio n. 45
0
    def testSuspendThrowBackwardsCompatibleWithInstanceOnlyThrow_YouWillMissTracebackHistory(
            self):
        with Reactor() as reactor:
            suspend = Suspend()

            def handler(**httpvars):
                yield 'before suspend'
                yield suspend
                try:
                    suspend.getResult()
                    self.fail()
                except ValueError, e:
                    tbstring = format_exc()
                    yield "result = %s" % tbstring
                yield 'after suspend'

            listener = MyMockSocket()
            port = PortNumberGenerator.next()
            httpserver = HttpServer(reactor, port, handler, sok=listener)
            httpserver.listen()
            reactor.removeReader(listener)  # avoid new connections
            httpserver._acceptor._accept()
            self.assertEquals(1, len(reactor._fds))
            reactor.step()
            reactor.step()
            reactor.step()
            self.assertEquals(reactor, suspend._reactor)
            self.assertEquals(0, len(reactor._fds))

            def raiser():
                raise ValueError("BAD VALUE")

            try:
                raiser()
            except:
                exc_value = exc_info()[1]
                suspend.throw(exc_value)
            self.assertEquals(1, len(reactor._fds))
            reactor.step()
            reactor.step()
            reactor.step()
            expectedTraceback = ignoreLineNumbers(
                """Traceback (most recent call last):
      File "%(__file__)s", line 201, in handler
        suspend.getResult()
      File "%(suspend.py)s", line 62, in getResult
        raise self._exception[0], self._exception[1], self._exception[2]
    ValueError: BAD VALUE
            """ % fileDict)
            self.assertEquals(3, len(listener.data))
            self.assertEquals('before suspend', listener.data[0])
            self.assertEqualsWS("result = %s" % expectedTraceback,
                                ignoreLineNumbers(listener.data[1]))
            self.assertEquals('after suspend', listener.data[2])
            self.assertEquals(0, len(reactor._fds))

            # cleanup (most) fd's
            listener.close()
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self, stateName, tests=tests, fastMode=fastMode)

        self.testdataDir = join(mydir, 'data')

        self.digitaleCollectiePort = PortNumberGenerator.next()

        self.erfGeoEnrichmentPort = PortNumberGenerator.next()
        self.erfGeoEnrichmentLocalStatePath = join(self.integrationTempdir, 'erfGeoEnrichmentLocal')

        self.erfGeoEnrichmentIndexPort = PortNumberGenerator.next()
        self.erfGeoEnrichmentIndexLocalStatePath = join(self.integrationTempdir, 'erfGeoEnrichmentIndexLocal')

        erfGeoRepositorySetsSelectionFile = join(self.erfGeoEnrichmentLocalStatePath, 'erfgeo_dc_sets.json')
        if not self.fastMode:
            clearOrCreateDir(self.erfGeoEnrichmentLocalStatePath)
            open(erfGeoRepositorySetsSelectionFile, 'w').write(ERFGEO_SETS_SELECTION_JSON)

        self.erfGeoApiPort = PortNumberGenerator.next()

        self.globalStatePath = join(self.integrationTempdir, 'global')

        self.saharaGetPort = PortNumberGenerator.next()

        self.config = config = readConfig(join(documentationDir, 'examples', 'dc-erfgeo-enrich.config'))

        # test example config has necessary parameters
        def setConfig(config, parameter, value):
            assert config.get(parameter), "key '%s' should only be given a value if it is already declared in source config %s." % (parameter, config)
            print "config[%s] = %s" % (repr(parameter), repr(value))
            config[parameter] = value

        setConfig(config, 'erfgeoEnrich.portNumber', self.erfGeoEnrichmentPort)
        setConfig(config, 'erfgeoEnrich.index.portNumber', self.erfGeoEnrichmentIndexPort)
        setConfig(config, 'digitaleCollectie.host', 'localhost')
        setConfig(config, 'digitaleCollectie.port', self.digitaleCollectiePort)
        setConfig(config, 'erfgeo.searchApiBaseUrl', 'http://localhost:%s' % self.erfGeoApiPort)

        config['global.apacheLogStream'] = 'disabled'
        config['global.debug.periodicdownload.period'] = '0.1'

        self.configFile = join(self.integrationTempdir, 'erfgeo.config')
        with open(self.configFile, 'w') as f:
            for item in config.items():
                f.write('%s = %s\n' % item)
Esempio n. 47
0
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self, stateName=stateName, tests=tests, fastMode=fastMode)

        self.jenaDataDir = join(self.integrationTempdir, 'jena-data')
        self.jenaPort = PortNumberGenerator.next()
        self.testdataDir = join(dirname(myDir), 'data')
        if not fastMode:
            system('rm -rf ' + self.integrationTempdir)
            system('mkdir --parents ' + self.jenaDataDir)
Esempio n. 48
0
 def testClaimBlockOfPortNumbers(self):
     ports = []
     for i in xrange(20):
         p = PortNumberGenerator.next(blockSize=3)
         self.assertTrue(p in PortNumberGenerator._usedPorts)
         self.assertTrue((p + 1) in PortNumberGenerator._usedPorts)
         self.assertTrue((p + 2) in PortNumberGenerator._usedPorts)
         ports.append(p)
     self.assertEquals(20, len(ports))
Esempio n. 49
0
    def testListenAndLog(self):
        port = PortNumberGenerator.next()
        ulal = UdpListenAndLog(port)
        
        s = socket(AF_INET, SOCK_DGRAM)
        s.sendto("THIS IS THE PAYLOAD", ('127.0.0.1', port))
        sleep(.5)

        self.assertEquals(['THIS IS THE PAYLOAD'], ulal.log())
Esempio n. 50
0
 def testClaimBlockOfPortNumbers(self):
     ports = []
     for i in range(20):
         p = PortNumberGenerator.next(blockSize=3)
         self.assertTrue(p in PortNumberGenerator._usedPorts)
         self.assertTrue((p + 1) in PortNumberGenerator._usedPorts)
         self.assertTrue((p + 2) in PortNumberGenerator._usedPorts)
         ports.append(p)
     self.assertEqual(20, len(ports))
    def __init__(self, stateName, tests=None, fastMode=False):
        IntegrationState.__init__(self, stateName, tests=tests, fastMode=fastMode)
        self.testdataDir = join(dirname(mydir), 'data/integration')
        stateDataDir = join(dirname(mydir), 'data', stateName)
        if isdir(stateDataDir):
            self.testdataDir = stateDataDir

        self.solrDataDir = join(self.integrationTempdir, "solr")
        self.owlimDataDir = join(self.integrationTempdir, "owlim")
        self.httpDataDir = join(mydir, "httpdata")
        system('mkdir --parents ' + self.solrDataDir)

        if not self.fastMode:
            system('cp -r %s/* %s' % (defaultSolrDataDir, self.solrDataDir))

        system("sed 's,^jetty\.home=.*$,jetty.home=%s,' -i %s" % (self.solrDataDir, join(self.solrDataDir, 'start.config')))
        self.solrPortNumber = PortNumberGenerator.next()
        self.owlimPortNumber = PortNumberGenerator.next()
        self.portNumber = PortNumberGenerator.next()
        self.httpPortNumber = PortNumberGenerator.next()
        self.hostName = 'localhost'
        
        self.config = config = readConfig(join(documentationDir, 'examples', 'oas.config'))
        self.configFile = join(self.integrationTempdir, 'oas.config')
        
        # test example config has necessary parameters
        def setConfig(config, parameter, value):
            assert config.get(parameter)
            config[parameter] = value

        setConfig(config, 'hostName', self.hostName)
        setConfig(config, 'portNumber', self.portNumber)
        setConfig(config, 'solrPortNumber', self.solrPortNumber)
        setConfig(config, 'owlimPortNumber', self.owlimPortNumber)
        databasePath = join(self.integrationTempdir, 'database')
        self.harvesterDataDir = join(databasePath, 'harvester')
        setConfig(config, 'databasePath', databasePath)
        setConfig(config, 'resolveBaseUrl', 'http://localhost:%s/resolve/' % self.portNumber)
        self.publicDocumentationPath = join(documentationDir, 'public')
        setConfig(config, 'publicDocumentationPath', self.publicDocumentationPath)

        with open(self.configFile, 'w') as f:
            for item in config.items():
                f.write('%s = %s\n' % item)
Esempio n. 52
0
    def testListenAndLog(self):
        port = PortNumberGenerator.next()
        ulal = UdpListenAndLog(port)

        with socket(AF_INET, SOCK_DGRAM) as s:
            s.sendto(b"THIS IS THE PAYLOAD", ('127.0.0.1', port))
            sleep(.5)

        self.assertEqual([b'THIS IS THE PAYLOAD'], ulal.log())
        ulal.stop()
Esempio n. 53
0
    def testBindPortNumbersGenerated_withBlockSize_V4(self):
        blockSize = 3
        p = PortNumberGenerator.next(bind=True, blockSize=blockSize)

        for consequative_p in range(p, p + blockSize):
            for reuse in [False, True]:
                self.assertNotBound(bindV4(ip='127.0.0.1', port=consequative_p, protocol='tcp', reuse=reuse))
                self.assertNotBound(bindV4(ip='127.0.0.1', port=consequative_p, protocol='udp', reuse=reuse))
                self.assertNotBound(bindV4(ip='0.0.0.0', port=consequative_p, protocol='tcp', reuse=reuse))
                self.assertNotBound(bindV4(ip='0.0.0.0', port=consequative_p, protocol='udp', reuse=reuse))
 def __init__(self, stateName, tests=None, fastMode=False):
     SeecrIntegrationState.__init__(self,
                                    "meresco-uri-enumerate-" + stateName,
                                    tests=tests,
                                    fastMode=fastMode)
     self.stateName = stateName
     if not fastMode:
         system('rm -rf ' + self.integrationTempdir)
         system('mkdir --parents ' + self.integrationTempdir)
     self.numerateServerPort = PortNumberGenerator.next()
     self.testdataDir = join(dirname(mydir), "data")
Esempio n. 55
0
    def testHangupConnectionTimeout(self):
        expectedException = IOError if PY_VERSION == "2.7" else URLError
        self.ms = MockServer(port=PortNumberGenerator.next(), hangupConnectionTimeout=0.1)
        self.ms.start()

        t0 = time()
        self.assertRaises(expectedException, lambda: urlopen(self.ms.myUrl).read())
        t1 = time()
        delta = t1 - t0
        self.assertTrue(0.09 < delta < 0.12, "Expected around 0.1, was %s" % delta)
        self.assertEquals(0, len(self.ms.requests))
Esempio n. 56
0
 def testStartListening(self):
     reactor = CallTrace()
     port = PortNumberGenerator.next()
     Acceptor(reactor, port, lambda sok: lambda: None)
     self.assertEquals('addReader', reactor.calledMethods[0].name)
     sok = reactor.calledMethods[0].args[0]
     out = Popen(['netstat', '--numeric', '--listening', '--udp'], stdout=PIPE, stderr=PIPE).communicate()[0]
     self.assertTrue(str(port) in out, out)
     sok.close()
     callback = reactor.calledMethods[0].args[1]
     self.assertTrue(callable(callback))
Esempio n. 57
0
    def testHangupConnectionTimeout(self):
        expectedException = IOError
        self.ms.socket.close()
        self.ms = MockServer(port=PortNumberGenerator.next(), hangupConnectionTimeout=0.1)
        self.ms.start()

        t0 = time()
        self.assertRaises(expectedException, lambda: urlopen(self.ms.myUrl).read())
        t1 = time()
        delta = t1 - t0
        self.assertTrue(0.09 < delta < 0.12, "Expected around 0.1, was %s" % delta)
        self.assertEqual(0, len(self.ms.requests))