1414
1515from cassandra .connection import HEADER_DIRECTION_TO_CLIENT
1616from cassandra .marshal import uint8_pack , uint32_pack
17- from cassandra .protocol import write_stringmultimap , write_int , write_string
17+ from cassandra .protocol import (write_stringmultimap , write_int , write_string ,
18+ SupportedMessage , ReadyMessage )
1819
1920from six import binary_type , BytesIO
2021from mock import Mock
@@ -151,6 +152,13 @@ def test_timer_cancellation(self):
151152class ReactorTestMixin (object ):
152153
153154 connection_class = socket_attr_name = None
155+ null_handle_function_args = ()
156+
157+ def get_socket (self , connection ):
158+ return getattr (connection , self .socket_attr_name )
159+
160+ def set_socket (self , connection , obj ):
161+ return setattr (connection , self .socket_attr_name , obj )
154162
155163 def make_header_prefix (self , message_class , version = 2 , stream_id = 0 ):
156164 return binary_type ().join (map (uint8_pack , [
@@ -164,7 +172,7 @@ def make_connection(self):
164172 c = self .connection_class ('1.2.3.4' , cql_version = '3.0.1' , connect_timeout = 5 )
165173 mocket = Mock ()
166174 mocket .send .side_effect = lambda x : len (x )
167- setattr ( c , self .socket_attr_name , mocket )
175+ self .set_socket ( c , mocket )
168176 return c
169177
170178 def make_options_body (self ):
@@ -183,3 +191,25 @@ def make_error_body(self, code, msg):
183191
184192 def make_msg (self , header , body = binary_type ()):
185193 return header + uint32_pack (len (body )) + body
194+
195+ def test_successful_connection (self ):
196+ c = self .make_connection ()
197+
198+ # let it write the OptionsMessage
199+ c .handle_write (* self .null_handle_function_args )
200+
201+ # read in a SupportedMessage response
202+ header = self .make_header_prefix (SupportedMessage )
203+ options = self .make_options_body ()
204+ self .get_socket (c ).recv .return_value = self .make_msg (header , options )
205+ c .handle_read (* self .null_handle_function_args )
206+
207+ # let it write out a StartupMessage
208+ c .handle_write (* self .null_handle_function_args )
209+
210+ header = self .make_header_prefix (ReadyMessage , stream_id = 1 )
211+ self .get_socket (c ).recv .return_value = self .make_msg (header )
212+ c .handle_read (* self .null_handle_function_args )
213+
214+ self .assertTrue (c .connected_event .is_set ())
215+ return c
0 commit comments