package org.neo4j.kernel.impl.core; import static org.junit.Assert.fail; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.NotFoundException; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.Transaction; import org.neo4j.kernel.EmbeddedGraphDatabase; import org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase; public class TestExceptionTypeOnInvalidIds { private static final long SMALL_POSSITIVE_INTEGER = 5; private static final long SMALL_NEGATIVE_INTEGER = -5; private static final long BIG_POSSITIVE_INTEGER = Integer.MAX_VALUE; private static final long BIG_NEGATIVE_INTEGER = Integer.MIN_VALUE; private static final long SMALL_POSSITIVE_LONG = ( (long) Integer.MAX_VALUE ) + 1; private static final long SMALL_NEGATIVE_LONG = -( (long) Integer.MIN_VALUE ) - 1; private static final long BIG_POSSITIVE_LONG = Long.MAX_VALUE; private static final long BIG_NEGATIVE_LONG = Long.MIN_VALUE; private static GraphDatabaseService graphdb; private static GraphDatabaseService graphDbReadOnly; private Transaction tx; @BeforeClass public static void createDatabase() { graphdb = new EmbeddedGraphDatabase( "target/var/id_test" ); graphDbReadOnly = new EmbeddedReadOnlyGraphDatabase( "target/var/id_test" ); } @AfterClass public static void destroyDatabase() { graphDbReadOnly.shutdown(); graphDbReadOnly = null; graphdb.shutdown(); graphdb = null; } @Before public void startTransaction() { tx = graphdb.beginTx(); } @After public void endTransaction() { tx.finish(); tx = null; } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getNodeBySmallPossitiveInteger() throws Exception { getNodeById( SMALL_POSSITIVE_INTEGER ); getNodeByIdReadOnly( SMALL_POSSITIVE_INTEGER ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getNodeBySmallNegativeInteger() throws Exception { getNodeById( SMALL_NEGATIVE_INTEGER ); getNodeByIdReadOnly( SMALL_NEGATIVE_INTEGER ); } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getNodeByBigPossitiveInteger() throws Exception { getNodeById( BIG_POSSITIVE_INTEGER ); getNodeByIdReadOnly( BIG_POSSITIVE_INTEGER ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getNodeByBigNegativeInteger() throws Exception { getNodeById( BIG_NEGATIVE_INTEGER ); getNodeByIdReadOnly( BIG_NEGATIVE_INTEGER ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getNodeBySmallPossitiveLong() throws Exception { getNodeById( SMALL_POSSITIVE_LONG ); getNodeByIdReadOnly( SMALL_POSSITIVE_LONG ); } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getNodeBySmallNegativeLong() throws Exception { getNodeById( SMALL_NEGATIVE_LONG ); getNodeByIdReadOnly( SMALL_NEGATIVE_LONG ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getNodeByBigPossitiveLong() throws Exception { getNodeById( BIG_POSSITIVE_LONG ); getNodeByIdReadOnly( BIG_POSSITIVE_LONG ); } /* finds the node with id=0, since that what the id truncates to */ @Test( expected = NotFoundException.class ) public void getNodeByBigNegativeLong() throws Exception { getNodeById( BIG_NEGATIVE_LONG ); getNodeByIdReadOnly( BIG_NEGATIVE_LONG ); } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getRelationshipBySmallPossitiveInteger() throws Exception { getRelationshipById( SMALL_POSSITIVE_INTEGER ); getRelationshipByIdReadOnly( SMALL_POSSITIVE_INTEGER ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getRelationshipBySmallNegativeInteger() throws Exception { getRelationshipById( SMALL_NEGATIVE_INTEGER ); getRelationshipByIdReadOnly( SMALL_POSSITIVE_INTEGER ); } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getRelationshipByBigPossitiveInteger() throws Exception { getRelationshipById( BIG_POSSITIVE_INTEGER ); getRelationshipByIdReadOnly( BIG_POSSITIVE_INTEGER ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getRelationshipByBigNegativeInteger() throws Exception { getRelationshipById( BIG_NEGATIVE_INTEGER ); getRelationshipByIdReadOnly( BIG_NEGATIVE_INTEGER ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getRelationshipBySmallPossitiveLong() throws Exception { getRelationshipById( SMALL_POSSITIVE_LONG ); getRelationshipByIdReadOnly( SMALL_POSSITIVE_LONG ); } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getRelationshipBySmallNegativeLong() throws Exception { getRelationshipById( SMALL_NEGATIVE_LONG ); getRelationshipByIdReadOnly( SMALL_NEGATIVE_LONG ); } /* throws IllegalArgumentException instead of NotFoundException */ @Test( expected = NotFoundException.class ) public void getRelationshipByBigPossitiveLong() throws Exception { getRelationshipById( BIG_POSSITIVE_LONG ); getRelationshipByIdReadOnly( BIG_POSSITIVE_LONG ); } /* behaves as expected */ @Test( expected = NotFoundException.class ) public void getRelationshipByBigNegativeLong() throws Exception { getRelationshipById( BIG_NEGATIVE_LONG ); getRelationshipByIdReadOnly( BIG_NEGATIVE_LONG ); } private void getNodeById( long index ) { Node value = graphdb.getNodeById( index ); fail( String.format( "Returned Node [0x%x] for index 0x%x (int value: 0x%x)", value.getId(), index, (int) index ) ); } private void getNodeByIdReadOnly( long index ) { Node value = graphDbReadOnly.getNodeById( index ); fail( String.format( "Returned Node [0x%x] for index 0x%x (int value: 0x%x)", value.getId(), index, (int) index ) ); } private void getRelationshipById( long index ) { Relationship value = graphdb.getRelationshipById( index ); fail( String.format( "Returned Relationship [0x%x] for index 0x%x (int value: 0x%x)", value.getId(), index, (int) index ) ); } private void getRelationshipByIdReadOnly( long index ) { Relationship value = graphDbReadOnly.getRelationshipById( index ); fail( String.format( "Returned Relationship [0x%x] for index 0x%x (int value: 0x%x)", value.getId(), index, (int) index ) ); } }