I am extending TestModule, and I'm getting auto mock behavior. Here is my Guice configuration for tests.
I just install the system module, nothing more. Here's the graph module code.
public class GraphModule extends AbstractModule {
@Override
protected void configure() {
//configure collections and our core astyanax framework
install( new CollectionModule() );
//install our configuration
install( new GuicyFigModule( GraphFig.class ) );
bind( PostProcessObserver.class ).to( CollectionIndexObserver.class );
bind( EdgeMetadataSerialization.class ).to( EdgeMetadataSerializationImpl.class );
bind( NodeSerialization.class ).to( NodeSerializationImpl.class );
bind( CassandraConfig.class ).to( CassandraConfigImpl.class );
// create a guice factory for getting our collection manager
install( new FactoryModuleBuilder().implement( GraphManager.class, GraphManagerImpl.class )
.build( GraphManagerFactory.class ) );
/**
* bindings for shard allocations
*/
bind( NodeShardAllocation.class ).to( NodeShardAllocationImpl.class );
bind( NodeShardApproximation.class ).to( NodeShardApproximationImpl.class );
bind( NodeShardCache.class ).to( NodeShardCacheImpl.class );
/**
* Bind our strategies based on their internal annotations.
*/
bind( EdgeShardSerialization.class ).to( EdgeShardSerializationImpl.class );
bind( EdgeShardCounterSerialization.class ).to( EdgeShardCounterSerializationImpl.class );
/**
* Graph event bus, will need to be refactored into it's own classes
*/
// create a guice factory for getting our collection manager
//local queue. Need to replace with a real implementation
bind( TimeoutQueue.class ).to( LocalTimeoutQueue.class );
bind( AsyncProcessor.class ).annotatedWith( EdgeDelete.class ).to( AsyncProcessorImpl.class );
bind( AsyncProcessor.class ).annotatedWith( NodeDelete.class ).to( AsyncProcessorImpl.class );
bind( AsyncProcessor.class ).annotatedWith( EdgeWrite.class ).to( AsyncProcessorImpl.class );
//Repair/cleanup classes
bind( EdgeMetaRepair.class ).to( EdgeMetaRepairImpl.class );
bind( EdgeDeleteRepair.class ).to( EdgeDeleteRepairImpl.class );
/********
* Migration bindings
********/
//do multibindings for migrations
Multibinder<Migration> migrationBinding = Multibinder.newSetBinder( binder(), Migration.class );
migrationBinding.addBinding().to( Key.get( NodeSerialization.class ) );
migrationBinding.addBinding().to( Key.get( EdgeMetadataSerialization.class ) );
//bind each singleton to the multi set. Otherwise we won't migrate properly
migrationBinding.addBinding().to( Key.get( EdgeSerialization.class, PermanentStorage.class ) );
migrationBinding.addBinding().to( Key.get( EdgeSerialization.class, CommitLog.class ) );
migrationBinding.addBinding().to( Key.get( EdgeShardSerialization.class ) );
migrationBinding.addBinding().to( Key.get( EdgeShardCounterSerialization.class ) );
}
/**
* Our permanent serialization strategy
*/
@Provides
@Singleton
@Inject
@PermanentStorage
public EdgeSerialization permanentStorageSerialization( final NodeShardCache cache, final Keyspace keyspace,
final CassandraConfig cassandraConfig,
final GraphFig graphFig ) {
final EdgeShardStrategy sizeBasedStrategy = new SizebasedEdgeShardStrategy( cache );
final EdgeSerializationImpl edgeSerialization =
new EdgeSerializationImpl( keyspace, cassandraConfig, graphFig, sizeBasedStrategy );
return edgeSerialization;
}
/**
* The commit log strategy for fast writes
*/
@Provides
@Singleton
@Inject
@CommitLog
public EdgeSerialization commitlogStorageSerialization( final NodeShardCache cache, final Keyspace keyspace,
final CassandraConfig cassandraConfig,
final GraphFig graphFig ) {
final EdgeShardStrategy sizeBasedStrategy = new TimebasedEdgeShardStrategy( cache );
final EdgeSerializationImpl edgeSerialization =
new EdgeSerializationImpl( keyspace, cassandraConfig, graphFig, sizeBasedStrategy );
return edgeSerialization;
}
}