ITV/scala-pact

sbt pactVerify fails with incomprehensive error

Opened this issue · 1 comments

I have very simple pact file with health check endpoints

{
  "provider" : {
    "name" : "service-api"
  },
  "interactions" : [
    {
      "request" : {
        "method" : "GET",
        "path" : "/readiness"
      },
      "description" : "Fetching readiness response",
      "response" : {
        "status" : 200,
        "body" : {
          "result" : {
            "data" : [
              {
                "status" : "UP"
              }
            ],
            "total_count" : 1
          },
          "status" : 200
        }
      },
      "providerState" : "readiness"
    },
    {
      "request" : {
        "method" : "GET",
        "path" : "/liveness"
      },
      "description" : "Fetching liveness response",
      "response" : {
        "status" : 200,
        "body" : {
          "result" : {
            "data" : [
              {
                "status" : "UP"
              }
            ],
            "total_count" : 1
          },
          "status" : 200
        }
      },
      "providerState" : "liveness"
    }
  ],
  "consumer" : {
    "name" : "HealthCheckConsumer"
  },
  "metadata" : {
    "pactSpecification" : {
      "version" : "2.0.0"
    },
    "scala-pact" : {
      "version" : "2.3.17"
    }
  }
}

When I run command

sbt "pactVerify --host localhost --protocol http --port 9000 --source target/pacts"

I got error:

Verifying against 'localhost' on port '9000' with a timeout of second(s). -------------------- Attempting to run provider state: liveness Provider state run failed -------------------- Error executing unknown provider state function with key: liveness [error] com.itv.scalapactcore.verifier.ProviderStateFailure [error] at com.itv.scalapactcore.verifier.Verifier$.$anonfun$doRequest$1(Verifier.scala:183) [error] at scala.Function1.$anonfun$andThen$1(Function1.scala:57) [error] at com.itv.scalapactcore.verifier.Verifier$.$anonfun$verify$14(Verifier.scala:84) [error] at scala.collection.immutable.List.map(List.scala:286) [error] at com.itv.scalapactcore.verifier.Verifier$.$anonfun$verify$13(Verifier.scala:77) [error] at scala.collection.immutable.List.map(List.scala:286) [error] at com.itv.scalapactcore.verifier.Verifier$.$anonfun$verify$1(Verifier.scala:74) [error] at com.itv.scalapactcore.verifier.Verifier$.$anonfun$verify$1$adapted(Verifier.scala:24) [error] at com.itv.scalapact.plugin.shared.ScalaPactVerifyCommand$.doPactVerify(ScalaPactVerifyCommand.scala:46) [error] at com.itv.scalapact.plugin.ScalaPactPlugin$.$anonfun$pactCheckTask$3(ScalaPactPlugin.scala:180) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) [error] at sbt.std.Transform$$anon$3.$anonfun$apply$2(Transform.scala:46) [error] at sbt.std.Transform$$anon$4.work(Transform.scala:67) [error] at sbt.Execute.$anonfun$submit$2(Execute.scala:281) [error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19) [error] at sbt.Execute.work(Execute.scala:290) [error] at sbt.Execute.$anonfun$submit$1(Execute.scala:281) [error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178) [error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:37) [error] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [error] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [error] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [error] at java.lang.Thread.run(Thread.java:748) [error] (pactVerify) com.itv.scalapactcore.verifier.ProviderStateFailure [error] Total time: 0 s, completed Aug 18, 2020 6:07:24 PM

I get this error even if I start pactStubber

sbt "pactStubber --host localhost --port 9000 --source target/pacts"

and run verification against subbed services by command

sbt "pactVerify --host localhost --protocol http --port 9000 --source target/pacts"

The Pact files are the same for pactVerify and pactStubber

Environment

Java=Oracle jdk 8
Scala=2.12.7
sbt=1.3.10

build.sbt:
...
lazy val scalaPactVersion = "2.3.17"
// scalapact
"com.itv" %% "scalapact-circe-0-13" % scalaPactVersion % Test withSources (),
"com.itv" %% "scalapact-http4s-0-18" % scalaPactVersion % Test withSources (),
"com.itv" %% "scalapact-scalatest" % scalaPactVersion % Test withSources ()

plugins.sbt:
...
addSbtPlugin("com.itv" % "sbt-scalapact" % "2.3.17")