/**
* Copyright (c) 2002-2012 "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 <http://www.gnu.org/licenses/>.
*/
package org.neo4j.ha;
import java.io.File;
import junit.framework.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Transaction;
import org.neo4j.helpers.collection.MapUtil;
import org.neo4j.kernel.ha.HighlyAvailableGraphDatabase;
import org.neo4j.kernel.ha.UpdatePuller;
import org.neo4j.test.LoggerRule;
import org.neo4j.test.ha.ClusterManager;
/**
* Verify that we can run multiple clusters simultaneously
*/
public class MultipleClusterTest
{
@Rule
public LoggerRule logging = new LoggerRule();
@Test
public void runTwoClusters() throws Throwable
{
File root = new File( "target/cluster" );
ClusterManager clusterManager = new ClusterManager( getClass().getResource( "/twoclustertest.xml" ).toURI(),
root, MapUtil.stringMap() );
clusterManager.start();
long cluster1;
{
GraphDatabaseService master = clusterManager.getMaster( "neo4j.ha" );
logging.getLogger().info( "CREATE NODE" );
Transaction tx = master.beginTx();
Node node = master.createNode();
node.setProperty( "cluster", "neo4j.ha" );
cluster1 = node.getId();
logging.getLogger().info( "CREATED NODE" );
tx.success();
tx.finish();
}
long cluster2;
{
GraphDatabaseService master = clusterManager.getMaster( "neo4j.ha2" );
logging.getLogger().info( "CREATE NODE" );
Transaction tx = master.beginTx();
Node node = master.createNode();
node.setProperty( "cluster", "neo4j.ha2" );
cluster2 = node.getId();
logging.getLogger().info( "CREATED NODE" );
tx.success();
tx.finish();
}
// Verify properties in all cluster nodes
for ( HighlyAvailableGraphDatabase highlyAvailableGraphDatabase : clusterManager.getCluster( "neo4j.ha" ) )
{
highlyAvailableGraphDatabase.getDependencyResolver().resolveDependency( UpdatePuller.class ).pullUpdates();
Assert.assertEquals( "neo4j.ha", highlyAvailableGraphDatabase.getNodeById( cluster1 ).getProperty(
"cluster" ) );
}
for ( HighlyAvailableGraphDatabase highlyAvailableGraphDatabase : clusterManager.getCluster( "neo4j.ha2" ) )
{
highlyAvailableGraphDatabase.getDependencyResolver().resolveDependency( UpdatePuller.class ).pullUpdates();
Assert.assertEquals( "neo4j.ha2", highlyAvailableGraphDatabase.getNodeById( cluster2 ).getProperty(
"cluster" ) );
}
clusterManager.stop();
}
}