Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

getCollection fails in starting mongo session #348

Open
scphantm opened this issue Jul 12, 2018 · 0 comments
Open

getCollection fails in starting mongo session #348

scphantm opened this issue Jul 12, 2018 · 0 comments

Comments

@scphantm
Copy link

I am trying to build unit tests for a spring boot app and its failing creating a session. Here's the code

abstract class AbstractFongoBaseConfiguration extends AbstractMongoConfiguration {

  Logger log = Logger.getLogger(AbstractFongoBaseConfiguration)

  @Autowired
  private Environment env

  @Override
  protected String getDatabaseName() {
    return env.getRequiredProperty("spring.data.mongodb.database")
  }

  @Override
  MongoClient mongoClient() throws Exception {
    log.info("MongoClient mongoClient() ")
    return new Fongo("fongo server 2").mongo
  }

  @Bean
  Mongo mongo() {
    log.info("Mongo mongo()")
    return new Fongo("fongo server 1").mongo
  }
}
@EnableAutoConfiguration(exclude = [ EmbeddedMongoAutoConfiguration, MongoAutoConfiguration,
  MongoDataAutoConfiguration ])
@Configuration
//@ComponentScan(basePackages = ["com.isolisduran.springboot" ], excludeFilters = [
//  @ComponentScan.Filter(classes = RufusEngineApp ) ])
class ConfigServerWithFongoConfiguration extends AbstractFongoBaseConfiguration {

}

@SpringBootTest(classes = [ConfigServerWithFongoConfiguration, RufusEngineApp],
    properties = "server.port=8980",
    webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureMockMvc
@TestPropertySource(properties = "spring.data.mongodb.database=test" )
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
//@SpringBootTest(classes = RufusEngineApp)
class MongoDbSpringIntegrationTest extends Specification {

  @Autowired
  @Qualifier("inventoryCollection")
  MongoCollection inventory

  void test() {
    setup:
    DBObject objectToSave = BasicDBObjectBuilder.start()
        .add("key", "value")
        .get()

    when:
    inventory.save(objectToSave)

    then:
    inventory.find().extracting("key").containsOnly("value")
  }
}

and the applications jongo class is

@Configuration
@ConditionalOnClass([Jongo])
class JongoAutoConfiguration {

  Logger log = Logger.getLogger(JongoAutoConfiguration)

  @Autowired
  protected Mongo mongo

  DB rufusdb

  @Autowired
  protected MongoProperties properties

  @Bean
  DB rufusdb() {
    this.rufusdb = mongo.getDB(properties.database)
    return this.rufusdb
  }

  private Jongo getJongoDBObject() {
    if (this.rufusdb == null) {
      rufusdb()
    }

    if (rufusdb == null) {
      log.error("rufudb is null")
    } else {
      log.error("rufudb is not null")
    }

    Mapper mapper = new JacksonMapper.Builder()
      .registerModule(new JodaModule())
      .enable(MapperFeature.AUTO_DETECT_GETTERS)
      .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
      .build()

    return new Jongo(this.rufusdb, mapper)
  }

  @Bean
  Jongo jongoConnection() {
    getJongoDBObject()
  }

  @Bean
  @DependsOn("rufusdb")
  MongoCollection inventoryCollection() {
    Jongo dbtmp = getJongoDBObject()

    dbtmp.getCollection("inventory")
  }

  @Bean
  @DependsOn("rufusdb")
  MongoCollection configCollection() {
    getJongoDBObject().getCollection("config")
  }

}

and when i run it, i get this error:

Caused by: java.lang.NullPointerException: null
	at com.mongodb.Mongo.createClientSession(Mongo.java:870) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.Mongo$3.getClientSession(Mongo.java:862) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.Mongo$3.execute(Mongo.java:819) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.Mongo$3.execute(Mongo.java:809) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.DBCursor.initializeCursor(DBCursor.java:870) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.DBCursor.hasNext(DBCursor.java:141) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.DBCursor.one(DBCursor.java:679) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.DBCollection.findOne(DBCollection.java:829) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.DBCollection.findOne(DBCollection.java:792) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.DBCollection.findOne(DBCollection.java:739) ~[mongo-java-driver-3.6.1.jar:na]
	at com.mongodb.FongoDBCollection.createIndex(FongoDBCollection.java:522) ~[fongo-2.1.1.jar:na]
	at com.mongodb.FongoDBCollection.<init>(FongoDBCollection.java:93) ~[fongo-2.1.1.jar:na]
	at com.mongodb.FongoDB.doGetCollection(FongoDB.java:96) ~[fongo-2.1.1.jar:na]
	at com.mongodb.FongoDB.doGetCollection(FongoDB.java:87) ~[fongo-2.1.1.jar:na]
	at com.mongodb.FongoDB.getCollection(FongoDB.java:82) ~[fongo-2.1.1.jar:na]
	at com.mongodb.FongoDB.getCollection(FongoDB.java:32) ~[fongo-2.1.1.jar:na]
	at org.jongo.Jongo.getCollection(Jongo.java:42) ~[jongo-1.4.0.jar:na]
	at org.jongo.Jongo$getCollection.call(Unknown Source) ~[na:na]
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) ~[groovy-all-2.4.12.jar:2.4.12]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) ~[groovy-all-2.4.12.jar:2.4.12]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-all-2.4.12.jar:2.4.12]
	at com.highmark.rufus.engine.JongoAutoConfiguration.inventoryCollection(JongoAutoConfiguration.groovy:70) ~[main/:na]
	at com.highmark.rufus.engine.JongoAutoConfiguration$$EnhancerBySpringCGLIB$$86294ec4.CGLIB$inventoryCollection$5(<generated>) ~[main/:na]
	at com.highmark.rufus.engine.JongoAutoConfiguration$$EnhancerBySpringCGLIB$$86294ec4$$FastClassBySpringCGLIB$$1588289d.invoke(<generated>) ~[main/:na]
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
	at com.highmark.rufus.engine.JongoAutoConfiguration$$EnhancerBySpringCGLIB$$86294ec4.inventoryCollection(<generated>) ~[main/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_161]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_161]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_161]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
	... 94 common frames omitted
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant