From 99413810703a51b5928367d16832502b8d11d3c4 Mon Sep 17 00:00:00 2001 From: Tobias Lindaaker Date: Wed, 5 Apr 2017 15:28:00 +0200 Subject: [PATCH] Add test utilities Make it easier to run tests with custom config. Make it easier to run tests with multiple identical threads. --- .../org/neo4j/cypher/QueryInvalidationIT.java | 12 +- ...nsactionRepresentationCommitProcessIT.java | 9 +- .../impl/api/index/IndexStatisticsTest.java | 13 +-- .../neo4j/kernel/impl/store/NeoStoresIT.java | 10 +- .../RelationshipChainPointerChasingTest.java | 9 +- .../impl/store/RelationshipGroupStoreIT.java | 9 +- .../state/RelationshipCreatorTest.java | 9 +- .../java/org/neo4j/test/ConfigBuilder.java | 106 ++++++++++++++++++ .../org/neo4j/test/rule/DatabaseRule.java | 29 +++++ .../test/rule/concurrent/ThreadingRule.java | 73 ++++++++++-- .../legacy/AutoIndexOperationsTest.java | 12 +- .../neo4j/graphdb/store/id/IdReuseTest.java | 16 +-- .../store/id/RelationshipIdReuseStressIT.java | 19 +--- .../store/id/NodeIdReuseStressIT.java | 14 +-- 14 files changed, 221 insertions(+), 119 deletions(-) create mode 100644 community/kernel/src/test/java/org/neo4j/test/ConfigBuilder.java diff --git a/community/cypher/cypher/src/test/java/org/neo4j/cypher/QueryInvalidationIT.java b/community/cypher/cypher/src/test/java/org/neo4j/cypher/QueryInvalidationIT.java index 337cdacef6d6b..578715bad2900 100644 --- a/community/cypher/cypher/src/test/java/org/neo4j/cypher/QueryInvalidationIT.java +++ b/community/cypher/cypher/src/test/java/org/neo4j/cypher/QueryInvalidationIT.java @@ -32,7 +32,6 @@ import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Result; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.monitoring.Monitors; @@ -51,15 +50,8 @@ public class QueryInvalidationIT @Rule public final DatabaseRule db = new ImpermanentDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - super.configure( builder ); - builder.setConfig( GraphDatabaseSettings.query_statistics_divergence_threshold, "0.5" ); - builder.setConfig( GraphDatabaseSettings.cypher_min_replan_interval, "1s" ); - } - }; + .withSetting( GraphDatabaseSettings.query_statistics_divergence_threshold, "0.5" ) + .withSetting( GraphDatabaseSettings.cypher_min_replan_interval, "1s" ); @Test public void shouldRePlanAfterDataChangesFromAnEmptyDatabase() throws Exception diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessIT.java index cc8674b36c868..c9ea67bc892dc 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcessIT.java @@ -27,7 +27,6 @@ import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.index.Index; import org.neo4j.graphdb.index.IndexManager; @@ -53,13 +52,7 @@ public class TransactionRepresentationCommitProcessIT @Rule public final DatabaseRule db = new ImpermanentDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - builder.setConfig( GraphDatabaseSettings.check_point_interval_time, "10ms" ); - } - }; + .withSetting( GraphDatabaseSettings.check_point_interval_time, "10ms" ); @Test( timeout = 15000 ) public void commitDuringContinuousCheckpointing() throws Exception diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java index 223e39b5cffa8..0eee1cd9a16bb 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java @@ -43,7 +43,6 @@ import org.neo4j.graphdb.DependencyResolver; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.api.exceptions.EntityNotFoundException; @@ -86,17 +85,9 @@ public class IndexStatisticsTest @Rule public DatabaseRule dbRule = new EmbeddedDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - super.configure( builder ); - // make sure we don't sample in these tests - builder.setConfig( GraphDatabaseSettings.index_background_sampling_enabled, "false" ); - builder.setConfig( GraphDatabaseSettings.multi_threaded_schema_index_population_enabled, + .withSetting( GraphDatabaseSettings.index_background_sampling_enabled, "false" ) + .withSetting( GraphDatabaseSettings.multi_threaded_schema_index_population_enabled, multiThreadedPopulationEnabled + "" ); - } - }; private GraphDatabaseService db; private ThreadToStatementContextBridge bridge; diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresIT.java index 79a1086044aca..e5eff4de1f40e 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresIT.java @@ -28,7 +28,6 @@ import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.helpers.Exceptions; import org.neo4j.test.Race; @@ -42,14 +41,7 @@ public class NeoStoresIT { @ClassRule public static final DatabaseRule db = new EmbeddedDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - super.configure( builder ); - builder.setConfig( GraphDatabaseSettings.dense_node_threshold, "1"); - } - }; + .withSetting( GraphDatabaseSettings.dense_node_threshold, "1"); private static final RelationshipType FRIEND = RelationshipType.withName( "FRIEND" ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipChainPointerChasingTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipChainPointerChasingTest.java index c3caa0f167b52..31584d62e9caf 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipChainPointerChasingTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipChainPointerChasingTest.java @@ -27,7 +27,6 @@ import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.kernel.impl.MyRelTypes; import org.neo4j.test.rule.DatabaseRule; @@ -55,13 +54,7 @@ public class RelationshipChainPointerChasingTest @Rule public final DatabaseRule db = new ImpermanentDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - builder.setConfig( GraphDatabaseSettings.dense_node_threshold, String.valueOf( THRESHOLD ) ); - } - }; + .withSetting( GraphDatabaseSettings.dense_node_threshold, String.valueOf( THRESHOLD ) ); @Test public void shouldChaseTheLivingRelationships() throws Exception diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipGroupStoreIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipGroupStoreIT.java index 6e677fc2b52bc..7ba7f96368f4a 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipGroupStoreIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/RelationshipGroupStoreIT.java @@ -25,7 +25,6 @@ import org.neo4j.graphdb.Node; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine; import org.neo4j.kernel.internal.GraphDatabaseAPI; @@ -42,13 +41,7 @@ public class RelationshipGroupStoreIT @Rule public final DatabaseRule db = new ImpermanentDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - builder.setConfig( GraphDatabaseSettings.dense_node_threshold, "1" ); - } - }; + .withSetting( GraphDatabaseSettings.dense_node_threshold, "1" ); @Test public void shouldCreateAllTheseRelationshipTypes() throws Exception diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/RelationshipCreatorTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/RelationshipCreatorTest.java index 7d831fe10fa67..12cb69f07a12f 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/RelationshipCreatorTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/state/RelationshipCreatorTest.java @@ -29,7 +29,6 @@ import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.kernel.impl.MyRelTypes; import org.neo4j.kernel.impl.locking.NoOpClient; @@ -64,13 +63,7 @@ public class RelationshipCreatorTest private static final int DENSE_NODE_THRESHOLD = 5; @Rule public final DatabaseRule dbRule = new ImpermanentDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - builder.setConfig( GraphDatabaseSettings.dense_node_threshold, String.valueOf( DENSE_NODE_THRESHOLD ) ); - } - }; + .withSetting( GraphDatabaseSettings.dense_node_threshold, String.valueOf( DENSE_NODE_THRESHOLD ) ); private IdGeneratorFactory idGeneratorFactory; @Before diff --git a/community/kernel/src/test/java/org/neo4j/test/ConfigBuilder.java b/community/kernel/src/test/java/org/neo4j/test/ConfigBuilder.java new file mode 100644 index 0000000000000..26c1aa998983b --- /dev/null +++ b/community/kernel/src/test/java/org/neo4j/test/ConfigBuilder.java @@ -0,0 +1,106 @@ +/* + * 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 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.test; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.neo4j.graphdb.config.Setting; + +/** + * Convenience for building config for a test database. + * In particular this is class is useful when parameterizing a test with different configurations. + *

