Package org.apache.tinkerpop.gremlin
Class GraphManager.ManagedGraphProvider
- java.lang.Object
-
- org.apache.tinkerpop.gremlin.GraphManager.ManagedGraphProvider
-
- All Implemented Interfaces:
AutoCloseable
,GraphProvider
- Enclosing class:
- GraphManager
public static class GraphManager.ManagedGraphProvider extends Object implements GraphProvider, AutoCloseable
This class provides a way to intercepts calls toGraph
implementation'sGraphProvider
instances. WhenopenTestGraph(Configuration)
is called the created object is stored in a list and when tests are complete thetryClearGraphs()
is called. When this is called, an attempt is made to close all open graphs.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.tinkerpop.gremlin.GraphProvider
GraphProvider.Descriptor, GraphProvider.TestListener
-
-
Field Summary
-
Fields inherited from interface org.apache.tinkerpop.gremlin.GraphProvider
CORE_IMPLEMENTATIONS
-
-
Constructor Summary
Constructors Constructor Description ManagedGraphProvider(GraphProvider innerGraphProvider)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear(org.apache.commons.configuration2.Configuration configuration)
If possible (usually with persisted graph) clear the space on disk given the configuration that would be used to construct the graph.void
clear(Graph graph, org.apache.commons.configuration2.Configuration configuration)
Clears aGraph
of all data and settings.void
close()
Object
convertId(Object id, Class<? extends Element> c)
Converts an identifier from a test to an identifier accepted by theGraph
instance.String
convertLabel(String label)
Converts an label from a test to an label accepted by the Graph instance.GraphComputer
getGraphComputer(Graph graph)
Create aGraphComputer
from theGraph
instance.Set<Class>
getImplementations()
Get the set of concrete implementations of certain classes and interfaces utilized by the test suite.Optional<Graph.Features>
getStaticFeatures()
Gets aGraph.Features
implementation that contains graph feature configuration that will never change from execution to execution of the tests given this currentGraphProvider
implementation.Optional<GraphProvider.TestListener>
getTestListener()
Returns aGraphProvider.TestListener
implementation that provides feedback to theGraphProvider
implementation.String
getWorkingDirectory()
Helper method for those buildGraphProvider
implementations that need a standard working directory for tests (e.g.void
loadGraphData(Graph graph, LoadGraphWith loadGraphWith, Class testClass, String testName)
Tests are annotated with aLoadGraphWith
annotation.org.apache.commons.configuration2.Configuration
newGraphConfiguration(String graphName, Class<?> test, String testMethodName, Map<String,Object> configurationOverrides, LoadGraphWith.GraphData loadGraphWith)
When implementing this method ensure that a test suite can override any settings EXCEPT the "gremlin.graph" setting which should be defined by the implementer.org.apache.commons.configuration2.Configuration
newGraphConfiguration(String graphName, Class<?> test, String testMethodName, LoadGraphWith.GraphData loadGraphWith)
When implementing this method ensure that a test suite can override any settings EXCEPT the "gremlin.graph" setting which should be defined by the implementer.Graph
openTestGraph(org.apache.commons.configuration2.Configuration config)
org.apache.commons.configuration2.Configuration
standardGraphConfiguration(Class<?> test, String testMethodName, LoadGraphWith.GraphData loadGraphWith)
Graph
standardTestGraph(Class<?> test, String testMethodName, LoadGraphWith.GraphData loadGraphWith)
Creates a newGraph
instance using the defaultConfiguration
fromGraphProvider.standardGraphConfiguration(Class, String, LoadGraphWith.GraphData)
.GraphTraversalSource
traversal(Graph graph)
Create aGraphTraversalSource
from aGraph
instance.GraphTraversalSource
traversal(Graph graph, TraversalStrategy... strategies)
Create aGraphTraversalSource
from aGraph
instance.void
tryClearGraphs()
-
-
-
Constructor Detail
-
ManagedGraphProvider
public ManagedGraphProvider(GraphProvider innerGraphProvider)
-
-
Method Detail
-
tryClearGraphs
public void tryClearGraphs()
-
getWorkingDirectory
public String getWorkingDirectory()
Description copied from interface:GraphProvider
Helper method for those buildGraphProvider
implementations that need a standard working directory for tests (e.g. graphs that persist data to disk). Typically, there is no need to override the default behavior of this method and if it is overridden, it is usually best to continue to use theTestHelper
to produce the working directory as it will create the path in the appropriate build directories.- Specified by:
getWorkingDirectory
in interfaceGraphProvider
- Returns:
- UNIX-formatted absolute directory path
-
traversal
public GraphTraversalSource traversal(Graph graph)
Description copied from interface:GraphProvider
Create aGraphTraversalSource
from aGraph
instance. The default implementation does not useGraphComputer
so providers should override as necessary if their implementation is testing something that requires a different engine type, likeGraphComputer
.- Specified by:
traversal
in interfaceGraphProvider
-
traversal
public GraphTraversalSource traversal(Graph graph, TraversalStrategy... strategies)
Description copied from interface:GraphProvider
Create aGraphTraversalSource
from aGraph
instance. The default implementation does not useGraphComputer
so providers should override as necessary if their implementation is testing something that requires a different engine type, likeGraphComputer
. Implementations should apply strategies as necessary to theGraphTraversalSource
before calling it'screate
method.- Specified by:
traversal
in interfaceGraphProvider
-
getGraphComputer
public GraphComputer getGraphComputer(Graph graph)
Description copied from interface:GraphProvider
Create aGraphComputer
from theGraph
instance. The default implementation simply callsgraph.compute()
.- Specified by:
getGraphComputer
in interfaceGraphProvider
- Parameters:
graph
- the graph to get the graph computer from- Returns:
- a new graph computer
-
standardTestGraph
public Graph standardTestGraph(Class<?> test, String testMethodName, LoadGraphWith.GraphData loadGraphWith)
Description copied from interface:GraphProvider
Creates a newGraph
instance using the defaultConfiguration
fromGraphProvider.standardGraphConfiguration(Class, String, LoadGraphWith.GraphData)
.- Specified by:
standardTestGraph
in interfaceGraphProvider
-
openTestGraph
public Graph openTestGraph(org.apache.commons.configuration2.Configuration config)
Description copied from interface:GraphProvider
Creates a newGraph
instance from theConfiguration
object usingGraphFactory
. The assumption here is that theConfiguration
has been created by one of theGraphProvider.newGraphConfiguration(String, Class, String, LoadGraphWith.GraphData)
methods and has therefore already been modified by the implementation as necessary forGraph
creation.- Specified by:
openTestGraph
in interfaceGraphProvider
-
standardGraphConfiguration
public org.apache.commons.configuration2.Configuration standardGraphConfiguration(Class<?> test, String testMethodName, LoadGraphWith.GraphData loadGraphWith)
Description copied from interface:GraphProvider
Gets theConfiguration
object that can construct aGraph
instance fromGraphFactory
. Note that this method should create aGraph
using thegraphName
of "standard", meaning it should always return a configuration instance that generates the sameGraph
from theGraphFactory
.- Specified by:
standardGraphConfiguration
in interfaceGraphProvider
-
clear
public void clear(org.apache.commons.configuration2.Configuration configuration) throws Exception
Description copied from interface:GraphProvider
If possible (usually with persisted graph) clear the space on disk given the configuration that would be used to construct the graph. The default implementation simply callsGraphProvider.clear(Graph, Configuration)
with a null graph argument. Implementations should be able to accept an argument of null for theConfiguration
as well, and a proper handling is needed. Otherwise, a NullPointerException may be thrown.- Specified by:
clear
in interfaceGraphProvider
- Throws:
Exception
-
clear
public void clear(Graph graph, org.apache.commons.configuration2.Configuration configuration) throws Exception
Description copied from interface:GraphProvider
Clears aGraph
of all data and settings. Implementations will have different ways of handling this. It is typically expected thatGraph.close()
will be called and open transactions will be closed. For a brute force approach, implementers can simply delete data directories provided in the configuration. Implementers may choose a more elegant approach if it exists. Implementations should be able to accept an argument of null for theGraph
, in which case the only action that can be performed is a clear given the configuration. The method will typically be called this way as clean up task on setup to ensure that a persisted graph has a clear space to create a test graph. Implementations should be able to accept an argument of null for theConfiguration
as well, and a proper handling is needed. Otherwise, a NullPointerException may be thrown. Calls to this method may occur multiple times for a specific test. Develop this method to be idempotent.- Specified by:
clear
in interfaceGraphProvider
- Throws:
Exception
-
convertId
public Object convertId(Object id, Class<? extends Element> c)
Description copied from interface:GraphProvider
Converts an identifier from a test to an identifier accepted by theGraph
instance. Test that try to utilize an Element identifier will pass it to this method before usage. This method should be sure to be consistent in the return value such that calling it with "x" should always return the same transformed value.- Specified by:
convertId
in interfaceGraphProvider
-
convertLabel
public String convertLabel(String label)
Description copied from interface:GraphProvider
Converts an label from a test to an label accepted by the Graph instance. Test that try to utilize a label will pass it to this method before usage.- Specified by:
convertLabel
in interfaceGraphProvider
-
newGraphConfiguration
public org.apache.commons.configuration2.Configuration newGraphConfiguration(String graphName, Class<?> test, String testMethodName, Map<String,Object> configurationOverrides, LoadGraphWith.GraphData loadGraphWith)
Description copied from interface:GraphProvider
When implementing this method ensure that a test suite can override any settings EXCEPT the "gremlin.graph" setting which should be defined by the implementer. It should provide aConfiguration
that will generate a graph unique to thatgraphName
.- Specified by:
newGraphConfiguration
in interfaceGraphProvider
- Parameters:
graphName
- a unique test graph nametest
- the test classtestMethodName
- the name of the testconfigurationOverrides
- settings to override defaults with.loadGraphWith
- the data set to load and will be null if no data is to be loaded
-
newGraphConfiguration
public org.apache.commons.configuration2.Configuration newGraphConfiguration(String graphName, Class<?> test, String testMethodName, LoadGraphWith.GraphData loadGraphWith)
Description copied from interface:GraphProvider
When implementing this method ensure that a test suite can override any settings EXCEPT the "gremlin.graph" setting which should be defined by the implementer. It should provide aConfiguration
that will generate a graph unique to thatgraphName
.- Specified by:
newGraphConfiguration
in interfaceGraphProvider
- Parameters:
graphName
- a unique test graph nametest
- the test classtestMethodName
- the name of the testloadGraphWith
- the data set to load and will be null if no data is to be loaded
-
loadGraphData
public void loadGraphData(Graph graph, LoadGraphWith loadGraphWith, Class testClass, String testName)
Description copied from interface:GraphProvider
Tests are annotated with aLoadGraphWith
annotation. These annotations tell the test what kind of data to preload into the graph instance. It is up to the implementation to load the graph with the data specified by that annotation. This method also represents the place where indices should be configured according the theGraph
implementation's API. Implementers can use thetestClass
andtestName
arguments to implement test specific configurations to their graphs.- Specified by:
loadGraphData
in interfaceGraphProvider
- Parameters:
graph
- theGraph
instance to load data into constructed by thisGraphProvider
loadGraphWith
- the annotation for the currently running test - this value may be null if no graph data is to be loaded in front of the test.testClass
- the test class being executedtestName
- the name of the test method being executed
-
getImplementations
public Set<Class> getImplementations()
Description copied from interface:GraphProvider
Get the set of concrete implementations of certain classes and interfaces utilized by the test suite. This method should return any implementations or extensions of the following interfaces or classes:Edge
Element
DefaultGraphTraversal
Graph
Graph.Variables
GraphTraversal
B_LP_O_P_S_SE_SL_Traverser
Property
B_O_S_SE_SL_Traverser
Traversal
Traverser
Vertex
VertexProperty
GraphProvider.CORE_IMPLEMENTATIONS
to theSet
because these representgremlin-core
implementations that are likely not registered by the vendor implementations.- Specified by:
getImplementations
in interfaceGraphProvider
-
getTestListener
public Optional<GraphProvider.TestListener> getTestListener()
Description copied from interface:GraphProvider
Returns aGraphProvider.TestListener
implementation that provides feedback to theGraphProvider
implementation. By default, this returns an empty listener.- Specified by:
getTestListener
in interfaceGraphProvider
-
close
public void close() throws Exception
- Specified by:
close
in interfaceAutoCloseable
- Throws:
Exception
-
getStaticFeatures
public Optional<Graph.Features> getStaticFeatures()
Description copied from interface:GraphProvider
Gets aGraph.Features
implementation that contains graph feature configuration that will never change from execution to execution of the tests given this currentGraphProvider
implementation. Implementing this method will allow the test suite to avoid creation of aGraph
instance and thus speed up the execution of tests if that creation process is expensive. It is important that this static set of features be representative of what theGraph
instance produced by thisGraphProvider
can actually do or else the cost ofGraph
instantiation will be incurred when it doesn't need to be. It is also important that this method be faster than the cost ofGraph
creation in the first place or there really won't be any difference in execution speed. In cases where some features are static and others are not, simply throw anUnsupportedOperationException
from those features to let the test suite know that it cannot rely on them and the test suite will revert to using a constructedGraph
instance.- Specified by:
getStaticFeatures
in interfaceGraphProvider
-
-