使用SSL的扭曲试验错误

使用SSL的扭曲试验错误,ssl,twisted,trial,Ssl,Twisted,Trial,SSLTest.testError通过,但试用版在卸载后引发异常。为了进行比较,RegularTest.testOk可以正常工作。 我还没有发现任何扭曲的bug来解释这一点,所以我假设我做了一些错误的事情,因为这很容易复制。有什么想法吗 代码如下: from twisted.web import resource from twisted.internet import ssl, reactor from twisted.web.server import Site from twisted.w

SSLTest.testError通过,但试用版在卸载后引发异常。为了进行比较,RegularTest.testOk可以正常工作。 我还没有发现任何扭曲的bug来解释这一点,所以我假设我做了一些错误的事情,因为这很容易复制。有什么想法吗

代码如下:

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)
$trialerror.py试用版
审判员
定期测试
测试OK。。。[好的]
SSLTest
测试员。。。[好的]
[错误]
===============================================================================
[错误]
回溯(最近一次呼叫最后一次):
失败:twisted.trial.util.DirtyReactor聚合错误:反应堆不干净。
可选择项:
测试仪错误
-------------------------------------------------------------------------------
在0.018秒内运行了2次测试
失败(错误=1,成功=2)
。您可能还想考虑在单元测试中不使用实际的网络连接。代码>代理已经工作。网站也是如此,
reactor.listenSSL
等。试着编写单元测试来测试代码,而不是从代码所依赖的库中获取大量代码。

我还没有找到如何在站点中获取底层协议以及如何注入延迟协议。这实际上可能根本不可能,这使得整个测试策略毫无用处。无论如何,谢谢你的链接!我将尝试找到一种不同的方法来测试twisted.web,而不是启动和连接服务器。