+ * Usage: + *


+ *  import static org.neo4j.test.ConfigBuilder.configure;
+ *
+ * {@literal @}{@link org.junit.runner.RunWith RunWith}({@link org.junit.runners.Parameterized Parameterized.class})
+ *  public class SomeTest
+ *  {
+ *     {@literal @}{@link org.junit.runners.Parameterized.Parameters Parameterized.Parameters}( name = "{0}" )
+ *      public static Iterable<Object[]> configurations()
+ *      {
+ *          return Arrays.asList(
+ *              // First set of configuration
+ *              {@link #configure(Setting, String) configure}( {@link
+ *              org.neo4j.graphdb.factory.GraphDatabaseSettings#query_cache_size
+ *              GraphDatabaseSettings.query_cache_size}, "42" ).{@link #asParameters() asParameters}(),
+ *              // Second set of configuration
+ *              {@link #configure(Setting, String) configure}( {@link
+ *              org.neo4j.graphdb.factory.GraphDatabaseSettings#query_cache_size
+ *              GraphDatabaseSettings.query_cache_size}, "12" )
+ *                   .{@link #and(Setting, String) and}( {@link
+ *                   org.neo4j.graphdb.factory.GraphDatabaseSettings#cypher_min_replan_interval
+ *                   GraphDatabaseSettings.cypher_min_replan_interval}, "5000" ).{@link #asParameters() asParameters}()
+ *          );
+ *      }
+ *
+ *      public final{@literal @}Rule {@link org.neo4j.test.rule.DatabaseRule DatabaseRule} db;
+ *
+ *      public SomeTest( ConfigBuilder config )
+ *      {
+ *          this.db = new {@link org.neo4j.test.rule.ImpermanentDatabaseRule
+ *          ImpermanentDatabaseRule}().{@link org.neo4j.test.rule.DatabaseRule#withConfiguration(Map)
+ *          withConfiguration}( config.{@link #configuration() configuration}() );
+ *      }
+ *  }
+ * 
+ */ +public final class ConfigBuilder +{ + public static ConfigBuilder configure( Setting key, String value ) + { + Map,String> config = new HashMap<>(); + config.put( key, value ); + return new ConfigBuilder( config ); + } + + private final Map,String> config; + + private ConfigBuilder( Map,String> config ) + { + this.config = config; + } + + public Map,String> configuration() + { + return Collections.unmodifiableMap( config ); + } + + public ConfigBuilder and( Setting key, String value ) + { + Map,String> config = new HashMap<>( this.config ); + config.put( key, value ); + return new ConfigBuilder( config ); + } + + public Object[] asParameters() + { + return new Object[] {this}; + } + + @Override + public String toString() + { + return config.toString(); + } +} diff --git a/community/kernel/src/test/java/org/neo4j/test/rule/DatabaseRule.java b/community/kernel/src/test/java/org/neo4j/test/rule/DatabaseRule.java index dceb3b3631a28..7e54c5b6345ef 100644 --- a/community/kernel/src/test/java/org/neo4j/test/rule/DatabaseRule.java +++ b/community/kernel/src/test/java/org/neo4j/test/rule/DatabaseRule.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -67,6 +68,7 @@ public abstract class DatabaseRule extends ExternalResource implements GraphData private String storeDir; private Supplier statementSupplier; private boolean startEagerly = true; + private Map, String> config; /** * Means the database will be started on first {@link #getGraphDatabaseAPI()}} @@ -296,6 +298,13 @@ protected void configure( GraphDatabaseBuilder builder ) // Override to configure the database // Adjusted defaults for testing + if ( config != null ) + { + for ( Map.Entry,String> setting : config.entrySet() ) + { + builder.setConfig( setting.getKey(), setting.getValue() ); + } + } } public GraphDatabaseBuilder setConfig( Setting setting, String value ) @@ -328,6 +337,26 @@ public synchronized void ensureStarted() } } + public DatabaseRule withSetting( Setting key, String value ) + { + if ( this.config == null ) + { + this.config = new HashMap<>(); + } + this.config.put( key, value ); + return this; + } + + public DatabaseRule withConfiguration( Map,String> configuration ) + { + if ( this.config == null ) + { + this.config = new HashMap<>(); + } + this.config.putAll( configuration ); + return this; + } + public interface RestartAction { void run( FileSystemAbstraction fs, File storeDirectory ) throws IOException; diff --git a/community/kernel/src/test/java/org/neo4j/test/rule/concurrent/ThreadingRule.java b/community/kernel/src/test/java/org/neo4j/test/rule/concurrent/ThreadingRule.java index 4a46e07989ba8..a9806c508452e 100644 --- a/community/kernel/src/test/java/org/neo4j/test/rule/concurrent/ThreadingRule.java +++ b/community/kernel/src/test/java/org/neo4j/test/rule/concurrent/ThreadingRule.java @@ -19,9 +19,11 @@ */ package org.neo4j.test.rule.concurrent; -import org.junit.rules.ExternalResource; - +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -30,6 +32,8 @@ import java.util.function.Consumer; import java.util.function.Predicate; +import org.junit.rules.ExternalResource; + import org.neo4j.function.Predicates; import org.neo4j.function.ThrowingFunction; import org.neo4j.helpers.ConcurrentTransfer; @@ -66,27 +70,76 @@ protected void after() public Future execute( ThrowingFunction function, FROM parameter ) { - return executor.submit( task( Barrier.NONE, function, parameter, (t) -> {} ) ); + final Consumer threadConsumer = (t) -> {}; + return executor.submit( task( Barrier.NONE, function, function.toString(), parameter, threadConsumer ) ); + } + + public List> multiple( int threads, ThrowingFunction function, FROM parameter ) + { + List> result = new ArrayList<>( threads ); + for ( int i = 0; i < threads; i++ ) + { + result.add( executor.submit( task( + Barrier.NONE, function, function.toString() + ":task=" + i, parameter, ( t ) -> {} ) ) ); + } + return result; + } + + public static List await( Iterable> futures ) throws InterruptedException, ExecutionException + { + List result = futures instanceof Collection + ? new ArrayList<>( ((Collection) futures).size() ) + : new ArrayList<>(); + List failures = null; + for ( Future future : futures ) + { + try + { + result.add( future.get() ); + } + catch ( ExecutionException e ) + { + if ( failures == null ) + { + failures = new ArrayList<>(); + } + failures.add( e.getCause() ); + } + } + if ( failures != null ) + { + if ( failures.size() == 1 ) + { + throw new ExecutionException( failures.get( 0 ) ); + } + ExecutionException exception = new ExecutionException( null ); + for ( Throwable failure : failures ) + { + exception.addSuppressed( failure ); + } + throw exception; + } + return result; } public Future executeAndAwait( ThrowingFunction function, FROM parameter, Predicate threadCondition, long timeout, TimeUnit unit ) throws TimeoutException, InterruptedException { - ConcurrentTransfer threadTransfer = new ConcurrentTransfer<>(); - Future future = executor.submit( task( Barrier.NONE, function, parameter, threadTransfer ) ); - Predicates.await( threadTransfer, threadCondition, timeout, unit ); + ConcurrentTransfer transfer = new ConcurrentTransfer<>(); + Future future = executor.submit( task( Barrier.NONE, function, function.toString(), parameter, transfer ) ); + Predicates.await( transfer, threadCondition, timeout, unit ); return future; } private static Callable task( - final Barrier barrier, final ThrowingFunction function, final FROM parameter, + final Barrier barrier, final ThrowingFunction function, final String name, final FROM parameter, final Consumer threadConsumer ) { return () -> { Thread thread = Thread.currentThread(); - String name = thread.getName(); - thread.setName( function.toString() ); + String previousName = thread.getName(); + thread.setName( name ); threadConsumer.accept( thread ); barrier.reached(); try @@ -95,7 +148,7 @@ private static Callable task( } finally { - thread.setName( name ); + thread.setName( previousName ); } }; } diff --git a/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/AutoIndexOperationsTest.java b/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/AutoIndexOperationsTest.java index 75d99c6d317bf..54d2d272fd5a1 100644 --- a/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/AutoIndexOperationsTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/AutoIndexOperationsTest.java @@ -26,7 +26,6 @@ import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.index.IndexHits; import org.neo4j.graphdb.index.ReadableRelationshipIndex; @@ -41,15 +40,8 @@ public class AutoIndexOperationsTest { @Rule public final DatabaseRule db = new EmbeddedDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - super.configure( builder ); - builder.setConfig( GraphDatabaseSettings.relationship_keys_indexable, "Type" ); - builder.setConfig( GraphDatabaseSettings.relationship_auto_indexing, "true" ); - } - }; + .withSetting( GraphDatabaseSettings.relationship_keys_indexable, "Type" ) + .withSetting( GraphDatabaseSettings.relationship_auto_indexing, "true" ); @Test public void shouldNotSeeDeletedRelationshipWhenQueryingWithStartAndEndNode() diff --git a/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/IdReuseTest.java b/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/IdReuseTest.java index c6909c030973a..640aa2c5863d4 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/IdReuseTest.java +++ b/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/IdReuseTest.java @@ -31,13 +31,12 @@ import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.ResourceIterator; import org.neo4j.graphdb.Transaction; -import org.neo4j.test.rule.EnterpriseDatabaseRule; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.helpers.collection.Iterators; import org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings; import org.neo4j.kernel.impl.storageengine.impl.recordstorage.id.IdController; import org.neo4j.kernel.impl.store.id.IdType; -import org.neo4j.test.rule.EmbeddedDatabaseRule; +import org.neo4j.test.rule.DatabaseRule; +import org.neo4j.test.rule.EnterpriseDatabaseRule; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertEquals; @@ -47,15 +46,8 @@ public class IdReuseTest { @Rule - public EmbeddedDatabaseRule dbRule = new EnterpriseDatabaseRule() - { - @Override - protected void configure(GraphDatabaseBuilder builder ) - { - super.configure( builder ); - builder.setConfig( EnterpriseEditionSettings.idTypesToReuse, IdType.NODE + "," + IdType.RELATIONSHIP ); - } - }; + public DatabaseRule dbRule = new EnterpriseDatabaseRule() + .withSetting( EnterpriseEditionSettings.idTypesToReuse, IdType.NODE + "," + IdType.RELATIONSHIP ); @Test public void shouldReuseNodeIdsFromRolledBackTransaction() throws Exception diff --git a/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/RelationshipIdReuseStressIT.java b/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/RelationshipIdReuseStressIT.java index 4297eae837450..91ff52e927d82 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/RelationshipIdReuseStressIT.java +++ b/enterprise/kernel/src/test/java/org/neo4j/graphdb/store/id/RelationshipIdReuseStressIT.java @@ -44,31 +44,22 @@ import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.ResourceIterator; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.helpers.collection.Iterables; import org.neo4j.helpers.collection.Iterators; import org.neo4j.kernel.DeadlockDetectedException; import org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings; import org.neo4j.kernel.impl.storageengine.impl.recordstorage.id.IdController; import org.neo4j.kernel.impl.store.id.IdType; -import org.neo4j.test.rule.EmbeddedDatabaseRule; +import org.neo4j.test.rule.DatabaseRule; import org.neo4j.test.rule.EnterpriseDatabaseRule; import static org.junit.Assert.assertThat; public class RelationshipIdReuseStressIT { - @Rule - public EmbeddedDatabaseRule embeddedDatabase = new EnterpriseDatabaseRule() - { - @Override - protected void configure(GraphDatabaseBuilder builder ) - { - super.configure( builder ); - builder.setConfig( EnterpriseEditionSettings.idTypesToReuse, IdType.RELATIONSHIP.name() ); - } - }; + public DatabaseRule embeddedDatabase = new EnterpriseDatabaseRule() + .withSetting( EnterpriseEditionSettings.idTypesToReuse, IdType.RELATIONSHIP.name() ); private ExecutorService executorService = Executors.newCachedThreadPool(); @@ -183,13 +174,13 @@ private TestRelationshipTypes getRandomRelationshipType() return TestRelationshipTypes.values()[ThreadLocalRandom.current().nextInt( TestRelationshipTypes.values().length )]; } - private Node getRandomCityNode( EmbeddedDatabaseRule embeddedDatabase, Label cityLabel ) + private Node getRandomCityNode( DatabaseRule embeddedDatabase, Label cityLabel ) { return embeddedDatabase. findNode( cityLabel, NAME_PROPERTY, "city" + (ThreadLocalRandom.current().nextInt( 1, NUMBER_OF_CITIES + 1 )) ); } - private Node getRandomBandNode( EmbeddedDatabaseRule embeddedDatabase, Label bandLabel ) + private Node getRandomBandNode( DatabaseRule embeddedDatabase, Label bandLabel ) { return embeddedDatabase. findNode( bandLabel, NAME_PROPERTY, "band" + (ThreadLocalRandom.current().nextInt( 1, NUMBER_OF_BANDS + 1 )) ); diff --git a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/enterprise/store/id/NodeIdReuseStressIT.java b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/enterprise/store/id/NodeIdReuseStressIT.java index 821ce026eb8ce..ae1a36f84b8ac 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/enterprise/store/id/NodeIdReuseStressIT.java +++ b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/enterprise/store/id/NodeIdReuseStressIT.java @@ -29,7 +29,6 @@ import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.NotFoundException; import org.neo4j.graphdb.Transaction; -import org.neo4j.graphdb.factory.GraphDatabaseBuilder; import org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings; import org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine; import org.neo4j.kernel.impl.storageengine.impl.recordstorage.id.IdController; @@ -38,7 +37,7 @@ import org.neo4j.kernel.impl.store.id.IdType; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.test.Race; -import org.neo4j.test.rule.EmbeddedDatabaseRule; +import org.neo4j.test.rule.DatabaseRule; import org.neo4j.test.rule.EnterpriseDatabaseRule; import static org.hamcrest.Matchers.equalTo; @@ -53,15 +52,8 @@ public class NodeIdReuseStressIT private static final int OPERATIONS_COUNT = 10_000; @Rule - public EmbeddedDatabaseRule db = new EnterpriseDatabaseRule() - { - @Override - protected void configure( GraphDatabaseBuilder builder ) - { - super.configure( builder ); - builder.setConfig( EnterpriseEditionSettings.idTypesToReuse, IdType.NODE.name() ); - } - }; + public DatabaseRule db = new EnterpriseDatabaseRule() + .withSetting( EnterpriseEditionSettings.idTypesToReuse, IdType.NODE.name() ); @Before public void verifyParams() throws Exception