@Test public void testEmptyGraph() throws Throwable { // Given the database is empty // When Procedures procs = procs(); RawIterator<Object[],ProcedureException> stream = procs.procedureCallRead( procs.procedureGet( procedureName( "db", "schema" ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), contains( equalTo( new Object[]{new ArrayList<>(), new ArrayList<>()} ) ) ); commit(); }
@Test public void testWeirdLabelName() throws Throwable { // Given // Node1: (:`This:is_a:label` {color: "red"}) createNode( Arrays.asList( "`This:is_a:label`" ), Arrays.asList( "color" ), Arrays.asList( Values.stringValue( "red" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( nodeEntry(":``This:is_a:label``", Arrays.asList( "`This:is_a:label`" ), "color", Arrays.asList( "String" ), true) ) ) ); // printStream( stream ); }
@Test public void testNodePropertiesRegardlessOfCreationOrder2() throws Throwable { // Given // Node1: (:B {origin: "Kenya"}) // Node2 (:B {color: "red", size: "M"}) createNode( Arrays.asList( "B" ), Arrays.asList( "origin" ), Arrays.asList( Values.stringValue( "Kenya" ) ) ); createNode( Arrays.asList( "B" ), Arrays.asList( "color", "size" ), Arrays.asList( Values.stringValue( "red" ), Values.stringValue( "M" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "color", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "size", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "origin", Arrays.asList( "String" ), false) ) ) ); // printStream( stream ); }
@Test public void testNodesShouldNotDependOnOrderOfCreationWithOverlap() throws Throwable { // Given // Node1: (:B {type:'B1}) // Node2: (:B {type:'B2', size: 5}) createNode( Arrays.asList( "B" ), Arrays.asList( "type" ), Arrays.asList( Values.stringValue( "B1" ) ) ); createNode( Arrays.asList( "B" ), Arrays.asList( "type", "size" ), Arrays.asList( Values.stringValue( "B2" ), Values.intValue( 5 ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "type", Arrays.asList( "String" ), true) ), equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "size", Arrays.asList( "Integer" ), false) ) ) ); // printStream( stream ); }
@Test public void testNodePropertiesRegardlessOfCreationOrder1() throws Throwable { // Given // Node1: (:A {color: "red", size: "M"}) // Node2: (:A {origin: "Kenya"}) createNode( Arrays.asList( "A" ), Arrays.asList( "color", "size" ), Arrays.asList( Values.stringValue( "red" ), Values.stringValue( "M" ) ) ); createNode( Arrays.asList( "A" ), Arrays.asList( "origin" ), Arrays.asList( Values.stringValue( "Kenya" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( nodeEntry(":`A`", Arrays.asList( "A" ), "color", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`A`", Arrays.asList( "A" ), "size", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`A`", Arrays.asList( "A" ), "origin", Arrays.asList( "String" ), false) ) ) ); // printStream( stream ); }
@Test public void testNodePropertiesRegardlessOfCreationOrder3() throws Throwable { // Given // Node1: (:C {color: "red", size: "M"}) // Node2: (:C {origin: "Kenya", active: true}) createNode( Arrays.asList( "C" ), Arrays.asList( "color", "size" ), Arrays.asList( Values.stringValue( "red" ), Values.stringValue( "M" ) ) ); createNode( Arrays.asList( "C" ), Arrays.asList( "origin", "active" ), Arrays.asList( Values.stringValue( "Kenya" ), Values.booleanValue( true ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( nodeEntry(":`C`", Arrays.asList( "C" ), "color", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`C`", Arrays.asList( "C" ), "size", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`C`", Arrays.asList( "C" ), "origin", Arrays.asList( "String" ), false) ), equalTo( nodeEntry(":`C`", Arrays.asList( "C" ), "active", Arrays.asList( "Boolean" ), false) ) ) ); // printStream( stream ); }
@Test public void testWithSimilarNodes() throws Throwable { // Given // Node1: (:A {prop1:"Test"}) // Node2: (:A {prop1:"Test2"}) createNode( Arrays.asList( "A" ), Arrays.asList( "prop1" ), Arrays.asList( Values.stringValue( "Test" ) ) ); createNode( Arrays.asList( "A" ), Arrays.asList( "prop1" ), Arrays.asList( Values.stringValue( "Test2" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), contains( equalTo( nodeEntry(":`A`", Arrays.asList("A"), "prop1", Arrays.asList( "String" ), true) ) ) ); // printStream( stream ); }
@Test public void testNodesShouldNotDependOnOrderOfCreationWithOverlap2() throws Throwable { // Given // Node1: (:B {type:'B2', size: 5}) // Node2: (:B {type:'B1}) createNode( Arrays.asList( "B" ), Arrays.asList( "type", "size" ), Arrays.asList( Values.stringValue( "B2" ), Values.intValue( 5 ) ) ); createNode( Arrays.asList( "B" ), Arrays.asList( "type" ), Arrays.asList( Values.stringValue( "B1" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( nodesProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "type", Arrays.asList( "String" ), true) ), equalTo( nodeEntry(":`B`", Arrays.asList( "B" ), "size", Arrays.asList( "Integer" ), false) ) ) ); // printStream( stream ); }
@Test public void listAllComponents() throws Throwable { // Given a running database // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( "dbms", "components" ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), contains( equalTo( new Object[]{"Neo4j Kernel", singletonList( Version.getNeo4jVersion() ), "community"} ) ) ); commit(); }
@Test public void testRelsPropertiesRegardlessOfCreationOrder2() throws Throwable { // Given // Node1: (A) // Rel1: (A)-[:R {origin: "Kenya"}]->(A) // Rel2: (A)-[:R {color: "red", size: "M"}]->(A) long emptyNode = createEmptyNode(); createRelationship( emptyNode, "R", emptyNode, Arrays.asList( "origin" ), Arrays.asList( Values.stringValue( "Kenya" ) ) ); createRelationship( emptyNode, "R", emptyNode, Arrays.asList( "color", "size" ), Arrays.asList( Values.stringValue( "red" ), Values.stringValue( "M" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( relsProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( relEntry(":`R`", "color", Arrays.asList( "String" ), false) ), equalTo( relEntry(":`R`", "size", Arrays.asList( "String" ), false) ), equalTo( relEntry(":`R`", "origin", Arrays.asList( "String" ), false) ) ) ); // printStream( stream ); }
@Test public void testSchemaWithRelationshipWithoutProperties() throws Throwable { // Given // Node1: () // Rel1: (node1)-[:R{prop1:"Test", prop2: 12, prop3: true}]->(node1) // Rel2: (node1)-[:R]->(node1) long nodeId1 = createEmptyNode(); createRelationship( nodeId1, "R", nodeId1, Arrays.asList( "prop1", "prop2", "prop3" ), Arrays.asList( Values.stringValue( "Test" ), Values.intValue( 12 ), Values.booleanValue( true ) ) ); createRelationship( nodeId1, "R", nodeId1, Arrays.asList(), Arrays.asList() ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( relsProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( relEntry(":`R`", "prop1", Arrays.asList( "String" ), false) ), equalTo( relEntry(":`R`", "prop2", Arrays.asList( "Integer" ), false) ), equalTo( relEntry(":`R`", "prop3", Arrays.asList( "Boolean" ), false) ) ) ); //printStream( stream ); }
@Test public void testRelsPropertiesRegardlessOfCreationOrder1() throws Throwable { // Given // Node1: (A) // Rel1: (A)-[:R {color: "red", size: "M"}]->(A) // Rel2: (A)-[:R {origin: "Kenya"}]->(A) long emptyNode = createEmptyNode(); createRelationship( emptyNode, "R", emptyNode, Arrays.asList( "color", "size" ), Arrays.asList( Values.stringValue( "red" ), Values.stringValue( "M" ) ) ); createRelationship( emptyNode, "R", emptyNode, Arrays.asList( "origin" ), Arrays.asList( Values.stringValue( "Kenya" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( relsProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( relEntry(":`R`", "color", Arrays.asList( "String" ), false) ), equalTo( relEntry(":`R`", "size", Arrays.asList( "String" ), false) ), equalTo( relEntry(":`R`", "origin", Arrays.asList( "String" ), false) ) ) ); // printStream( stream ); }
@Test public void testRelsShouldNotDependOnOrderOfCreationWithOverlap() throws Throwable { // Given // Node1: (n) // Rel1: (n)-[:B {type:'B1}]->(n) // Rel2: (n)-[:B {type:'B2', size: 5}]->(n) long nodeId1 = createEmptyNode(); createRelationship( nodeId1, "B", nodeId1, Arrays.asList( "type" ), Arrays.asList( Values.stringValue( "B1" ) ) ); createRelationship( nodeId1, "B", nodeId1, Arrays.asList( "type", "size" ), Arrays.asList( Values.stringValue( "B1" ), Values.intValue( 5 ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( relsProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( relEntry(":`B`", "type", Arrays.asList( "String" ), true) ), equalTo( relEntry(":`B`", "size", Arrays.asList( "Integer" ), false) ) ) ); // printStream( stream ); }
@Test public void testRelsShouldNotDependOnOrderOfCreationWithOverlap2() throws Throwable { // Given // Node1: (n) // Rel1: (n)-[:B {type:'B2', size: 5}]->(n) // Rel2: (n)-[:B {type:'B1}]->(n) long nodeId1 = createEmptyNode(); createRelationship( nodeId1, "B", nodeId1, Arrays.asList( "type", "size" ), Arrays.asList( Values.stringValue( "B1" ), Values.intValue( 5 ) ) ); createRelationship( nodeId1, "B", nodeId1, Arrays.asList( "type" ), Arrays.asList( Values.stringValue( "B1" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( relsProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( relEntry(":`B`", "type", Arrays.asList( "String" ), true) ), equalTo( relEntry(":`B`", "size", Arrays.asList( "Integer" ), false) ) ) ); // printStream( stream ); }
@Test public void testWithSimilarRelationships() throws Throwable { // Given // Node1: () // Rel1: (node1)-[:R{prop1:"Test"}]->(node1) // Rel2: (node1)-[:R{prop1:"Test2"}]->(node1) long nodeId1 = createEmptyNode(); createRelationship( nodeId1, "R", nodeId1, Arrays.asList( "prop1" ), Arrays.asList( Values.stringValue( "Test" ) ) ); createRelationship( nodeId1, "R", nodeId1, Arrays.asList( "prop1" ), Arrays.asList( Values.stringValue( "Test2" ) ) ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( relsProcedureName ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), containsInAnyOrder( equalTo( relEntry(":`R`", "prop1", Arrays.asList( "String" ), true ) ) ) ); //printStream( stream ); }
@Test public void listPropertyKeys() throws Throwable { // Given TokenWrite ops = tokenWriteInNewTransaction(); ops.propertyKeyGetOrCreateForName( "MyProp" ); commit(); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( "db", "propertyKeys" ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), contains( equalTo( new Object[]{"MyProp"} ) ) ); }
@Test public void shouldCallReadOnlyProcedure() throws Throwable { // Given internalKernel().registerProcedure( procedure ); // When RawIterator<Object[],ProcedureException> found = procs() .procedureCallRead( procs().procedureGet( new QualifiedName( new String[]{"example"}, "exampleProc" ) ).id(), new Object[]{1337} ); // Then assertThat( asList( found ), contains( equalTo( new Object[]{1337} ) ) ); commit(); }
@Test public void listAllLabels() throws Throwable { // Given Transaction transaction = newTransaction( AnonymousContext.writeToken() ); long nodeId = transaction.dataWrite().nodeCreate(); int labelId = transaction.tokenWrite().labelGetOrCreateForName( "MyLabel" ); transaction.dataWrite().nodeAddLabel( nodeId, labelId ); commit(); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( "db", "labels" ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), contains( equalTo( new Object[]{"MyLabel"} ) ) ); }
@Test public void listRelationshipTypes() throws Throwable { // Given Transaction transaction = newTransaction( AnonymousContext.writeToken() ); int relType = transaction.tokenWrite().relationshipTypeGetOrCreateForName( "MyRelType" ); long startNodeId = transaction.dataWrite().nodeCreate(); long endNodeId = transaction.dataWrite().nodeCreate(); transaction.dataWrite().relationshipCreate( startNodeId, relType, endNodeId ); commit(); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( procedureName( "db", "relationshipTypes" ) ).id(), new Object[0] ); // Then assertThat( asList( stream ), contains( equalTo( new Object[]{"MyRelType"} ) ) ); }
@Test public void registeredProcedureShouldGetRead() throws Throwable { // Given internalKernel().registerProcedure( new CallableProcedure.BasicProcedure( signature ) { @Override public RawIterator<Object[],ProcedureException> apply( Context ctx, Object[] input, ResourceTracker resourceTracker ) throws ProcedureException { return RawIterator.<Object[],ProcedureException>of( new Object[]{ctx.get( Context.KERNEL_TRANSACTION ).dataRead()} ); } } ); // When RawIterator<Object[],ProcedureException> stream = procs().procedureCallRead( procs().procedureGet( signature.name() ).id(), new Object[]{""} ); // Then assertNotNull( asList( stream ).get( 0 )[0] ); commit(); }