From 9cc0bd2a0724bf6028b6a076eb698f329d33305f Mon Sep 17 00:00:00 2001 From: Davide Grohmann Date: Fri, 21 Oct 2016 14:34:05 +0200 Subject: [PATCH] Fix IT --- .../scenarios/ClusterDiscoveryIT.java | 62 +++++++++++++------ 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/scenarios/ClusterDiscoveryIT.java b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/scenarios/ClusterDiscoveryIT.java index 75ae3424a9852..9b0300d25a9ad 100644 --- a/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/scenarios/ClusterDiscoveryIT.java +++ b/enterprise/causal-clustering/src/test/java/org/neo4j/causalclustering/scenarios/ClusterDiscoveryIT.java @@ -19,13 +19,16 @@ */ package org.neo4j.causalclustering.scenarios; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; -import org.junit.Rule; -import org.junit.Test; - import org.neo4j.causalclustering.discovery.Cluster; import org.neo4j.causalclustering.discovery.procedures.GetServersProcedure; import org.neo4j.kernel.api.KernelAPI; @@ -35,44 +38,64 @@ import org.neo4j.kernel.api.exceptions.ProcedureException; import org.neo4j.kernel.api.exceptions.TransactionFailureException; import org.neo4j.kernel.api.security.AnonymousContext; +import org.neo4j.kernel.configuration.Settings; import org.neo4j.kernel.impl.factory.GraphDatabaseFacade; import org.neo4j.test.causalclustering.ClusterRule; +import static java.util.Collections.singletonMap; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; - +import static org.neo4j.causalclustering.core.CausalClusteringSettings.cluster_allow_reads_on_followers; import static org.neo4j.helpers.collection.Iterators.asList; import static org.neo4j.kernel.api.proc.ProcedureSignature.procedureName; +@RunWith( Parameterized.class ) public class ClusterDiscoveryIT { + @Parameterized.Parameter( 0 ) + public String ignored; // <- JUnit is happy only if this is here! + @Parameterized.Parameter( 1 ) + public Map config; + @Parameterized.Parameter( 2 ) + public boolean expectFollowersAsReadEndPoints; + + @Parameterized.Parameters( name = "{0}") + public static Collection params() + { + return Arrays.asList( + new Object[]{"with followers as read end points", + singletonMap( cluster_allow_reads_on_followers.name(), Settings.TRUE ), true}, + new Object[]{"no followers as read end points", + singletonMap( cluster_allow_reads_on_followers.name(), Settings.FALSE ), false} + ); + } + @Rule - public final ClusterRule clusterRule = new ClusterRule( getClass() ) - .withNumberOfCoreMembers( 3 ); + public final ClusterRule clusterRule = new ClusterRule( getClass() ).withNumberOfCoreMembers( 3 ); @Test public void shouldFindReadWriteAndRouteServers() throws Exception { // when - Cluster cluster = clusterRule.withNumberOfReadReplicas( 1 ).startCluster(); + Cluster cluster = clusterRule.withSharedCoreParams( config ).withNumberOfReadReplicas( 1 ).startCluster(); // then - List currentMembers; + int cores = cluster.coreMembers().size(); + int readReplicas = cluster.readReplicas().size(); + int readEndPoints = expectFollowersAsReadEndPoints ? (cores - 1 + readReplicas) : readReplicas; for ( int i = 0; i < 3; i++ ) { - currentMembers = getMembers( cluster.getCoreMemberById( i ).database() ); - - List> members = (List>) currentMembers.get( 0 )[1]; + List> members = getMembers( cluster.getCoreMemberById( i ).database() ); assertEquals( 1, members.stream().filter( x -> x.get( "role" ).equals( "WRITE" ) ) .flatMap( x -> Arrays.stream( (Object[]) x.get( "addresses" ) ) ).count() ); - assertEquals( 4, members.stream().filter( x -> x.get( "role" ).equals( "READ" ) ) + assertEquals( readEndPoints, members.stream().filter( x -> x.get( "role" ).equals( "READ" ) ) .flatMap( x -> Arrays.stream( (Object[]) x.get( "addresses" ) ) ).count() ); - assertEquals( 3, members.stream().filter( x -> x.get( "role" ).equals( "ROUTE" ) ) + assertEquals( cores, members.stream().filter( x -> x.get( "role" ).equals( "ROUTE" ) ) .flatMap( x -> Arrays.stream( (Object[]) x.get( "addresses" ) ) ).count() ); } } @@ -81,7 +104,7 @@ public void shouldFindReadWriteAndRouteServers() throws Exception public void shouldNotBeAbleToDiscoverFromReadReplicas() throws Exception { // given - Cluster cluster = clusterRule.withNumberOfReadReplicas( 2 ).startCluster(); + Cluster cluster = clusterRule.withSharedCoreParams( config ).withNumberOfReadReplicas( 2 ).startCluster(); try { @@ -96,7 +119,8 @@ public void shouldNotBeAbleToDiscoverFromReadReplicas() throws Exception } } - private List getMembers( GraphDatabaseFacade db ) throws TransactionFailureException, org + @SuppressWarnings( "unchecked" ) + private List> getMembers( GraphDatabaseFacade db ) throws TransactionFailureException, org .neo4j.kernel.api.exceptions.ProcedureException { KernelAPI kernel = db.getDependencyResolver().resolveDependency( KernelAPI.class ); @@ -104,9 +128,11 @@ private List getMembers( GraphDatabaseFacade db ) throws TransactionFa try ( Statement statement = transaction.acquireStatement() ) { // when - return asList( statement.procedureCallOperations().procedureCallRead( - procedureName( "dbms", "cluster", "routing", GetServersProcedure.NAME ), - new Object[0] ) ); + List currentMembers = asList( statement.procedureCallOperations() + .procedureCallRead( procedureName( "dbms", "cluster", "routing", GetServersProcedure.NAME ), + new Object[0] ) ); + + return (List>) currentMembers.get( 0 )[1]; } } }