Esempio n. 1
0
class StateTest(unittest.TestCase):
    """with four states, there are 16 possible transitions, including
    'transitioning' to the same state. 
    """
    def setUp(self):
        self.stream = Stream(None, None)

    def _invalid(self, initial_state, invalid_states):
        for invalid_state in invalid_states:
            with self.assertRaises(ValueError):
                self.stream.state = initial_state
                self.stream._advance_state_to(invalid_state)

    def _valid(self, initial_state, valid_states):
        for valid_state in valid_states:
            self.stream.state = initial_state
            self.stream._advance_state_to(valid_state)

    def test_disconnected(self):
        "can go from disconnected to connecting or disconnected"
        self._valid(DISCONNECTED, (CONNECTING, ))
        self._invalid(DISCONNECTED, (CONNECTED, FINISHED, DISCONNECTED))

    def test_connected(self):
        "from connected can transition to FINISHED only"
        self._valid(CONNECTED, (FINISHED, ))
        self._invalid(CONNECTED, (CONNECTING, DISCONNECTED, CONNECTED))

    def test_connecting(self):
        "from connecting can transition to disconnected, connected or backing off"
        self._valid(CONNECTING, (CONNECTED, FINISHED))
        self._invalid(CONNECTING, (CONNECTING, DISCONNECTED))

    def test_finished(self):
        "from finished, cannot advance"
        self._invalid(FINISHED, (CONNECTED, CONNECTING, DISCONNECTED))
        self._valid(FINISHED, (FINISHED, ))
Esempio n. 2
0
 def setUp(self):
     consumer = Mock(spec=oauth.OAuthConsumer)
     consumer.secret = 'abc'
     token = Mock(spec=oauth.OAuthToken)
     token.secret = 'abc'
     self.stream = Stream(consumer, token)
Esempio n. 3
0
class ConnectTest(unittest.TestCase):

    def setUp(self):
        consumer = Mock(spec=oauth.OAuthConsumer)
        consumer.secret = 'abc'
        token = Mock(spec=oauth.OAuthToken)
        token.secret = 'abc'
        self.stream = Stream(consumer, token)

    def tearDown(self):
        for call in reactor.getDelayedCalls():
            if call.active():
                call.cancel()

    def _connect(self, mock_endpoint, mock_http_response):
        """general process for testing connection attempts which
        achieve a successful connection to the twitter servers and
        then attempt a http request
        """
        endpoint_connect_dfr = defer.Deferred()
        mock_endpoint.connect.return_value = endpoint_connect_dfr

        d = self.stream.track(TestReceiver(), ['track'])
        self.assertEquals(CONNECTING, self.stream.state)

        # simulate a successful ssl connection
        mock_http_protocol = Mock(spec=HTTP11ClientProtocol)
        http_request_dfr = defer.Deferred()
        mock_http_protocol.request.return_value = http_request_dfr
        endpoint_connect_dfr.callback(mock_http_protocol)

        self.assertEquals(CONNECTING, self.stream.state)
        http_request_dfr.callback(mock_http_response)
        return d

    def test_connection_error(self, mock_endpoint):
        "should disconnect after network error"
        endpoint_connect_dfr = defer.Deferred()
        mock_endpoint.connect.return_value = endpoint_connect_dfr

        self.stream.track(TestReceiver(), ['track'])
        self.assertEquals(CONNECTING, self.stream.state)

        # simulate a network error
        endpoint_connect_dfr.errback(Failure(''))
        self.assertEquals(FINISHED, self.stream.state)

    def test_successful_connection(self, mock_endpoint):
        "should pass http request body to TwitterStreamingProtocol"
        mock_http_response = Mock()
        mock_http_response.code = 200
        mock_http_response.deliverBody = Mock()

        d = self._connect(mock_endpoint, mock_http_response)

        self.assertEquals(CONNECTED, self.stream.state)
        self.assertTrue(mock_http_response.deliverBody.called)

        self.assertTrue(d.called)

    def test_disconnect_while_connecting_before_host_connect(self, mock_endpoint):
        endpoint_connect_dfr = defer.Deferred()
        mock_endpoint.connect.return_value = endpoint_connect_dfr

        self.stream.track(TestReceiver(), ['track'])
        self.assertEquals(CONNECTING, self.stream.state)
        self.stream.disconnect()
        self.assertEquals(FINISHED, self.stream.state)

    def test_disconnect_while_connecting_before_http_response(self, mock_endpoint):
        endpoint_connect_dfr = defer.Deferred()
        mock_endpoint.connect.return_value = endpoint_connect_dfr

        self.stream.track(TestReceiver(), ['track'])
        self.assertEquals(CONNECTING, self.stream.state)

        mock_http_protocol = Mock(spec=HTTP11ClientProtocol)
        mock_http_protocol.request.return_value = defer.Deferred()
        endpoint_connect_dfr.callback(mock_http_protocol)
        self.assertEquals(CONNECTING, self.stream.state)

        self.stream.disconnect()
        self.assertEquals(FINISHED, self.stream.state)

    def test_connect_while_connected(self, mock_endpoint):
        "should pass http request body to TwitterStreamingProtocol"
        mock_http_response = Mock()
        mock_http_response.code = 200
        mock_http_response.deliverBody = Mock()

        self._connect(mock_endpoint, mock_http_response)
        self.assertEquals(CONNECTED, self.stream.state)

        with self.assertRaises(ValueError):
            self.stream.track(TestReceiver(), ['track'])

    def test_connect_while_connecting(self, mock_endpoint):
        first_deferred = defer.Deferred()
        mock_endpoint.connect.return_value = first_deferred
        self.stream.track(TestReceiver(), ['track'])
        self.assertEquals(CONNECTING, self.stream.state)

        with self.assertRaises(ValueError):
            self.stream.track(TestReceiver(), ['track'])
Esempio n. 4
0
 def setUp(self):
     self.stream = Stream(None, None)