Add travis-ci tests and Docker file

This commit is contained in:
zhengxie 2016-08-16 17:59:40 +08:00
parent 25fde48ba8
commit b6954410d9
6 changed files with 217 additions and 0 deletions

38
.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
*.pyc
*~
*#
seahub.db*
local_settings.py
startserver.sh
thirdpart/django
thirdpart/djblets
thirdpart/gunicorn*
thirdpart/*.pth
thirdpart/site.*
restart.sh
settings.py.mysql
settings.py.sqlite
secret_key.py
run-seahub.sh
setenv.sh
pylintrc
.DS_Store
*.mo
media/CACHE
media/custom
media/avatars/*
!media/avatars/default-non-register.jpg
!media/avatars/default.png
!media/default.jpg
!media/groups/default.jpg
static/scripts/dist
logs/
mysite.pid
notification_email.sh
send_user_notifications.sh
shutdown.sh
cscope*
docs/_build/*
deps
ghostdriver.log
seahub/thumbnail/thumb/*

15
.travis.yml Normal file
View File

@ -0,0 +1,15 @@
sudo: required
language: bash
services:
- docker
env:
global:
- LANG=en_US.UTF-8
- LC_ALL=en_US.UTF-8
before_install:
- docker run xiez/seafile-pro:v1.2 /bin/bash -c "export TERM=xterm && echo 2 | bash seafile-server-ubuntu-14-04-amd64-http 5.1.10"
script: make test

16
Dockerfile Normal file
View File

@ -0,0 +1,16 @@
FROM ubuntu:14.04
MAINTAINER Zheng Xie <xie.zheng@seafile.com>
# Avoid ERROR: invoke-rc.d: policy-rc.d denied execution of start.
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
RUN apt-get update
RUN apt-get install -y wget
WORKDIR /root
ADD . /root/
ADD https://download.seafile.com/d/6e5297246c/files/?p=/pro/seafile-pro-server_5.1.10_x86-64.tar.gz&dl=1 /opt/seafile-pro-server_5.1.10_x86-64.tar.gz
# Clean up for smaller image
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

4
Makefile Normal file
View File

@ -0,0 +1,4 @@
.PHONY: all test clean
test:
tests/post-deploy_test.sh

139
tests/assert.sh Normal file
View File

@ -0,0 +1,139 @@
#!/bin/bash
# assert.sh 1.0 - bash unit testing framework
# Copyright (C) 2009, 2010, 2011, 2012 Robert Lehmann
#
# http://github.com/lehmannro/assert.sh
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
export DISCOVERONLY=${DISCOVERONLY:-}
export DEBUG=${DEBUG:-}
export STOP=${STOP:-}
export INVARIANT=${INVARIANT:-}
args="$(getopt -n "$0" -l verbose,help,stop,discover,invariant vhxdi $*)" \
|| exit -1
for arg in $args; do
case "$arg" in
-h)
echo "$0 [-vxid] [--verbose] [--stop] [--invariant] [--discover]"
echo "`sed 's/./ /g' <<< "$0"` [-h] [--help]"
exit 0;;
--help)
cat <<EOF
Usage: $0 [options]
Language-agnostic unit tests for subprocesses.
Options:
-v, --verbose generate output for every individual test case
-x, --stop stop running tests after the first failure
-i, --invariant do not measure timings to remain invariant between runs
-d, --discover collect test suites only, do not run any tests
-h show brief usage information and exit
--help show this help message and exit
EOF
exit 0;;
-v|--verbose)
DEBUG=1;;
-x|--stop)
STOP=1;;
-i|--invariant)
INVARIANT=1;;
-d|--discover)
DISCOVERONLY=1;;
esac
done
printf -v _indent "\n\t" # local format helper
_assert_reset() {
tests_ran=0
tests_failed=0
tests_errors=()
tests_starttime="$(date +%s.%N)" # seconds_since_epoch.nanoseconds
}
assert_end() {
# assert_end [suite ..]
tests_endtime="$(date +%s.%N)"
tests="$tests_ran ${*:+$* }tests"
[[ -n "$DISCOVERONLY" ]] && echo "collected $tests." && _assert_reset && return
[[ -n "$DEBUG" ]] && echo
[[ -z "$INVARIANT" ]] && report_time=" in $(bc \
<<< "${tests_endtime%.N} - ${tests_starttime%.N}" \
| sed -e 's/\.\([0-9]\{0,3\}\)[0-9]*/.\1/' -e 's/^\./0./')s" \
|| report_time=
if [[ "$tests_failed" -eq 0 ]]; then
echo "all $tests passed$report_time."
else
for error in "${tests_errors[@]}"; do echo "$error"; done
echo "$tests_failed of $tests failed$report_time."
fi
tests_failed_previous=$tests_failed
_assert_reset
return $tests_failed_previous
}
assert() {
# assert <command> <expected stdout> [stdin]
(( tests_ran++ ))
[[ -n "$DISCOVERONLY" ]] && return
# printf required for formatting
printf -v expected "x${2:-}" # x required to overwrite older results
result="$(eval 2>/dev/null $1 <<< ${3:-})"
# Note: $expected is already decorated
if [[ "x$result" == "$expected" ]]; then
[[ -n "$DEBUG" ]] && echo -n .
return
fi
[[ -n "$DEBUG" ]] && echo -n X
result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")"
[[ -z "$result" ]] && result="nothing" || result="\"$result\""
[[ -z "$2" ]] && expected="nothing" || expected="\"$2\""
failure="expected $expected${_indent}got $result"
report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
tests_errors[$tests_failed]="$report"
(( tests_failed++ ))
if [[ -n "$STOP" ]]; then
[[ -n "$DEBUG" ]] && echo
echo "$report"
exit 1
fi
}
assert_raises() {
# assert_raises <command> <expected code> [stdin]
(( tests_ran++ ))
[[ -n "$DISCOVERONLY" ]] && return
(eval $1 <<< ${3:-}) > /dev/null 2>&1
status=$?
expected=${2:-0}
if [[ "$status" -eq "$expected" ]]; then
[[ -n "$DEBUG" ]] && echo -n .
return
fi
[[ -n "$DEBUG" ]] && echo -n X
failure="program terminated with code $status instead of $expected"
report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
tests_errors[$tests_failed]="$report"
(( tests_failed++ ))
if [[ -n "$STOP" ]]; then
[[ -n "$DEBUG" ]] && echo
echo "$report"
exit 1
fi
}
_assert_reset

5
tests/post-deploy_test.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
. tests/assert.sh
echo "Tests for seafile server package..."