Skip to content

Commit

Permalink
Added integration tests which run in client-server mode (#1835)
Browse files Browse the repository at this point in the history
Pull request: #1835
  • Loading branch information
lefou committed Apr 11, 2022
1 parent cc2d001 commit 0683918
Show file tree
Hide file tree
Showing 13 changed files with 61 additions and 30 deletions.
6 changes: 2 additions & 4 deletions .github/workflows/actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,11 @@ jobs:
# unit and module tests
- ./mill -i -k "{main,scalalib,scalajslib,scalanativelib,testrunner,bsp}.__.test"
# additional integration tests
- ./mill -i -k "integration.{local,forked}"
- ./mill -i -k "integration.{local,forked,forked-server}"
# integrtion tests of thirdparty repos
- ./mill -i -k "integration.thirdparty.{local,forked}"
# contrib tests
- ./mill -i -k "contrib._.test"
# - ./mill -i integration.test "mill.integration.local.JawnTests"
#- ./mill -i integration.test "mill.integration.local.{AcyclicTests,AmmoniteTests}"
- ./mill -i docs.antora.githubPages
include:
# Just some reporting to enable reasoning about library upgrades
Expand Down Expand Up @@ -91,7 +89,7 @@ jobs:
buildcmd:
- cmd /C %GITHUB_WORKSPACE%\ci\mill.bat -i -d -k "{__.publishLocal,assembly,__.compile}"
- cmd /C %GITHUB_WORKSPACE%\ci\mill.bat -i -d -k "{main,scalalib,scalajslib,bsp}.__.test"
- cmd /C %GITHUB_WORKSPACE%\ci\mill.bat -i -d -k "integration.{local,forked}"
- cmd /C %GITHUB_WORKSPACE%\ci\mill.bat -i -d -k "integration.{local,forked,forked-server}"
- cmd /C %GITHUB_WORKSPACE%\ci\mill.bat -i -d -k "integration.thirdparty.{local,forked}"
- cmd /C %GITHUB_WORKSPACE%\ci\mill.bat -i -d -k "contrib.__.test"

Expand Down
4 changes: 3 additions & 1 deletion build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -906,13 +906,15 @@ object integration extends MillScalaModule {

// Integration test of Mill
object local extends ITests
object forked extends ITests {
trait Forked extends ITests {
override def moduleDeps: Seq[JavaModule] = super.moduleDeps ++ Seq(integration.local)

override def forkEnv: Target[Map[String, String]] = super.forkEnv() ++ Map(
"MILL_TEST_RELEASE" -> testMill().path.toString()
)
}
object forked extends Forked
object `forked-server` extends Forked

// Test of various third-party repositories
object thirdparty extends Module {
Expand Down
8 changes: 8 additions & 0 deletions integration/forked-server/src/forked-server-tests.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package mill.integration
package forked.server

object DocAnnotationsTests extends DocAnnotationsTests(fork = true, clientServer = true)
object HygieneTests extends HygieneTests(fork = true, clientServer = true)
object LargeProjectTests extends LargeProjectTests(fork = true, clientServer = true)
object ScriptsInvalidationTests extends ScriptsInvalidationTests(fork = true, clientServer = true)
object ScriptsInvalidationForeignTests extends ScriptsInvalidationForeignTests(fork = true, clientServer = true)
8 changes: 0 additions & 8 deletions integration/forked/src/Tests.scala

This file was deleted.

8 changes: 8 additions & 0 deletions integration/forked/src/forked-tests.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package mill.integration
package forked

object DocAnnotationsTests extends DocAnnotationsTests(fork = true, clientServer = false)
object HygieneTests extends HygieneTests(fork = true, clientServer = false)
object LargeProjectTests extends LargeProjectTests(fork = true, clientServer = false)
object ScriptsInvalidationTests extends ScriptsInvalidationTests(fork = true, clientServer = false)
object ScriptsInvalidationForeignTests extends ScriptsInvalidationForeignTests(fork = true, clientServer = false)
3 changes: 2 additions & 1 deletion integration/local/src/DocAnnotationsTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ package mill.integration
import mill.util.ScriptTestSuite
import utest._

class DocAnnotationsTests(fork: Boolean) extends IntegrationTestSuite("docannotations", fork) {
class DocAnnotationsTests(fork: Boolean, clientServer: Boolean)
extends IntegrationTestSuite("docannotations", fork, clientServer) {
val tests = Tests {
initWorkspace()
"test" - {
Expand Down
3 changes: 2 additions & 1 deletion integration/local/src/HygieneTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ package mill.integration
import mill.util.ScriptTestSuite
import utest._

class HygieneTests(fork: Boolean) extends IntegrationTestSuite("hygiene", fork) {
class HygieneTests(fork: Boolean, clientServer: Boolean)
extends IntegrationTestSuite("hygiene", fork, clientServer) {
val tests = Tests {
initWorkspace()

Expand Down
2 changes: 1 addition & 1 deletion integration/local/src/IntegrationTestSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package mill.integration
import mill.util.ScriptTestSuite
import utest._

abstract class IntegrationTestSuite(override val workspaceSlug: String, fork: Boolean)
abstract class IntegrationTestSuite(override val workspaceSlug: String, fork: Boolean, clientServer: Boolean = false)
extends ScriptTestSuite(fork) {

override def workspacePath: os.Path =
Expand Down
3 changes: 2 additions & 1 deletion integration/local/src/LargeProjectTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ package mill.integration
import mill.util.ScriptTestSuite
import utest._

class LargeProjectTests(fork: Boolean) extends IntegrationTestSuite("large-project", fork) {
class LargeProjectTests(fork: Boolean, clientServer: Boolean)
extends IntegrationTestSuite("large-project", fork, clientServer) {
val tests = Tests {
initWorkspace()
"test" - {
Expand Down
3 changes: 2 additions & 1 deletion integration/local/src/ScriptsInvalidationForeignTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import utest._

import scala.collection.mutable

class ScriptsInvalidationForeignTests(fork: Boolean) extends IntegrationTestSuite("invalidation-foreign", fork) {
class ScriptsInvalidationForeignTests(fork: Boolean, clientServer: Boolean)
extends IntegrationTestSuite("invalidation-foreign", fork, clientServer) {

override def buildPath = os.sub / "foreignA" / "build.sc"

Expand Down
3 changes: 2 additions & 1 deletion integration/local/src/ScriptsInvalidationTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import utest._

import scala.collection.mutable

class ScriptsInvalidationTests(fork: Boolean) extends IntegrationTestSuite("invalidation", fork) {
class ScriptsInvalidationTests(fork: Boolean, clientServer: Boolean)
extends IntegrationTestSuite("invalidation", fork, clientServer) {

def runTask(task: String) = {
val (successful, stdout) = evalStdout(task)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package mill.integration
package local

object DocAnnotationsTests extends DocAnnotationsTests(fork = false)
object HygieneTests extends HygieneTests(fork = false)
object LargeProjectTests extends LargeProjectTests(fork = false)
object ScriptsInvalidationTests extends ScriptsInvalidationTests(fork = false)
object ScriptsInvalidationForeignTests extends ScriptsInvalidationForeignTests(fork = false)
object DocAnnotationsTests extends DocAnnotationsTests(fork = false, false)
object HygieneTests extends HygieneTests(fork = false, false)
object LargeProjectTests extends LargeProjectTests(fork = false, false)
object ScriptsInvalidationTests extends ScriptsInvalidationTests(fork = false, false)
object ScriptsInvalidationForeignTests extends ScriptsInvalidationForeignTests(fork = false, false)
30 changes: 24 additions & 6 deletions main/test/src/util/ScriptTestSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ import os.Path
import utest._

import java.nio.file.NoSuchFileException
import scala.util.control.NonFatal

abstract class ScriptTestSuite(fork: Boolean) extends TestSuite {
abstract class ScriptTestSuite(fork: Boolean, clientServer: Boolean = false) extends TestSuite {
def workspaceSlug: String
def scriptSourcePath: os.Path
def buildPath: os.SubPath = os.sub / "build.sc"
Expand Down Expand Up @@ -90,18 +91,35 @@ abstract class ScriptTestSuite(fork: Boolean) extends TestSuite {
throw new NoSuchFileException(s"Mill binary to use for test not found under: ${millRelease}")
}

val extraArgs = if (clientServer) Seq() else Seq("--no-server")
val env = Map("MILL_TEST_SUITE" -> this.getClass().toString())

try {
os.proc(millReleaseFile, "-i", s).call(
wd,
os.proc(millReleaseFile, extraArgs, s).call(
cwd = wd,
stdin = os.Inherit,
stdout = stdout,
stderr = os.Inherit
stderr = os.Inherit,
env = env
)
if (clientServer) {
// try to stop the server
try {
os.proc(millReleaseFile, "shutdown").call(
cwd = wd,
stdin = os.Inherit,
stdout = stdout,
stderr = os.Inherit,
env = env
)
} catch { case NonFatal(_) => }
}
true
} catch { case e: Throwable => false }
} catch { case NonFatal(_) => false }
}
def meta(s: String): String = {
val Seq((List(selector), _)) = mill.define.ParseArgs.apply(Seq(s), SelectMode.Single).getOrElse(???)
val Seq((List(selector), _)) =
mill.define.ParseArgs.apply(Seq(s), SelectMode.Single).getOrElse(???)

val segments = selector._2.value.flatMap(_.pathSegments)
os.read(wd / "out" / segments.init / s"${segments.last}.json")
Expand Down

0 comments on commit 0683918

Please sign in to comment.