| #!/bin/bash |
| |
| set -eo pipefail |
| |
| go version |
| |
| # Check if Github Actions is running |
| if [ $CI = "true" ]; then |
| # Enable code coverage |
| # export because tests run in a subprocess |
| export covermode="-covermode=atomic" |
| export coverprofile="-coverprofile=cover_tmp.out" |
| echo "mode: atomic" >> cover.out |
| fi |
| |
| # Run `go list` BEFORE setting GOFLAGS so that the output is in the right |
| # format for grep. |
| # export packages because the test will run in a sub process. |
| export packages=$(go list ./... | grep "github.com/dgraph-io/badger/v4/") |
| |
| tags="-tags=jemalloc" |
| |
| # Compile the Badger binary |
| pushd badger |
| go build -v $tags . |
| popd |
| |
| # Run the memory intensive tests first. |
| manual() { |
| timeout="-timeout 2m" |
| echo "==> Running package tests for $packages" |
| set -e |
| for pkg in $packages; do |
| echo "===> Testing $pkg" |
| go test $tags -timeout=25m $covermode $coverprofile -failfast -race -parallel 16 $pkg && write_coverage || return 1 |
| done |
| echo "==> DONE package tests" |
| |
| echo "==> Running manual tests" |
| # Run the special Truncate test. |
| rm -rf p |
| set -e |
| go test $tags $timeout $covermode $coverprofile -run='TestTruncateVlogNoClose$' -failfast --manual=true && write_coverage || return 1 |
| truncate --size=4096 p/000000.vlog |
| go test $tags $timeout $covermode $coverprofile -run='TestTruncateVlogNoClose2$' -failfast --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -run='TestTruncateVlogNoClose3$' -failfast --manual=true && write_coverage || return 1 |
| rm -rf p |
| |
| # TODO(ibrahim): Let's make these tests have Manual prefix. |
| # go test $tags -run='TestManual' --manual=true --parallel=2 |
| # TestWriteBatch |
| # TestValueGCManaged |
| # TestDropPrefix |
| # TestDropAllManaged |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestBigKeyValuePairs$' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestPushValueLogLimit' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestKeyCount' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestIteratePrefix' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestIterateParallel' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestBigStream' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestGoroutineLeak' --manual=true && write_coverage || return 1 |
| go test $tags $timeout $covermode $coverprofile -failfast -run='TestGetMore' --manual=true && write_coverage || return 1 |
| |
| echo "==> DONE manual tests" |
| } |
| |
| root() { |
| # Run the normal tests. |
| # go test -timeout=25m -v -race github.com/dgraph-io/badger/v4/... |
| |
| echo "==> Running root level tests." |
| go test $tags -v -race -parallel=16 -timeout=25m -failfast $covermode $coverprofile . && write_coverage || return 1 |
| echo "==> DONE root level tests" |
| } |
| |
| stream() { |
| set -eo pipefail |
| pushd badger |
| baseDir=$(mktemp -d -p .) |
| ./badger benchmark write -s --dir=$baseDir/test | tee $baseDir/log.txt |
| ./badger benchmark read --dir=$baseDir/test --full-scan | tee --append $baseDir/log.txt |
| ./badger benchmark read --dir=$baseDir/test -d=30s | tee --append $baseDir/log.txt |
| ./badger stream --dir=$baseDir/test -o "$baseDir/test2" | tee --append $baseDir/log.txt |
| count=$(cat "$baseDir/log.txt" | grep "at program end: 0 B" | wc -l) |
| rm -rf $baseDir |
| if [ $count -ne 4 ]; then |
| echo "LEAK detected in Badger stream." |
| return 1 |
| fi |
| echo "==> DONE stream test" |
| popd |
| return 0 |
| } |
| |
| write_coverage() { |
| if [[ $CI = "true" ]]; then |
| if [[ -f cover_tmp.out ]]; then |
| sed -i '1d' cover_tmp.out |
| cat cover_tmp.out >> cover.out && rm cover_tmp.out |
| fi |
| fi |
| |
| } |
| |
| # parallel tests currently not working |
| # parallel --halt now,fail=1 --progress --line-buffer ::: stream manual root |
| # run tests in sequence |
| root |
| stream |
| manual |