@Test public void shouldLoadProcedureWithArgumentFromJar() throws Throwable { // Given URL jar = createJarFor( ClassWithProcedureWithArgument.class ); // When List<CallableProcedure> procedures = jarloader.loadProceduresFromDir( parentDir( jar ) ).procedures(); // Then List<ProcedureSignature> signatures = procedures.stream().map( CallableProcedure::signature ).collect( toList() ); assertThat( signatures, contains( procedureSignature( "org","neo4j", "kernel", "impl", "proc", "myProcedure" ) .in( "value", NTInteger ) .out( "someNumber", NTInteger ) .build() )); assertThat( asList(procedures.get( 0 ).apply( new BasicContext(), new Object[]{42L}, resourceTracker ) ), contains( IsEqual.equalTo( new Object[]{42L} )) ); }
@Test public void shouldCompileSimpleProcedure() throws Throwable { // When List<CallableProcedure> procedures = compile( ClassWithProcedureWithSimpleArgs.class ); // Then assertEquals( 1, procedures.size() ); assertThat( procedures.get( 0 ).signature(), equalTo( procedureSignature( "org", "neo4j", "kernel", "impl", "proc", "listCoolPeople" ) .in( "name", Neo4jTypes.NTString ) .in( "age", Neo4jTypes.NTInteger ) .out( "name", Neo4jTypes.NTString ) .build() ) ); }
public JmxQueryProcedure( QualifiedName name, MBeanServer jmxServer ) { super( procedureSignature( name ) .in( "query", Neo4jTypes.NTString ) .out( "name", Neo4jTypes.NTString ) .out( "description", Neo4jTypes.NTString ) .out( "attributes", Neo4jTypes.NTMap ) .mode( Mode.DBMS ) .description( "Query JMX management data by domain and name. For instance, \"org.neo4j:*\"" ) .build() ); this.jmxServer = jmxServer; }
private static void installSleepProcedure( GraphDatabaseService db ) throws ProcedureException { GraphDatabaseAPI dbApi = (GraphDatabaseAPI) db; dbApi.getDependencyResolver().resolveDependency( Procedures.class ).register( new CallableProcedure.BasicProcedure( procedureSignature( "boltissue", "sleep" ) .in( "data", Neo4jTypes.NTString ) .out( ProcedureSignature.VOID ) .build() ) { @Override public RawIterator<Object[],ProcedureException> apply( Context context, Object[] objects, ResourceTracker resourceTracker ) throws ProcedureException { try { Thread.sleep( 50 ); } catch ( InterruptedException e ) { throw new ProcedureException( Status.General.UnknownError, e, "Interrupted" ); } return RawIterator.empty(); } } ); }
@Test public void toStringForVoidProcedureShouldMatchCypherSyntax() { // Given ProcedureSignature proc = procedureSignature( "org", "myProcedure" ) .in( "inputArg", Neo4jTypes.NTList( Neo4jTypes.NTString ) ) .out( ProcedureSignature.VOID ) .build(); // When String toStr = proc.toString(); // Then assertEquals( "org.myProcedure(inputArg :: LIST? OF STRING?) :: VOID", toStr ); } }
@Test public void shouldNotAllowDuplicateFieldNamesInInput() throws Throwable { // Expect exception.expect( ProcedureException.class ); exception.expectMessage( "Procedure `asd(a :: ANY?, a :: ANY?) :: ()` cannot be " + "registered, because it contains a duplicated input field, 'a'. " + "You need to rename or remove one of the duplicate fields." ); // When procs.register( procedureWithSignature( procedureSignature( "asd" ).in( "a", NTAny ).in( "a", NTAny ).build() ) ); }
@Test public void toStringShouldMatchCypherSyntax() { // When String toStr = procedureSignature( "org", "myProcedure" ) .in( "inputArg", Neo4jTypes.NTList( Neo4jTypes.NTString ) ) .out( "outputArg", Neo4jTypes.NTNumber ) .build() .toString(); // Then assertEquals( "org.myProcedure(inputArg :: LIST? OF STRING?) :: (outputArg :: NUMBER?)", toStr ); }
public JmxQueryProcedure( QualifiedName name, MBeanServer jmxServer ) { super( procedureSignature( name ) .in( "query", Neo4jTypes.NTString ) .out( "name", Neo4jTypes.NTString ) .out( "description", Neo4jTypes.NTString ) .out( "attributes", Neo4jTypes.NTMap ) .mode( Mode.DBMS ) .description( "Query JMX management data by domain and name. For instance, \"org.neo4j:*\"" ) .build() ); this.jmxServer = jmxServer; }
@Test public void shouldHonorVoidInEquals() { ProcedureSignature sig1 = procedureSignature( "foo" ).in( "a", Neo4jTypes.NTAny ).build(); ProcedureSignature sig2 = procedureSignature( "foo" ).in( "a", Neo4jTypes.NTAny ).out( ProcedureSignature.VOID ).build(); ProcedureSignature sig2clone = procedureSignature( "foo" ).in( "a", Neo4jTypes.NTAny ).out( ProcedureSignature.VOID ).build(); assertEquals( sig2, sig2clone ); assertNotEquals( sig1, sig2 ); }