<div dir="ltr"><font face="arial, helvetica, sans-serif">Dear list</font><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I may need som advise to get som testing wokring.</font></div>


<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I have a server for service a, which creates a client for service b to get som data:</font></div><div><font face="courier new, monospace"><br>


</font></div>
<div><div><font face="courier new, monospace" size="1">class StateHandler(object):</font></div><div><font face="courier new, monospace" size="1">    implements(State.Iface)</font></div><div><font face="courier new, monospace" size="1"><br>

</font></div><div><font face="courier new, monospace" size="1">    def __init__(self):</font></div>
<div><font face="courier new, monospace" size="1">        #do stuff</font></div><div><font face="courier new, monospace" size="1">        self.loaddata()</font></div><div><font face="courier new, monospace" size="1"><br>

</font></div>

<div><font face="courier new, monospace" size="1">    @inlineCallbacks</font></div><div><font face="courier new, monospace" size="1">    def loaddata(self):</font></div><div><font face="courier new, monospace" size="1">        try:</font></div>


<div><font face="courier new, monospace" size="1">            conn = yield ClientCreator(</font></div><div><font face="courier new, monospace" size="1">                reactor,</font></div><div><font face="courier new, monospace" size="1">                TTwisted.ThriftClientProtocol,</font></div>



<div><font face="courier new, monospace" size="1">                dsClient,</font></div><div><font face="courier new, monospace" size="1">                TBinaryProtocol.TBinaryProtocolFactory()).connectTCP("10.70.10.30", 7246)</font></div>


<div><font face="courier new, monospace" size="1">                data = yield conn.client.getAllAuthenticationData()</font></div><div><font face="courier new, monospace" size="1">            #process data</font></div><div>


<font face="courier new, monospace" size="1">            conn.transport.loseConnection()</font></div></div><div><font face="courier new, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">I use trail to test this service, code is bolow:</font></div>


<div><font face="courier new, monospace"><br></font></div><div><div><font face="courier new, monospace" size="1">class TestStateStore(unittest.TestCase):</font></div><div><font face="courier new, monospace" size="1"><br>

</font></div>
<div><font face="courier new, monospace" size="1">    @defer.inlineCallbacks</font></div><div><font face="courier new, monospace" size="1">    def setUp(self):</font></div><div><font face="courier new, monospace" size="1">        self.handler = StateHandler()</font></div>


<div><font face="courier new, monospace" size="1">        self.processor = State.Processor(self.handler)</font></div><div><font face="courier new, monospace" size="1">        self.pfactory = TBinaryProtocol.TBinaryProtocolFactory()</font></div>


<div><font face="courier new, monospace" size="1">        self.server = reactor.listenTCP(</font></div><div><font face="courier new, monospace" size="1">            0,</font></div><div><font face="courier new, monospace" size="1">            TTwisted.ThriftServerFactory(self.processor, self.pfactory),</font></div>


<div><font face="courier new, monospace" size="1">            interface="127.0.0.1")</font></div><div><font face="courier new, monospace" size="1">        self.portNo = self.server.getHost().port</font></div><div>


<span style="font-family:'courier new',monospace;font-size:x-small">        self.txclient = yield ClientCreator(</span><br></div><div><font face="courier new, monospace" size="1">            reactor,</font></div>

<div>
<font face="courier new, monospace" size="1">            TTwisted.ThriftClientProtocol,</font></div><div><font face="courier new, monospace" size="1">            State.Client,</font></div><div><font face="courier new, monospace" size="1">            self.pfactory).connectTCP("127.0.0.1", self.portNo)</font></div>


<div><span style="font-family:'courier new',monospace;font-size:x-small">        self.client = self.txclient.client</span><br></div><div><font face="courier new, monospace" size="1"><br></font></div><div><font face="courier new, monospace" size="1">    @defer.inlineCallbacks</font></div>


<div><font face="courier new, monospace" size="1">    def tearDown(self):</font></div><div><font face="courier new, monospace" size="1">        self.txclient.transport.loseConnection()</font></div><div><font face="courier new, monospace" size="1">        yield self.server.stopListening()</font></div>


<div><font face="courier new, monospace" size="1"><br></font></div><div><br></div><div><font face="courier new, monospace" size="1">    def test_dummy(self):</font></div><div><font face="courier new, monospace" size="1">        self.assertEquals(True, True)</font></div>


</div><div><br></div><div>When I run test it fails with the following error message.</div><div><font face="courier new, monospace" size="1"><br></font></div><div><div><font face="courier new, monospace" size="1">ERROR]</font></div>


<div><font face="courier new, monospace" size="1">Traceback (most recent call last):</font></div><div><font face="courier new, monospace" size="1">Failure: twisted.trial.util.DirtyReactorAggregateError: Reactor was unclean.</font></div>


<div><font face="courier new, monospace" size="1">DelayedCalls: (set twisted.internet.base.DelayedCall.debug = True to debug)</font></div><div><font face="courier new, monospace" size="1"><DelayedCall 0x29d99e0 [29.9931809902s] called=0 cancelled=0 Client.failIfNotConnected(TimeoutError('',))></font></div>


<div><font face="courier new, monospace" size="1"><br></font></div><div><font face="courier new, monospace" size="1">oc.tests.test_state_service.TestStateStore.test_dummy</font></div><div><font face="courier new, monospace" size="1">===============================================================================</font></div>


<div><font face="courier new, monospace" size="1">[ERROR]</font></div><div><font face="courier new, monospace" size="1">Traceback (most recent call last):</font></div><div><font face="courier new, monospace" size="1">Failure: twisted.trial.util.DirtyReactorAggregateError: Reactor was unclean.</font></div>


<div><font face="courier new, monospace" size="1">Selectables:</font></div><div><font face="courier new, monospace" size="1"><<class 'twisted.internet.tcp.Client'> to ('10.70.10.30', 7246) at 29d2c10></font></div>


<div><font face="courier new, monospace" size="1"><br></font></div><div><font face="courier new, monospace" size="1">oc.tests.test_state_service.TestStateStore.test_dummy</font></div><div><font face="courier new, monospace" size="1">-------------------------------------------------------------------------------</font></div>


<div><font face="courier new, monospace" size="1">Ran 1 tests in 0.010s</font></div></div><div><br></div><div>To me it seems like Trail shuts down the reactor and throws an error, due to the fact that the reactor is unclean, because the server client is still active, or at least not cleaned up. How do I work around this problem, any help is very appreciated. </div>

<div><br></div><div>--</div><div>Jonas Brunsgaard</div>
</div>