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 ); + } + } + } }