diff --git a/README.adoc b/README.adoc index 01f5243..0c0de35 100644 --- a/README.adoc +++ b/README.adoc @@ -113,10 +113,10 @@ A1 OK [READ-WRITE] Completed Some simple integration tests are available via: ---- -$ sbt test +$ sbt GatlingIt/test ---- -Finally execute your gatling scenarios: +Finally, execute your gatling scenarios: ---- $ sbt gatling:test diff --git a/src/it/resources/james-conf/imapserver.xml b/src/it/resources/james-conf/imapserver.xml new file mode 100644 index 0000000..370184f --- /dev/null +++ b/src/it/resources/james-conf/imapserver.xml @@ -0,0 +1,24 @@ + + + + imapserver + 0.0.0.0:143 + 200 + + file://conf/keystore + PKCS12 + james72laBalle + org.bouncycastle.jce.provider.BouncyCastleProvider + + 0 + 0 + 120 + SECONDS + true + false + + true + + true + + diff --git a/src/it/resources/james-conf/jwt_privatekey b/src/it/resources/james-conf/jwt_privatekey new file mode 100644 index 0000000..a7fd753 --- /dev/null +++ b/src/it/resources/james-conf/jwt_privatekey @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/src/it/resources/james-conf/jwt_publickey b/src/it/resources/james-conf/jwt_publickey new file mode 100644 index 0000000..a6102ef --- /dev/null +++ b/src/it/resources/james-conf/jwt_publickey @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAubqHygJu1wvhKH4ctiT0 +3u2E/OotP6qOh+lc0UZTeT9tSvpwAqc+5QZvbo1eQNEzeNkgFazCLJTV2YKfZClw +YDwjTiWgVOUDMVVpDZrYnKiEgTAdrlO3iWg2bDMLlgcnbGxEXlzUQcj0vZiDNajK +TqC3NvgdgLtdW31akbTS5vIR4v7/yC1AS11PrEjEKofKYuMaAPAX/MBsWK/gYodr +tl+AIVUNLi/J8/Gen34oQi/346s9FxrDqvbFdH5caXyaMTmhPKDXc72YSn1cVSct +epXllLlauLBoLi4+o+STbDzgfkTypHiAttCk38vy5mNdJpTH40vyCyq3gKVzLLqD +/BNh5EMTKHs3HDZ9TRmFRyoxzeG15dNwOJxQfre9ZN06QbQOXr1sJkfAFCM5vzox +7Fie3ShrYFdOTunGS9W01NBrcT6TB57xpJftDhYRfm5XbbOB+v7bmBGmqxJh0j1I +F1os48f+LvSA1p7L4OrWwym1UVLqtl7brI7aNMbrnRzkVVJbvj+/NF+HOBfQ24pf +FtaZ1+H3nvUP68YCk8cnl2XcABB1GyW6Adbwz8F2ojIgJGGEPVjga6YghgY5YBgj +zfIoxPvQS9JEdx6n6Qk3q2Epa3yuMe5s1eBSoCiaNuJZ3yiyTj6fXGvaBYxo/uSS +0kQCecXUl1KG2yFy1BRsYdMCAwEAAQ== +-----END PUBLIC KEY----- diff --git a/src/it/resources/james-conf/keystore b/src/it/resources/james-conf/keystore new file mode 100644 index 0000000..361cd01 Binary files /dev/null and b/src/it/resources/james-conf/keystore differ diff --git a/src/it/resources/james-conf/smtpserver.xml b/src/it/resources/james-conf/smtpserver.xml new file mode 100644 index 0000000..604fa00 --- /dev/null +++ b/src/it/resources/james-conf/smtpserver.xml @@ -0,0 +1,35 @@ + + + + smtpserver-startTLS + 0.0.0.0:587 + 200 + + file://conf/keystore + PKCS12 + james72laBalle + org.bouncycastle.jce.provider.BouncyCastleProvider + SunX509 + + 360 + 0 + 0 + + forUnauthorizedAddresses + false + true + + 127.0.0.0/8 + + false + 0 + true + Apache JAMES awesome SMTP Server + + + + + + + + diff --git a/src/it/resources/james-conf/webadmin.properties b/src/it/resources/james-conf/webadmin.properties new file mode 100644 index 0000000..e7bfc8e --- /dev/null +++ b/src/it/resources/james-conf/webadmin.properties @@ -0,0 +1,32 @@ +enabled=true +port=8000 +host=0.0.0.0 + +# Defaults to false +https.enabled=false + +# Compulsory when enabling HTTPS +#https.keystore=/path/to/keystore +#https.password=password + +# Optional when enabling HTTPS (self signed) +#https.trust.keystore +#https.trust.password + +# Defaults to false +#jwt.enabled=true +# +## If you wish to use OAuth authentication, you should provide a valid JWT public key. +## The following entry specify the link to the URL of the public key file, +## which should be a PEM format file. +## +#jwt.publickeypem.url=file://conf/jwt_publickey + +# Defaults to false +#cors.enable=true +#cors.origin + +# List of fully qualified class names that should be exposed over webadmin +# in addition to your product default routes. Routes needs to be located +# within the classpath or in the ./extensions-jars folder. +#extensions.routes= \ No newline at end of file diff --git a/src/it/scala-2.12/com/linagora/gatling/imap/JamesServer.scala b/src/it/scala-2.12/com/linagora/gatling/imap/JamesServer.scala index 9f57fa0..bab3cd3 100644 --- a/src/it/scala-2.12/com/linagora/gatling/imap/JamesServer.scala +++ b/src/it/scala-2.12/com/linagora/gatling/imap/JamesServer.scala @@ -5,6 +5,7 @@ import java.net.URL import com.linagora.gatling.imap.protocol.{Domain, User} import org.slf4j.{Logger, LoggerFactory} import org.testcontainers.containers.GenericContainer +import org.testcontainers.utility.MountableFile import scala.concurrent.Await import scala.concurrent.duration._ @@ -37,7 +38,13 @@ object JamesServer extends Server { } def start(): RunningServer = { - val james = new GenericContainer("linagora/james-memory") + val james = new GenericContainer("linagora/tmail-backend:memory-0.4.3") + james.withCopyFileToContainer(MountableFile.forClasspathResource("james-conf/jwt_privatekey"), "/root/conf/") + james.withCopyFileToContainer(MountableFile.forClasspathResource("james-conf/jwt_publickey"), "/root/conf/") + james.withCopyFileToContainer(MountableFile.forClasspathResource("james-conf/webadmin.properties"), "/root/conf/") + james.withCopyFileToContainer(MountableFile.forClasspathResource("james-conf/keystore"), "/root/conf/") + james.withCopyFileToContainer(MountableFile.forClasspathResource("james-conf/imapserver.xml"), "/root/conf/") + james.withCopyFileToContainer(MountableFile.forClasspathResource("james-conf/smtpserver.xml"), "/root/conf/") james.addExposedPorts(jmapPort, imapPort, smtpPort, webadminPort) james.start() new RunningJamesServer(james)