//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldContinueServingBoltRequestsBetweenInternalRestarts() throws Throwable //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: public virtual void ShouldContinueServingBoltRequestsBetweenInternalRestarts() { // given /* * Interestingly, it is enough to simply start a slave and then direct sessions to it. The problem seems * to arise immediately, since simply from startup to being into SLAVE at least one internal restart happens * and that seems sufficient to break the bolt server. * However, that would make the test really weird, so we'll start the cluster, make sure we can connect and * then isolate the slave, make it shutdown internally, then have it rejoin and it will switch to slave. * At the end of this process, it must still be possible to open and execute transactions against the instance. */ ClusterManager.ManagedCluster cluster = ClusterRule.startCluster(); HighlyAvailableGraphDatabase slave1 = cluster.AnySlave; Driver driver = GraphDatabase.driver(cluster.GetBoltAddress(slave1), AuthTokens.basic("neo4j", "neo4j")); /* * We'll use a bookmark to enforce use of kernel internals by the bolt server, to make sure that parts that are * switched during an internal restart are actually refreshed. Technically, this is not necessary, since the * bolt server makes such use for every request. But this puts a nice bow on top of it. */ string lastBookmark = InExpirableSession(driver, Driver.session, s => { using (Transaction tx = s.beginTransaction()) { tx.run("CREATE (person:Person {name: {name}, title: {title}})", parameters("name", "Webber", "title", "Mr")); tx.success(); } return(s.lastBookmark()); }); // when ClusterManager.RepairKit slaveFailRK = cluster.Fail(slave1); cluster.Await(entireClusterSeesMemberAsNotAvailable(slave1)); slaveFailRK.Repair(); cluster.Await(masterSeesMembers(3)); // then int?count = InExpirableSession(driver, Driver.session, s => { Record record; using (Transaction tx = s.beginTransaction(lastBookmark)) { record = tx.run("MATCH (n:Person) RETURN COUNT(*) AS count").next(); tx.success(); } return(record.get("count").asInt()); }); assertEquals(1, count.Value); }