1919# limitations under the License.
2020
2121
22- from neo4j .v1 import basic_auth , GraphDatabase , Router , ConnectionPool , connect , READ_ACCESS
22+ from neo4j .v1 import basic_auth , GraphDatabase , Router , ConnectionPool , connect , READ_ACCESS , \
23+ WRITE_ACCESS , ServiceUnavailable
2324from test .util import ServerTestCase
2425
2526
@@ -33,35 +34,88 @@ def test_router_is_initially_stale(self):
3334 assert router .stale ()
3435
3536 def test_discovery (self ):
36- self .start_stub_server (9001 , "discover_servers .script" )
37+ self .start_stub_server (9001 , "router .script" )
3738 router = Router (self .pool , ("127.0.0.1" , 9001 ))
3839 router .timer = lambda : 0
3940 router .discover ()
4041 assert router .expiry_time == 300
41- assert router .routers == {'127.0.0.1:9001 ' , '127.0.0.1:9002 ' , '127.0.0.1:9003' }
42- assert router .readers == {'127.0.0.1:9002 ' , '127.0.0.1:9003' }
43- assert router .writers == {'127.0.0.1:9001' }
42+ assert router .routers == {( '127.0.0.1' , 9001 ), ( '127.0.0.1' , 9002 ), ( '127.0.0.1' , 9003 ) }
43+ assert router .readers == {( '127.0.0.1' , 9004 ), ( '127.0.0.1' , 9005 ) }
44+ assert router .writers == {( '127.0.0.1' , 9006 ) }
4445
46+ def test_discovery_after_bad_discovery (self ):
47+ self .start_stub_server (9001 , "bad_router.script" )
48+ self .start_stub_server (9002 , "router.script" )
49+ router = Router (self .pool , ("127.0.0.1" , 9001 ), ("127.0.0.1" , 9002 ))
50+ router .timer = lambda : 0
51+ router .discover ()
52+ assert router .expiry_time == 300
53+ assert router .routers == {('127.0.0.1' , 9001 ), ('127.0.0.1' , 9002 ), ('127.0.0.1' , 9003 )}
54+ assert router .readers == {('127.0.0.1' , 9004 ), ('127.0.0.1' , 9005 )}
55+ assert router .writers == {('127.0.0.1' , 9006 )}
56+
57+ def test_discovery_against_non_router (self ):
58+ self .start_stub_server (9001 , "non_router.script" )
59+ router = Router (self .pool , ("127.0.0.1" , 9001 ))
60+ with self .assertRaises (ServiceUnavailable ):
61+ router .discover ()
4562
46- class LocalClusterIntegrationTestCase (ServerTestCase ):
63+ def test_running_out_of_good_routers_on_discovery (self ):
64+ self .start_stub_server (9001 , "bad_router.script" )
65+ self .start_stub_server (9002 , "bad_router.script" )
66+ self .start_stub_server (9003 , "bad_router.script" )
67+ router = Router (self .pool , ("127.0.0.1" , 9001 ), ("127.0.0.1" , 9002 ), ("127.0.0.1" , 9003 ))
68+ with self .assertRaises (ServiceUnavailable ):
69+ router .discover ()
70+
71+
72+ class RoutingDriverTestCase (ServerTestCase ):
4773
4874 def test_should_discover_servers_on_driver_construction (self ):
49- self .start_stub_server (9001 , "discover_servers .script" )
75+ self .start_stub_server (9001 , "router .script" )
5076 uri = "bolt+routing://127.0.0.1:9001"
5177 driver = GraphDatabase .driver (uri , auth = basic_auth ("neo4j" , "password" ), encrypted = False )
52- assert driver .router .routers == {('127.0.0.1' , 9001 ), ('127.0.0.1' , 9002 ), ('127.0.0.1' , 9003 )}
53- assert driver .router .readers == {('127.0.0.1' , 9002 ), ('127.0.0.1' , 9003 )}
54- assert driver .router .writers == {('127.0.0.1' , 9001 )}
78+ router = driver .router
79+ assert router .routers == {('127.0.0.1' , 9001 ), ('127.0.0.1' , 9002 ), ('127.0.0.1' , 9003 )}
80+ assert router .readers == {('127.0.0.1' , 9004 ), ('127.0.0.1' , 9005 )}
81+ assert router .writers == {('127.0.0.1' , 9006 )}
5582
56- def test_should_be_able_to_run_cypher (self ):
57- self .start_stub_server (9001 , "return_1.script" )
83+ def test_should_be_able_to_read (self ):
84+ self .start_stub_server (9001 , "router.script" )
85+ self .start_stub_server (9004 , "return_1.script" )
5886 uri = "bolt+routing://127.0.0.1:9001"
5987 driver = GraphDatabase .driver (uri , auth = basic_auth ("neo4j" , "password" ), encrypted = False )
6088 try :
6189 with driver .session (READ_ACCESS ) as session :
6290 result = session .run ("RETURN $x" , {"x" : 1 })
6391 for record in result :
6492 assert record ["x" ] == 1
65- assert session .connection .address == ('127.0.0.1' , 9001 )
93+ assert session .connection .address == ('127.0.0.1' , 9004 )
94+ finally :
95+ driver .close ()
96+
97+ def test_should_be_able_to_write (self ):
98+ self .start_stub_server (9001 , "router.script" )
99+ self .start_stub_server (9006 , "create_a.script" )
100+ uri = "bolt+routing://127.0.0.1:9001"
101+ driver = GraphDatabase .driver (uri , auth = basic_auth ("neo4j" , "password" ), encrypted = False )
102+ try :
103+ with driver .session (WRITE_ACCESS ) as session :
104+ result = session .run ("CREATE (a $x)" , {"x" : {"name" : "Alice" }})
105+ assert not list (result )
106+ assert session .connection .address == ('127.0.0.1' , 9006 )
107+ finally :
108+ driver .close ()
109+
110+ def test_should_be_able_to_write_as_default (self ):
111+ self .start_stub_server (9001 , "router.script" )
112+ self .start_stub_server (9006 , "create_a.script" )
113+ uri = "bolt+routing://127.0.0.1:9001"
114+ driver = GraphDatabase .driver (uri , auth = basic_auth ("neo4j" , "password" ), encrypted = False )
115+ try :
116+ with driver .session () as session :
117+ result = session .run ("CREATE (a $x)" , {"x" : {"name" : "Alice" }})
118+ assert not list (result )
119+ assert session .connection .address == ('127.0.0.1' , 9006 )
66120 finally :
67121 driver .close ()
0 commit comments