@@ -1062,6 +1062,30 @@ async fn test_persistent_watcher_passive_remove() {
1062
1062
assert_eq ! ( child_event. path, "/" ) ;
1063
1063
}
1064
1064
1065
+ #[ test_log:: test( tokio:: test) ]
1066
+ async fn test_fail_watch_with_concurrent_passive_remove ( ) {
1067
+ let docker = DockerCli :: default ( ) ;
1068
+ let zookeeper = docker. run ( zookeeper_image ( ) ) ;
1069
+ let zk_port = zookeeper. get_host_port ( 2181 ) ;
1070
+ let cluster = format ! ( "127.0.0.1:{}" , zk_port) ;
1071
+
1072
+ let client = zk:: Client :: connect ( & cluster) . await . unwrap ( ) ;
1073
+
1074
+ let recursive_watcher = client. watch ( "/a" , zk:: AddWatchMode :: PersistentRecursive ) . await . unwrap ( ) ;
1075
+ let data_watching = client. get_and_watch_data ( "/a" ) ;
1076
+ let persistent_watching = client. watch ( "/a" , zk:: AddWatchMode :: Persistent ) ;
1077
+ drop ( recursive_watcher) ;
1078
+
1079
+ assert_that ! ( data_watching. await . unwrap_err( ) ) . is_equal_to ( zk:: Error :: NoNode ) ;
1080
+ let mut persistent_watcher = persistent_watching. await . unwrap ( ) ;
1081
+
1082
+ client. create ( "/a" , b"a" , PERSISTENT_OPEN ) . await . unwrap ( ) ;
1083
+
1084
+ let event = persistent_watcher. changed ( ) . await ;
1085
+ assert_that ! ( event. event_type) . is_equal_to ( zk:: EventType :: NodeCreated ) ;
1086
+ assert_that ! ( event. path) . is_same_string_to ( "/a" ) ;
1087
+ }
1088
+
1065
1089
#[ test_log:: test( tokio:: test) ]
1066
1090
async fn test_persistent_watcher ( ) {
1067
1091
let docker = DockerCli :: default ( ) ;
0 commit comments