SSL的扭曲试验错误

时间:2014-02-25 19:44:57

标签: ssl twisted trial

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)

1 个答案:

答案 0 :(得分:0)

Jonathan Lange wrote about this problem and its solutions。您可能还想在单元测试中考虑不使用真实的网络连接。 Agent已经有效了。 Site也一样, reactor.listenSSL等尝试编写运行 代码的单元测试,而不是编写代码所依赖的库中的大量代码。