diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/ReadOnlySlaveHaIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/ReadOnlySlaveHaIT.java
deleted file mode 100644
index 0b30e50d71ae8..0000000000000
--- a/enterprise/ha/src/test/java/org/neo4j/kernel/api/impl/labelscan/ReadOnlySlaveHaIT.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2002-2017 "Neo Technology,"
- * Network Engine for Objects in Lund AB [http://neotechnology.com]
- *
- * This file is part of Neo4j.
- *
- * Neo4j is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-package org.neo4j.kernel.api.impl.labelscan;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.IntFunction;
-
-import org.neo4j.graphdb.Label;
-import org.neo4j.graphdb.Transaction;
-import org.neo4j.graphdb.factory.GraphDatabaseSettings;
-import org.neo4j.graphdb.security.WriteOperationsNotAllowedException;
-import org.neo4j.helpers.collection.MapUtil;
-import org.neo4j.kernel.ha.HaSettings;
-import org.neo4j.kernel.ha.HighlyAvailableGraphDatabase;
-import org.neo4j.kernel.impl.ha.ClusterManager;
-import org.neo4j.kernel.lifecycle.LifeSupport;
-import org.neo4j.test.rule.TestDirectory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.neo4j.helpers.collection.Iterators.count;
-
-public class ReadOnlySlaveHaIT
-{
- private static LifeSupport life;
- private static ClusterManager.ManagedCluster cluster;
-
- @ClassRule
- public static final TestDirectory testDirectory = TestDirectory.testDirectory();
-
- @BeforeClass
- public static void setup()
- {
- life = new LifeSupport();
- setupCluster( life );
- }
-
- private static void setupCluster( LifeSupport life )
- {
- int masterId = 1;
- Map> instanceConfigMap = MapUtil.genericMap(
- new HashMap<>(),
- GraphDatabaseSettings.read_only.name(), (IntFunction) value -> value == masterId ? "false" : "true",
- HaSettings.slave_only.name(), (IntFunction) value -> value == masterId ? "false" : "true" );
-
- ClusterManager.Builder builder = new ClusterManager.Builder( testDirectory.directory() )
- .withFirstInstanceId( masterId )
- .withSharedConfig( MapUtil.stringMap( HaSettings.tx_push_factor.name(), "2" ) )
- .withInstanceConfig( instanceConfigMap );
- ClusterManager clusterManager = builder.build();
-
- life.add( clusterManager );
- life.start();
-
- cluster = clusterManager.getCluster();
- }
-
- @AfterClass
- public static void tearDown()
- {
- if ( life != null )
- {
- life.shutdown();
- }
- }
-
- @Test
- public void readOnlySlavesMustBeAbleToPullUpdates() throws Exception
- {
- HighlyAvailableGraphDatabase master = cluster.getMaster();
- Label label = Label.label( "label" );
-
- try ( Transaction tx = master.beginTx() )
- {
- master.createNode( label );
- tx.success();
- }
-
- Iterable allMembers = cluster.getAllMembers();
- for ( HighlyAvailableGraphDatabase member : allMembers )
- {
- try ( Transaction tx = member.beginTx() )
- {
- long count = count( member.findNodes( label ) );
- tx.success();
- assertEquals( 1, count );
- }
- }
- }
-
- @Test
- public void readOnlySlaveMustNotAcceptExternalUpdates() throws Exception
- {
- HighlyAvailableGraphDatabase slave = cluster.getAnySlave();
-
- Exception exception = null;
- try ( Transaction tx = slave.beginTx() )
- {
- slave.createNode();
- tx.success();
- }
- catch ( WriteOperationsNotAllowedException e )
- {
- exception = e;
- }
-
- assertNotNull( "Expected read only slave to fail when trying to write", exception );
- }
-}
diff --git a/enterprise/ha/src/test/java/org/neo4j/test/ha/ReadOnlySlaveTest.java b/enterprise/ha/src/test/java/org/neo4j/test/ha/ReadOnlySlaveTest.java
index 869ea6038f098..fcbe934dcb2d7 100644
--- a/enterprise/ha/src/test/java/org/neo4j/test/ha/ReadOnlySlaveTest.java
+++ b/enterprise/ha/src/test/java/org/neo4j/test/ha/ReadOnlySlaveTest.java
@@ -27,17 +27,15 @@
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
-import org.neo4j.graphdb.TransactionFailureException;
import org.neo4j.graphdb.security.WriteOperationsNotAllowedException;
-import org.neo4j.kernel.api.exceptions.ReadOnlyDbException;
import org.neo4j.kernel.configuration.Settings;
import org.neo4j.kernel.ha.HighlyAvailableGraphDatabase;
import org.neo4j.kernel.impl.ha.ClusterManager.ManagedCluster;
import static junit.framework.TestCase.fail;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.neo4j.graphdb.factory.GraphDatabaseSettings.read_only;
+import static org.neo4j.helpers.collection.Iterators.count;
import static org.neo4j.kernel.ha.HaSettings.tx_push_factor;
/**
@@ -164,4 +162,29 @@ public void givenClusterWithReadOnlySlaveWhenAddNewRelTypeOnSlaveThenThrowExcept
// Ok!
}
}
+
+ @Test
+ public void givenClusterWithReadOnlySlaveWhenCreatingNodeOnMasterThenSlaveShouldBeAbleToPullUpdates() throws Exception
+ {
+ ManagedCluster cluster = clusterRule.startCluster();
+ HighlyAvailableGraphDatabase master = cluster.getMaster();
+ Label label = Label.label( "label" );
+
+ try ( Transaction tx = master.beginTx() )
+ {
+ master.createNode( label );
+ tx.success();
+ }
+
+ Iterable allMembers = cluster.getAllMembers();
+ for ( HighlyAvailableGraphDatabase member : allMembers )
+ {
+ try ( Transaction tx = member.beginTx() )
+ {
+ long count = count( member.findNodes( label ) );
+ tx.success();
+ assertEquals( 1, count );
+ }
+ }
+ }
}