2016-07-12 33 views
1

Hier ist, wie mein Testanzug konfiguriert ist.Eingebetteter Kafka löst Ausnahme aus, wenn in mehreren skalierten Anzügen produziert wird

"test payments" should { 
    "Add 100 credits" in { 
     runTeamTest { team => 
     withRunningKafka { 
      val addCreditsRequest = AddCreditsRequest(team.id.stringify, member1Email, 100) 
      TestCommon.makeRequestAndCheck(
      member1Email, 
      TeamApiGenerated.addCredits().url, 
      Helpers.POST, 
      Json.toJson(addCreditsRequest), 
      OK 
     ) 

      val foundTeam = TestCommon.waitForFuture(TeamDao.findOneById(team.id)) 
      foundTeam.get.credits mustEqual initialCreditAmount + 100 
     } 
     } 
    } 

    "deduct 100 credits" in { 
     runTeamTest { team => 
     withRunningKafka { 
      val deductCreditsRequest = DeductCreditsRequest(team.id.stringify, member1Email, 100) 
      TestCommon.makeRequestAndCheck(
      member1Email, 
      TeamApiGenerated.deductCredits().url, 
      Helpers.POST, 
      Json.toJson(deductCreditsRequest), 
      OK 
     ) 

      val foundTeam = TestCommon.waitForFuture(TeamDao.findOneById(team.id)) 
      foundTeam.get.credits mustEqual initialCreditAmount - 100 
     } 
     } 
    } 

Innerhalb Scalatest, der übergeordnete Anzug Name ist "test payments" und die nachfolgenden Tests im Inneren Probleme haben, nachdem die ersten ausgeführt wird. Wenn ich jeden der beiden Tests einzeln ausführe, werden sie erfolgreich sein, aber wenn ich die gesamte Farbe ausführe, ist die erste erfolgreich und die zweite gibt eine org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition. Ausnahme zurück. Der Code oben zeigt nicht den Code innerhalb der Controller, die getestet werden, aber innerhalb des Controllers habe ich einen Kafka-Consumer, der ständig abfragt und close() nicht innerhalb der Tests aufgerufen wird.

Antwort

3

Ich würde vorschlagen, dass Sie die Companion-Objektmethoden EmbeddedKafka.start() und EmbeddedKafka.stop() in den Abschnitten beforeAll und afterAll verwenden. Auf diese Weise vermeiden Sie auch, Kafka für eine einzelne Testklasse erneut anzuhalten/zu starten.

Versuchen Sie auch sicherzustellen, dass Sie nicht versuchen, 2 oder mehr Instanzen von Kafka gleichzeitig auf demselben Port zu starten.

+0

Gibt es eine Möglichkeit zu überprüfen, ob ein Kafka-Cluster, an dem ein Stoppbefehl übergeben wurde, tatsächlich gestorben ist oder nicht. @manub –