0

SSLTest.testError はパスしますが、TearDown の後に Trial で例外が発生します。比較のために、正常に動作する RegularTest.testOk があります。これを説明する Twisted のバグは見つかっていないので、これがいかに簡単に再現できるかを考えると、何か間違ったことをしていると思います。何か案は?

コードは次のとおりです。

from twisted.web import resource
from twisted.internet import ssl, reactor
from twisted.web.server import Site
from twisted.web.client import Agent, WebClientContextFactory
from twisted.trial.unittest import TestCase


class DummyServer(resource.Resource):
    isLeaf = True

    def render(self, request):
        return 'hello world'


class SSLTest(TestCase):
    def setUp(self):
        site = Site(DummyServer())
        SSLFactory = ssl.DefaultOpenSSLContextFactory('../server.key',
                                                      '../server.crt')
        port = reactor.listenSSL(0, site, contextFactory=SSLFactory)
        self.port = port
        self.portNumber = port._realPortNumber

    def tearDown(self):
        self.port.stopListening()

    def testError(self):
        def finished(result):
            self.assertEquals(result.code, 200)

        url = 'https://127.0.0.1:%s' % self.portNumber

        agent = Agent(reactor, WebClientContextFactory())
        d = agent.request('GET', url)
        d.addCallback(finished)
        return d


class RegularTest(TestCase):
    def setUp(self):
        site = Site(DummyServer())
        port = reactor.listenTCP(0, site)
        self.port = port
        self.portNumber = port._realPortNumber

    def tearDown(self):
        self.port.stopListening()

    def testOk(self):
        def finished(result):
            self.assertEquals(result.code, 200)

        url = 'http://127.0.0.1:%s' % self.portNumber

        agent = Agent(reactor,)
        d = agent.request('GET', url)
        d.addCallback(finished)
        return d

ここに標準出力があります:

$ trial trialerror.py
trialerror
  RegularTest
    testOk ...                                                             [OK]
  SSLTest
    testError ...                                                          [OK]
                                                      [ERROR]

===============================================================================
[ERROR]
Traceback (most recent call last):
Failure: twisted.trial.util.DirtyReactorAggregateError: Reactor was unclean.
Selectables:
<TLSMemoryBIOProtocol #0 on 51135>

trialerror.SSLTest.testError
-------------------------------------------------------------------------------
Ran 2 tests in 0.018s

FAILED (errors=1, successes=2)
4

1 に答える 1