@Test public void shouldLoadProcedureFromJarWithSpacesInFilename() throws Throwable { // Given URL jar = new JarBuilder().createJarFor( tmpdir.newFile( new Random().nextInt() + " some spaces in filename.jar" ), ClassWithOneProcedure.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" ).out( "someNumber", NTInteger ).build() ) ); assertThat( asList( procedures.get( 0 ).apply( new BasicContext(), new Object[0], resourceTracker ) ), contains( IsEqual.equalTo( new Object[]{1337L} ) ) ); }
@Test public void shouldLoadProcedureFromJar() throws Throwable { // Given URL jar = createJarFor( ClassWithOneProcedure.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" ).out( "someNumber", NTInteger ).build() )); assertThat( asList( procedures.get( 0 ).apply( new BasicContext(), new Object[0], resourceTracker ) ), contains( IsEqual.equalTo( new Object[]{1337L} )) ); }
@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} )) ); }
public ClusterOverviewProcedure( TopologyService topologyService, LogProvider logProvider ) { super( procedureSignature( new QualifiedName( PROCEDURE_NAMESPACE, PROCEDURE_NAME ) ) .out( "id", Neo4jTypes.NTString ) .out( "addresses", Neo4jTypes.NTList( Neo4jTypes.NTString ) ) .out( "role", Neo4jTypes.NTString ) .out( "groups", Neo4jTypes.NTList( Neo4jTypes.NTString ) ) .out( "database", Neo4jTypes.NTString ) .description( "Overview of all currently accessible cluster members and their roles." ) .build() ); this.topologyService = topologyService; this.log = logProvider.getLog( getClass() ); }
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; }
RoleProcedure() { super( procedureSignature( new QualifiedName( PROCEDURE_NAMESPACE, PROCEDURE_NAME ) ) .out( OUTPUT_NAME, Neo4jTypes.NTString ) .description( "The role of a specific instance in the cluster." ) .build() ); }
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 shouldGetAllProcedures() throws Throwable { // Given internalKernel().registerProcedure( procedure ); internalKernel().registerProcedure( procedure( procedureSignature( "example", "exampleProc2" ).out( "name", NTString ).build() ) ); internalKernel().registerProcedure( procedure( procedureSignature( "example", "exampleProc3" ).out( "name", NTString ).build() ) ); // When List<ProcedureSignature> signatures = Iterables.asList( newTransaction().procedures().proceduresGetAll() ); // Then assertThat( signatures, hasItems( procedure.signature(), procedureSignature( "example", "exampleProc2" ).out( "name", NTString ).build(), procedureSignature( "example", "exampleProc3" ).out( "name", NTString ).build() ) ); commit(); }
@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 shouldLoadProceduresFromDirectory() throws Throwable { // Given createJarFor( ClassWithOneProcedure.class ); createJarFor( ClassWithAnotherProcedure.class ); // When List<CallableProcedure> procedures = jarloader.loadProceduresFromDir( tmpdir.getRoot() ).procedures(); // Then List<ProcedureSignature> signatures = procedures.stream().map( CallableProcedure::signature ).collect( toList() ); assertThat( signatures, containsInAnyOrder( procedureSignature( "org","neo4j", "kernel", "impl", "proc", "myOtherProcedure" ).out( "someNumber", NTInteger ).build(), procedureSignature( "org","neo4j", "kernel", "impl", "proc", "myProcedure" ).out( "someNumber", NTInteger ).build() )); }
public ListComponentsProcedure( QualifiedName name, String neo4jVersion, String neo4jEdition ) { super( procedureSignature( name ) .out( "name", NTString ) // Since Bolt, Cypher and other components support multiple versions // at the same time, list of versions rather than single version. .out( "versions", NTList( NTString ) ) .out( "edition", NTString ) .mode( Mode.DBMS ) .description( "List DBMS components and their versions." ) .build() ); this.neo4jVersion = neo4jVersion; this.neo4jEdition = neo4jEdition; }
@Test public void shouldGetAllRegisteredProcedures() throws Throwable { // When procs.register( procedure( procedureSignature( "org", "myproc1" ).out( "age", NTInteger ).build() ) ); procs.register( procedure( procedureSignature( "org", "myproc2" ).out( "age", NTInteger ).build() ) ); procs.register( procedure( procedureSignature( "org", "myproc3" ).out( "age", NTInteger ).build() ) ); // Then List<ProcedureSignature> signatures = Iterables.asList( procs.getAllProcedures() ); assertThat( signatures, containsInAnyOrder( procedureSignature( "org", "myproc1" ).out( "age", NTInteger ).build(), procedureSignature( "org", "myproc2" ).out( "age", NTInteger ).build(), procedureSignature( "org", "myproc3" ).out( "age", NTInteger ).build() ) ); }
@Test public void shouldLoadProcedureFromJarWithMultipleProcedureClasses() throws Throwable { // Given URL jar = createJarFor( ClassWithOneProcedure.class, ClassWithAnotherProcedure.class, ClassWithNoProcedureAtAll.class ); // When List<CallableProcedure> procedures = jarloader.loadProceduresFromDir( parentDir( jar ) ).procedures(); // Then List<ProcedureSignature> signatures = procedures.stream().map( CallableProcedure::signature ).collect( toList() ); assertThat( signatures, containsInAnyOrder( procedureSignature( "org","neo4j", "kernel", "impl", "proc", "myOtherProcedure" ).out( "someNumber", NTInteger ).build(), procedureSignature( "org","neo4j", "kernel", "impl", "proc", "myProcedure" ).out( "someNumber", NTInteger ).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 shouldCompileProcedure() throws Throwable { // When List<CallableProcedure> procedures = compile( SingleReadOnlyProcedure.class ); // Then assertEquals( 1, procedures.size() ); assertThat( procedures.get( 0 ).signature(), Matchers.equalTo( procedureSignature( "org", "neo4j", "kernel", "impl", "proc", "listCoolPeople" ) .out( "name", Neo4jTypes.NTString ) .build() ) ); }
@Test public void shouldNotAllowDuplicateFieldNamesInOutput() throws Throwable { // Expect exception.expect( ProcedureException.class ); exception.expectMessage( "Procedure `asd() :: (a :: ANY?, a :: ANY?)` cannot be registered, " + "because it contains a duplicated output field, 'a'. " + "You need to rename or remove one of the duplicate fields." ); // When procs.register( procedureWithSignature( procedureSignature( "asd" ).out( "a", NTAny ).out( "a", NTAny ).build() ) ); }
@Test public void shouldGetBuiltInProcedureByName() throws Throwable { // When ProcedureSignature found = procs() .procedureGet( procedureName( "db", "labels" ) ).signature(); // Then assertThat( found, equalTo( procedureSignature( procedureName( "db", "labels" ) ) .out( "label", NTString ).build() ) ); commit(); }
@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() ) ); }
@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 ); }