19
19
# limitations under the License.
20
20
21
21
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
23
24
from test .util import ServerTestCase
24
25
25
26
@@ -33,35 +34,88 @@ def test_router_is_initially_stale(self):
33
34
assert router .stale ()
34
35
35
36
def test_discovery (self ):
36
- self .start_stub_server (9001 , "discover_servers .script" )
37
+ self .start_stub_server (9001 , "router .script" )
37
38
router = Router (self .pool , ("127.0.0.1" , 9001 ))
38
39
router .timer = lambda : 0
39
40
router .discover ()
40
41
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 ) }
44
45
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 ()
45
62
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 ):
47
73
48
74
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" )
50
76
uri = "bolt+routing://127.0.0.1:9001"
51
77
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 )}
55
82
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" )
58
86
uri = "bolt+routing://127.0.0.1:9001"
59
87
driver = GraphDatabase .driver (uri , auth = basic_auth ("neo4j" , "password" ), encrypted = False )
60
88
try :
61
89
with driver .session (READ_ACCESS ) as session :
62
90
result = session .run ("RETURN $x" , {"x" : 1 })
63
91
for record in result :
64
92
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 )
66
120
finally :
67
121
driver .close ()
0 commit comments