diff --git a/.travis.yml b/.travis.yml index dd7359af9..2bbc65655 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,12 @@ language: go go: - 1.8 + - 1.9 + +env: +- TEST_SUITE="lint" +- TEST_SUITE="unit-test" +- TEST_SUITE="integ-test" sudo: false @@ -8,9 +14,6 @@ sudo: false dist: trusty addons: - apt: - packages: - - openssl postgresql: "9.5" services: @@ -19,12 +22,7 @@ services: install: - go get github.com/constabulary/gb/... -# Generate a self-signed X.509 certificate for TLS. -before_script: - - openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes -subj /CN=localhost - script: - - ./scripts/install-local-kafka.sh - ./scripts/travis-test.sh notifications: diff --git a/scripts/build-test-lint.sh b/scripts/build-test-lint.sh index cf1f37b78..16078173d 100755 --- a/scripts/build-test-lint.sh +++ b/scripts/build-test-lint.sh @@ -19,8 +19,5 @@ go build github.com/matrix-org/dendrite/cmd/... ./scripts/find-lint.sh -echo "Double checking spelling..." -misspell -error src *.md - echo "Testing..." gb test diff --git a/scripts/find-lint.sh b/scripts/find-lint.sh index 81ca806b0..e2df519c5 100755 --- a/scripts/find-lint.sh +++ b/scripts/find-lint.sh @@ -31,7 +31,7 @@ then args="$args --enable-gc" fi echo "Installing lint search engine..." -go install github.com/alecthomas/gometalinter/ +gb build github.com/alecthomas/gometalinter/ gometalinter --config=linter.json ./... --install echo "Looking for lint..." diff --git a/scripts/travis-test.sh b/scripts/travis-test.sh index 5851c3b0f..e472760a6 100755 --- a/scripts/travis-test.sh +++ b/scripts/travis-test.sh @@ -1,6 +1,10 @@ #! /bin/bash # The entry point for travis tests +# +# TEST_SUITE env var can be set to "lint", "unit-test" or "integ-test", in +# which case only the linting, unit tests or integration tests will be run +# respectively. If not specified or null all tests are run. set -eu @@ -8,20 +12,44 @@ set -eu export GOGC=400 export DENDRITE_LINT_DISABLE_GC=1 -# Check that the servers build (this is done explicitly because `gb build` can silently fail (exit 0) and then we'd test a stale binary) -gb build github.com/matrix-org/dendrite/cmd/dendrite-room-server -gb build github.com/matrix-org/dendrite/cmd/roomserver-integration-tests -gb build github.com/matrix-org/dendrite/cmd/dendrite-sync-api-server -gb build github.com/matrix-org/dendrite/cmd/syncserver-integration-tests -gb build github.com/matrix-org/dendrite/cmd/create-account -gb build github.com/matrix-org/dendrite/cmd/dendrite-media-api-server -gb build github.com/matrix-org/dendrite/cmd/mediaapi-integration-tests -gb build github.com/matrix-org/dendrite/cmd/client-api-proxy +export GOPATH="$(pwd):$(pwd)/vendor" +export PATH="$PATH:$(pwd)/vendor/bin:$(pwd)/bin" -# Run unit tests and linters -./scripts/build-test-lint.sh +if [ "${TEST_SUITE:-lint}" == "lint" ]; then + ./scripts/find-lint.sh +fi -# Run the integration tests -bin/roomserver-integration-tests -bin/syncserver-integration-tests -bin/mediaapi-integration-tests +if [ "${TEST_SUITE:-unit-test}" == "unit-test" ]; then + gb test +fi + +if [ "${TEST_SUITE:-integ-test}" == "integ-test" ]; then + gb build + + # Check that all the packages can build. + # When `go build` is given multiple packages it won't output anything, and just + # checks that everything builds. This seems to do a better job of handling + # missing imports than `gb build` does. + go build github.com/matrix-org/dendrite/cmd/... + + # Check that the servers build (this is done explicitly because `gb build` can silently fail (exit 0) and then we'd test a stale binary) + gb build github.com/matrix-org/dendrite/cmd/dendrite-room-server + gb build github.com/matrix-org/dendrite/cmd/roomserver-integration-tests + gb build github.com/matrix-org/dendrite/cmd/dendrite-sync-api-server + gb build github.com/matrix-org/dendrite/cmd/syncserver-integration-tests + gb build github.com/matrix-org/dendrite/cmd/create-account + gb build github.com/matrix-org/dendrite/cmd/dendrite-media-api-server + gb build github.com/matrix-org/dendrite/cmd/mediaapi-integration-tests + gb build github.com/matrix-org/dendrite/cmd/client-api-proxy + + # Create necessary certificates and keys to run dendrite + echo "Generating certs..." + time openssl req -x509 -newkey rsa:512 -keyout server.key -out server.crt -days 365 -nodes -subj /CN=localhost + echo "Installing kafka..." + time ./scripts/install-local-kafka.sh + + # Run the integration tests + bin/roomserver-integration-tests + bin/syncserver-integration-tests + bin/mediaapi-integration-tests +fi