Skip to content

Commit

Permalink
Add tests for docker module
Browse files Browse the repository at this point in the history
Add tests for a docker config with defaults (no options) and
all options specified by building them.
  • Loading branch information
LaurenceWarne committed Sep 16, 2021
1 parent 434e84c commit ee6e601
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 1 deletion.
6 changes: 5 additions & 1 deletion build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -579,9 +579,13 @@ object contrib extends MillModule {
override def ivyDeps = Agg(Deps.flywayCore)
}


object docker extends MillModule {
override def compileModuleDeps = Seq(scalalib)
override def testArgs = T {
Seq("-Djna.nosys=true") ++
scalalib.worker.testArgs() ++
scalalib.backgroundwrapper.testArgs()
}
}

object bloop extends MillModule {
Expand Down
1 change: 1 addition & 0 deletions contrib/docker/test/resources/docker/src/Main.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
object Main extends App
114 changes: 114 additions & 0 deletions contrib/docker/test/src/DockerModuleTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package mill
package contrib.docker

import mill.api.PathRef
import mill.scalalib.JavaModule
import mill.util.{TestEvaluator, TestUtil}
import os.Path
import utest._
import utest.framework.TestPath

object DockerModuleTest extends TestSuite {

object Docker extends TestUtil.BaseModule with JavaModule with DockerModule {

override def millSourcePath = TestUtil.getSrcPathStatic()
override def artifactName = testArtifactName

object dockerDefault extends DockerConfig

object dockerAll extends DockerConfig {
override def baseImage = "openjdk:11"
override def labels = Map("version" -> "1.0")
override def exposedPorts = Seq(8080, 443)
override def exposedUdpPorts = Seq(80)
override def volumes = Seq("/v1", "/v2")
override def envVars = Map("foo" -> "bar", "foobar" -> "barfoo")
override def run = Seq(
"/bin/bash -c 'echo Hello World!'",
"useradd -ms /bin/bash user1"
)
override def user = "user1"
}
}

val testArtifactName = "mill-docker-contrib-test"

val testModuleSourcesPath: Path =
os.pwd / "contrib" / "docker" / "test" / "resources" / "docker"

private def isInstalled(executable: String): Boolean = {
val getPathCmd = if (scala.util.Properties.isWin) "where" else "which"
os.proc(getPathCmd, executable).call(check = false).exitCode == 0
}

private def workspaceTest(m: TestUtil.BaseModule)(t: TestEvaluator => Unit)(
implicit tp: TestPath
): Unit = {
if (isInstalled("docker")) {
val eval = new TestEvaluator(m)
os.remove.all(m.millSourcePath)
os.remove.all(eval.outPath)
os.makeDir.all(m.millSourcePath / os.up)
os.copy(testModuleSourcesPath, m.millSourcePath)
t(eval)
} else assert(true)
}

override def utestAfterAll(): Unit = {
if (isInstalled("docker"))
os
.proc("docker", "rmi", testArtifactName)
.call(stdout = os.Inherit, stderr = os.Inherit)
else ()
}

def tests = Tests {

test("docker build") {
"default options" - workspaceTest(Docker) { eval =>
val Right((imageName :: Nil, _)) = eval(Docker.dockerDefault.build)
assert(imageName == testArtifactName)
}

"all options" - workspaceTest(Docker) { eval =>
val Right((imageName :: Nil, _)) = eval(Docker.dockerAll.build)
assert(imageName == testArtifactName)
}
}

test("dockerfile contents") {
"default options" - {
val eval = new TestEvaluator(Docker)
val Right((dockerfileString, _)) = eval(Docker.dockerDefault.dockerfile)
val expected =
"""
|FROM gcr.io/distroless/java:latest
|
|COPY out.jar /out.jar
|ENTRYPOINT ["java", "-jar", "/out.jar"]""".stripMargin
assert(dockerfileString == expected)
}

"all options" - {
val eval = new TestEvaluator(Docker)
val Right((dockerfileString, _)) = eval(Docker.dockerAll.dockerfile)
val expected =
"""
|FROM openjdk:11
|LABEL "version"="1.0"
|EXPOSE 8080/tcp 443/tcp
|EXPOSE 80/udp
|ENV foo=bar
|ENV foobar=barfoo
|VOLUME ["/v1", "/v2"]
|RUN /bin/bash -c 'echo Hello World!'
|RUN useradd -ms /bin/bash user1
|USER user1
|COPY out.jar /out.jar
|ENTRYPOINT ["java", "-jar", "/out.jar"]""".stripMargin
assert(dockerfileString == expected)
}
}
}
}

0 comments on commit ee6e601

Please sign in to comment.