testcontainers / testcontainers-scala

Docker containers for testing in scala

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Local Docker Compose with V2 Not Found in Path Error

joesan opened this issue · comments

I'm having a Scala project where in the test folder, I have the resources folder and in that folder I have the docker-compose-mqtt.yaml file that is supposed to start a mqtt broker as a docker container. I have a test class like this below:

class MqttClientFactoryTest extends AsyncFunSuite
    with Matchers with TestContainersForAll {

  implicit val ec: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global

  override type Containers = DockerComposeContainer

  override def startContainers(): DockerComposeContainer = {
    DockerComposeContainer
      .Def(
        composeFiles = new File(
          this.getClass.getClassLoader
            .getResource("docker-compose-mqtt.yaml")
            .getFile
        ),
        exposedServices = Seq(ExposedService(name = "mqtt5", port = 1883))
      )
      .start()
  }

  test("mosquitto container") {
    withContainers { container =>
      val client: Mqtt5AsyncClient = Mqtt5Client
        .builder()
        .identifier(UUID.randomUUID().toString)
        .serverHost("broker.hivemq.com")
        .buildAsync()

      client
        .connect()
        .thenCompose(_ =>
          client
            .publishWith()
            .topic("test/topic")
            .payload("some random message!!!".getBytes)
            .send()
        )
        .asScala
        .map(_ => 1 should be(1))

      client
        .subscribeWith()
        .topicFilter("test/topic")
        .qos(MqttQos.EXACTLY_ONCE)
        .callback(x => println(new String(x.getPayloadAsBytes)))
        .send()
        .asScala
        .map(_ => 1 should be(1))
    }
  }
}

When I ran it, it failed with the message below:

Exception encountered when invoking run on a nested suite - Local Docker Compose not found. Is docker-compose on the PATH?

org.testcontainers.containers.ContainerLaunchException: Local Docker Compose not found. Is docker-compose on the PATH?
	at org.testcontainers.containers.LocalDockerCompose.invoke(LocalDockerCompose.java:61)
	at org.testcontainers.containers.ComposeDelegate.runWithCompose(ComposeDelegate.java:254)
	at org.testcontainers.containers.ComposeDelegate.createServices(ComposeDelegate.java:163)
	at org.testcontainers.containers.DockerComposeContainer.start(DockerComposeContainer.java:137)
	at com.dimafeng.testcontainers.DockerComposeContainer.start(DockerComposeContainer.scala:185)
	at com.dimafeng.testcontainers.ContainerDef.start(ContainerDef.scala:14)
	at com.dimafeng.testcontainers.ContainerDef.start$(ContainerDef.scala:12)
	at com.dimafeng.testcontainers.DockerComposeContainer$Def.start(DockerComposeContainer.scala:88)
	at com.openelectrons.ocpp.gateway.mqtt.MqttClientFactoryTest.startContainers(MqttClientFactoryTest.scala:25)
What is the desired approach here to run this as a unit test?

It is looking for the older docker-compose as it can be seen from the screenshot below:

image