diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 054e8baff..a517962d7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -28,7 +28,7 @@ jobs: run: make tarball - name: Run Tests - run: make test && make unittest + run: make test - name: Check Wake Formatting run: ./bin/wake-format.native-cpp14-release --auto --dry-run diff --git a/Makefile b/Makefile index 194155f62..c344ababb 100644 --- a/Makefile +++ b/Makefile @@ -76,10 +76,6 @@ format: test: wake.db $(WAKE_ENV) ./bin/wake --in test_wake runTests -# We need to bootstrap job-cache to run the tests -unittest: all - $(WAKE_ENV) ./bin/wake --in test_wake runUnitTests - remoteCacheTests: all $(WAKE_ENV) ./bin/wake -d -x 'testPostgres Unit' diff --git a/build.wake b/build.wake index e9dfbe64c..4c2aff999 100644 --- a/build.wake +++ b/build.wake @@ -91,6 +91,7 @@ def bootstrapTarget targetFn variant = # Build all wake targets def targets = buildWake, + buildWakeUnit, buildWakeBox, buildFuseDaemon, buildShim, @@ -317,14 +318,10 @@ export def static _: Result Path Error = | getJobOutput from test_wake import topic wakeTestBinary -from test_wake import topic wakeUnitTestBinary publish wakeTestBinary = defaultWake, Nil -publish wakeUnitTestBinary = - buildWakeUnit, Nil - def defaultWake Unit = require Pass wakeVisible = doInstall "tmp" "default" diff --git a/tests/tests.wake b/tests/tests.wake index fd522e0c3..b08958aa1 100644 --- a/tests/tests.wake +++ b/tests/tests.wake @@ -25,17 +25,6 @@ from wake import _ # If tests/ is used externally, the topic is empty and the invoking wake is tested instead. export topic wakeTestBinary: Unit => Result (Pair String (List Path)) Error -# We need to handle the fact that sometimes tests are invoked from within /tests -# and sometimes they're invoked from outside of /tests. Additionally only when -# we have access to build_wake in our test environment can we figure out how -# to build the wake unit tests that we want to run. Since test_wake cannot depend -# on build_wake we instead make a topic that build_wake can publish to. This topic -# will be empty if your workspace starts in /tests but have the proper function -# in it if you start from one directory out. This means we can just have this test -# fail if it isn't run from the proper place. It's hacky but it works around -# the way we test currently. -export topic wakeUnitTestBinary: (variant: Pair String String) => Result (List Path) Error - def wakeToTestDir Unit = match (subscribe wakeTestBinary) buildTestWake, Nil -> require Pass (Pair path visible) = buildTestWake Unit @@ -44,17 +33,6 @@ def wakeToTestDir Unit = match (subscribe wakeTestBinary) Nil -> Pass (Pair "{wakePath}" Nil) _ -> Fail (makeError "Two wake binaries declared for testing!") -def wakeUnitToTest Unit = - require buildWakeUnit, Nil = subscribe wakeUnitTestBinary - else failWithError "wake-unit binary not found" - - require Pass wakeUnitLst = buildWakeUnit (Pair "native-cpp14-release" "native-c11-release") - - require Some result = head wakeUnitLst - else failWithError "wake-unit binary not found" - - Pass result - def showDiff (expect: String) (actual: String): Result Unit Error = require Pass expectFile = writeTempFile "diff.expect" expect else failWithError "Unable to write expect file" @@ -135,82 +113,6 @@ export def runTests (cmdline: List String): Result String Error = Pass "All {len tests | str} tests completed successfully." -export def runUnitTests _: Result Unit Error = - def testDirectory = "{@here}/wake-unit" - - require Pass testScript = source "{testDirectory}/unit-test.sh" - - def testName = - testDirectory - | replace `^${quote @here}/` "" - - def readFile list = match list - Some file -> - require Pass content = read file - - Pass (Some content) - None -> Pass None - - require Pass expectedStdout = - source "{testDirectory}/stdout" - | getPass - | readFile - - require Pass expectedStderr = - source "{testDirectory}/stderr" - | getPass - | readFile - - require Pass visibleFiles = sources testDirectory `.*` - - def inTestDir path = relative testDirectory path - - require Pass wakeUnitBin = wakeUnitToTest Unit - - def testJob = - makeExecPlan - ("./{testScript.getPathName.inTestDir}", wakeUnitBin.getPathName.inTestDir, Nil) - (wakeUnitBin, visibleFiles) - | setPlanDirectory testDirectory - | setPlanLabel "testing: {testName}" - | setPlanStdout logNever - | setPlanStderr logNever - | setPlanShare False - | runJobWith localRunner - - def removeCarriageReturns = replace `\r` "" - - require Pass jobStdout = - testJob.getJobFailedStdout - | rmap removeCarriageReturns - - require Pass jobStderr = - testJob.getJobFailedStderr - | rmap removeCarriageReturns - - require Pass _ = match testJob.isJobOk - True -> Pass Unit - False -> - def _ = println jobStderr - - Fail (makeError "Test failed ({format testJob.getJobStatus}). See above for details") - - require Pass _ = match expectedStderr - Some x if x ==* jobStderr -> Pass Unit - None -> Pass Unit - Some _ -> - def _ = println jobStderr - - Fail (makeError "Unexpected standard error. See above for details") - - match expectedStdout - Some x if x ==* jobStdout -> Pass Unit - None -> Pass Unit - _ -> - def _ = println jobStdout - - Fail (makeError "Unexpected standard output. See above for details") - def runTest (testScript: Path): Result Unit Error = def shouldPass = testScript diff --git a/tests/wake-unit/pass.sh b/tests/wake-unit/pass.sh new file mode 100755 index 000000000..f96f41117 --- /dev/null +++ b/tests/wake-unit/pass.sh @@ -0,0 +1,19 @@ +#! /bin/bash + +set -e + +function cleanup { + rm -rf job_cache_test + rm -rf .job_cache_test + rm -rf job_cache_test2 + rm -rf .job_cache_test2 +} +trap cleanup EXIT + +WAKE_UNIT="${1}/wake-unit" + +TERM=xterm-256color script --return --quiet -c "$WAKE_UNIT --no-color --tag threaded" /dev/null + +# We run the tests *twice* so that shared caching can run without a clean slate +TERM=xterm-256color script --return --quiet -c "$WAKE_UNIT --no-color --tag threaded" /dev/null > /dev/null + diff --git a/tests/wake-unit/unit-test.sh b/tests/wake-unit/unit-test.sh deleted file mode 100755 index 7e83dd49e..000000000 --- a/tests/wake-unit/unit-test.sh +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/sh - -set -e - -TERM=xterm-256color script --return --quiet -c "$1 --no-color --tag threaded" /dev/null - -# We run the tests *twice* so that shared caching can run without a clean slate -TERM=xterm-256color script --return --quiet -c "$1 --no-color --tag threaded" /dev/null > /dev/null - -rm -rf job_cache_test -rm -rf .job_cache_test -rm -rf job_cache_test2 -rm -rf .job_cache_test2 \ No newline at end of file diff --git a/wake.spec.in b/wake.spec.in index 9e91988e9..94cca2639 100644 --- a/wake.spec.in +++ b/wake.spec.in @@ -38,6 +38,7 @@ mkdir -p %{buildroot}/var/cache/wake /usr/bin/wake-rsc-tool /usr/bin/wake-format /usr/bin/job-cache +/usr/bin/wake-unit /usr/lib/wake /usr/share/wake %dir /var/cache/wake