From 0abbe45a923ec6bd79dbb3dc6a8dae3b53ea0861 Mon Sep 17 00:00:00 2001 From: Craig Taverner Date: Thu, 16 Mar 2017 17:27:38 +0100 Subject: [PATCH] Enforce node-key startup semantics --- .../StartupConstraintSemanticsTest.java | 52 ++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/enterprise/kernel/src/test/java/org/neo4j/graphdb/StartupConstraintSemanticsTest.java b/enterprise/kernel/src/test/java/org/neo4j/graphdb/StartupConstraintSemanticsTest.java index 8a61d5ae4eb5f..115ab14f54542 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/graphdb/StartupConstraintSemanticsTest.java +++ b/enterprise/kernel/src/test/java/org/neo4j/graphdb/StartupConstraintSemanticsTest.java @@ -40,12 +40,60 @@ public class StartupConstraintSemanticsTest @Test public void shouldNotAllowOpeningADatabaseWithPECInCommunityEdition() throws Exception + { + assertThatCommunityCannotStartOnEnterpriseOnlyConstraint( "CREATE CONSTRAINT ON (n:Draconian) ASSERT exists(n.required)", + StandardConstraintSemantics.ERROR_MESSAGE_EXISTS ); + } + + @Test + public void shouldNotAllowOpeningADatabaseWithNodeKeyInCommunityEdition() throws Exception + { + assertThatCommunityCannotStartOnEnterpriseOnlyConstraint( "CREATE CONSTRAINT ON (n:Draconian) ASSERT (n.required) IS NODE KEY", + StandardConstraintSemantics.ERROR_MESSAGE_NODE_KEY ); + } + + @Test + public void shouldAllowOpeningADatabaseWithUniqueConstraintInCommunityEdition() throws Exception + { + assertThatCommunityCanStartOnNormalConstraint( "CREATE CONSTRAINT ON (n:Draconian) ASSERT (n.required) IS UNIQUE" ); + } + + private void assertThatCommunityCanStartOnNormalConstraint( String constraintCreationQuery ) + { + // given + GraphDatabaseService graphDb = new EnterpriseGraphDatabaseFactory().newEmbeddedDatabase( dir.graphDbDir() ); + try + { + graphDb.execute( constraintCreationQuery ); + } + finally + { + graphDb.shutdown(); + } + graphDb = null; + + // when + try + { + graphDb = new TestGraphDatabaseFactory().newEmbeddedDatabase( dir.graphDbDir() ); + // Should not get exception + } + finally + { + if ( graphDb != null ) + { + graphDb.shutdown(); + } + } + } + + private void assertThatCommunityCannotStartOnEnterpriseOnlyConstraint( String constraintCreationQuery, String errorMessage ) { // given GraphDatabaseService graphDb = new EnterpriseGraphDatabaseFactory().newEmbeddedDatabase( dir.graphDbDir() ); try { - graphDb.execute( "CREATE CONSTRAINT ON (n:Draconian) ASSERT exists(n.required)" ); + graphDb.execute( constraintCreationQuery ); } finally { @@ -64,7 +112,7 @@ public void shouldNotAllowOpeningADatabaseWithPECInCommunityEdition() throws Exc { Throwable error = Exceptions.rootCause( e ); assertThat( error, instanceOf( IllegalStateException.class ) ); - assertEquals( StandardConstraintSemantics.ERROR_MESSAGE_EXISTS, error.getMessage() ); + assertEquals( errorMessage, error.getMessage() ); } finally {