-
Notifications
You must be signed in to change notification settings - Fork 60
Open
Description
Hi there,
I'm seeing intermittent errors when mocking the AWS Java SDK v2 within a Scala 2.12 project. The versions are as follows:
javacOptions ++= Seq("--release", "11")
scalaVersion := "2.12.20"
val awsSdkVersion = "2.24.13"
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
libraryDependencies += "software.amazon.awssdk" % "regions" % awsSdkVersion
libraryDependencies += "software.amazon.awssdk" % "auth" % awsSdkVersion
libraryDependencies += "software.amazon.awssdk" % "sts" % awsSdkVersion
libraryDependencies += "software.amazon.awssdk" % "s3" % awsSdkVersion
[...]
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % Test
libraryDependencies += "org.mockito" %% "mockito-scala-scalatest" % "1.17.45" % Test
libraryDependencies += "org.mockito" % "mockito-core" % "5.18.0" % Test
libraryDependencies += "org.scalamock" %% "scalamock" % "7.3.3" % Test
One test is accessing S3 and giving the following stack trace about 50% of the time:
[info] - should create an S3Client and assume a role when bucket is passed in *** FAILED ***
[info] java.lang.AssertionError: assertion failed: no symbol could be loaded from interface software.amazon.awssdk.services.sts.model.AssumeRoleResponse$Builder in class AssumeRoleResponse with name Builder and classloader sbt.internal.LayeredClassLoader@2790650b
[info] at scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:185)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala1(JavaMirrors.scala:1068)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.$anonfun$classToScala$1(JavaMirrors.scala:1026)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.$anonfun$toScala$1(JavaMirrors.scala:137)
[info] at scala.reflect.runtime.TwoWayCaches$TwoWayCache.$anonfun$toScala$1(TwoWayCaches.scala:50)
[info] at scala.reflect.runtime.TwoWayCaches$TwoWayCache.toScala(TwoWayCaches.scala:46)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:135)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala(JavaMirrors.scala:1026)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.typeToScala(JavaMirrors.scala:1131)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.targToScala$1(JavaMirrors.scala:1118)
Another test is accessing Secrets Manager and giving a similar error about 5% of the time:
[info] - should return secret config *** FAILED ***
[info] java.lang.AssertionError: assertion failed: no symbol could be loaded from interface software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse$Builder in class GetSecretValueResponse with name Builder and classloader sbt.internal.LayeredClassLoader@2790650b
[info] at scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:185)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala1(JavaMirrors.scala:1068)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.$anonfun$classToScala$1(JavaMirrors.scala:1026)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.$anonfun$toScala$1(JavaMirrors.scala:137)
[info] at scala.reflect.runtime.TwoWayCaches$TwoWayCache.$anonfun$toScala$1(TwoWayCaches.scala:50)
[info] at scala.reflect.runtime.TwoWayCaches$TwoWayCache.toScala(TwoWayCaches.scala:46)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:135)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala(JavaMirrors.scala:1026)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.typeToScala(JavaMirrors.scala:1131)
[info] at scala.reflect.runtime.JavaMirrors$JavaMirror.targToScala$1(JavaMirrors.scala:1118)
The second test is actually very simple:
class cieSecretsManagerTest extends UnitSpec {
private val secretsManagerClient = mock[SecretsManagerClient]
private val getSecretValueResponse = mock[GetSecretValueResponse]
it should "return secret config" in {
val expectedHost = "some.host"
val expectedPort = "1234"
val expectedDbName = "test"
val expectedPassword = "test12"
val expectedUsername = "testUsername"
val secret = s"""{"host":"$expectedHost","port":"$expectedPort","dbname":"$expectedDbName","password":"$expectedPassword","username":"$expectedUsername"}"""
secretsManagerClient.getSecretValue(any[GetSecretValueRequest]) shouldReturn getSecretValueResponse
getSecretValueResponse.secretString() shouldReturn secret
val cieSecretsManager = new cieSecretsManager(secretsManagerClient)
val actual = cieSecretsManager.getSecret("some-secret")
actual.host shouldBe expectedHost
actual.port shouldBe expectedPort
actual.dbname shouldBe expectedDbName
actual.password shouldBe expectedPassword
actual.username shouldBe expectedUsername
}
}
Metadata
Metadata
Assignees
Labels
No labels