diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..98cf03547301e3006ed618ad6377aecff48a2696
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,39 @@
+sudo: false
+language: php
+php:
+  - 5.4
+
+env:
+  global:
+    - APP=dav
+    - TC=litmus-v2
+  matrix:
+    - DB=sqlite
+
+branches:
+  only:
+    - master
+#    - /^stable\d+(\.\d+)?$/
+
+addons:
+  apt:
+    packages:
+    - realpath
+
+before_install:
+  - bash tests/travis/before_install.sh $DB
+
+install:
+  - bash tests/travis/install.sh $DB
+
+script:
+  - bash apps/$APP/tests/travis/$TC.sh
+
+matrix:
+  include:
+    - php: 5.4
+      env: DB=pgsql;TC=litmus-v1;APP=dav
+#    - php: 5.4
+#      env: DB=mysql;TC=caldavtester;APP=dav
+
+  fast_finish: true
diff --git a/apps/dav/tests/travis/litmus-v1.sh b/apps/dav/tests/travis/litmus-v1.sh
new file mode 100644
index 0000000000000000000000000000000000000000..587561ed29fcf7498b507a241e054337c1376701
--- /dev/null
+++ b/apps/dav/tests/travis/litmus-v1.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." &
+
+
+# compile litmus
+if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
+  mkdir -p /tmp/litmus
+  wget -O /tmp/litmus/litmus-0.13.tar.gz http://www.webdav.org/neon/litmus/litmus-0.13.tar.gz
+  cd /tmp/litmus
+  tar -xzf litmus-0.13.tar.gz
+  cd /tmp/litmus/litmus-0.13
+  ./configure
+  make
+fi
+
+# run the tests
+cd /tmp/litmus/litmus-0.13
+make URL=http://127.0.0.1:8888/remote.php/webdav CREDS="admin admin" TESTS="basic copymove props locks" check
diff --git a/apps/dav/tests/travis/litmus-v2.sh b/apps/dav/tests/travis/litmus-v2.sh
new file mode 100644
index 0000000000000000000000000000000000000000..40a06a26e6501e7000cde3bca1ca7d472c48caa7
--- /dev/null
+++ b/apps/dav/tests/travis/litmus-v2.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+SCRIPT=`realpath $0`
+SCRIPTPATH=`dirname $SCRIPT`
+
+
+# start the server
+php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." &
+
+
+# compile litmus
+if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
+  mkdir -p /tmp/litmus
+  wget -O /tmp/litmus/litmus-0.13.tar.gz http://www.webdav.org/neon/litmus/litmus-0.13.tar.gz
+  cd /tmp/litmus
+  tar -xzf litmus-0.13.tar.gz
+  cd /tmp/litmus/litmus-0.13
+  ./configure
+  make
+fi
+
+# run the tests
+cd /tmp/litmus/litmus-0.13
+make URL=http://127.0.0.1:8888/remote.php/dav/files/admin CREDS="admin admin" TESTS="basic copymove props locks" check
diff --git a/tests/travis/before_install.sh b/tests/travis/before_install.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ee8c3a9862a33b97f601b0b477e04eb93799f3e6
--- /dev/null
+++ b/tests/travis/before_install.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# @author Thomas Müller
+# @copyright 2014 Thomas Müller thomas.mueller@tmit.eu
+#
+
+set -e
+
+WORKDIR=$PWD
+DB=$1
+echo "Work directory: $WORKDIR"
+echo "Database: $DB"
+
+if [ "$DB" == "mysql" ] ; then
+  echo "Setting up mysql ..."
+  mysql -e 'create database oc_autotest;'
+  mysql -u root -e "CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY 'owncloud'";
+  mysql -u root -e "grant all on oc_autotest.* to 'oc_autotest'@'localhost'";
+  mysql -e "SELECT User FROM mysql.user;"
+fi
+
+if [ "$DB" == "pgsql" ] ; then
+  createuser -U travis -s oc_autotest
+fi
+
+#if [ "$DB" == "oracle" ] ; then
+#  if [ ! -f before_install_oracle.sh ]; then
+#    wget https://raw.githubusercontent.com/owncloud/administration/master/travis-ci/before_install_oracle.sh
+#  fi
+#  bash ./before_install_oracle.sh
+#fi
+
+#
+# copy custom php.ini settings
+#
+if [ $(phpenv version-name) != 'hhvm' ]; then
+  phpenv config-add tests/travis/custom.ini
+fi
diff --git a/tests/travis/custom.ini b/tests/travis/custom.ini
new file mode 100644
index 0000000000000000000000000000000000000000..7a2c0aab4264c60161c40d8716c81478945bcd81
--- /dev/null
+++ b/tests/travis/custom.ini
@@ -0,0 +1,4 @@
+always_populate_raw_post_data = -1
+mbstring.func_overload = 0
+default_charset = 'UTF-8'
+output_buffering = off
diff --git a/tests/travis/install.sh b/tests/travis/install.sh
new file mode 100755
index 0000000000000000000000000000000000000000..fe7907f798caa1498558131f114b9b947acdaa89
--- /dev/null
+++ b/tests/travis/install.sh
@@ -0,0 +1,180 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# @author Thomas Müller
+# @copyright 2014 Thomas Müller thomas.mueller@tmit.eu
+#
+
+set -e
+
+DATABASENAME=oc_autotest
+DATABASEUSER=oc_autotest
+ADMINLOGIN=admin
+BASEDIR=$PWD
+
+DBCONFIGS="sqlite mysql pgsql oracle"
+PHPUNIT=$(which phpunit)
+
+# set oracle home if it is not set
+TRAVIS_ORACLE_HOME="/usr/lib/oracle/xe/app/oracle/product/10.2.0/server"
+[ -z "$ORACLE_HOME" ] && ORACLE_HOME=$TRAVIS_ORACLE_HOME
+
+if [ $1 ]; then
+	FOUND=0
+	for DBCONFIG in $DBCONFIGS; do
+		if [ $1 = $DBCONFIG ]; then
+			FOUND=1
+			break
+		fi
+	done
+	if [ $FOUND = 0 ]; then
+		echo -e "Unknown database config name \"$1\"\n" >&2
+		print_syntax
+		exit 2
+	fi
+fi
+
+# use tmpfs for datadir - should speedup unit test execution
+DATADIR=$BASEDIR/data-autotest
+
+echo "Using database $DATABASENAME"
+
+# create autoconfig for sqlite, mysql and postgresql
+cat > ./tests/autoconfig-sqlite.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+  'installed' => false,
+  'dbtype' => 'sqlite',
+  'dbtableprefix' => 'oc_',
+  'adminlogin' => '$ADMINLOGIN',
+  'adminpass' => 'admin',
+  'directory' => '$DATADIR',
+);
+DELIM
+
+cat > ./tests/autoconfig-mysql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+  'installed' => false,
+  'dbtype' => 'mysql',
+  'dbtableprefix' => 'oc_',
+  'adminlogin' => '$ADMINLOGIN',
+  'adminpass' => 'admin',
+  'directory' => '$DATADIR',
+  'dbuser' => '$DATABASEUSER',
+  'dbname' => '$DATABASENAME',
+  'dbhost' => 'localhost',
+  'dbpass' => 'owncloud',
+);
+DELIM
+
+cat > ./tests/autoconfig-pgsql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+  'installed' => false,
+  'dbtype' => 'pgsql',
+  'dbtableprefix' => 'oc_',
+  'adminlogin' => '$ADMINLOGIN',
+  'adminpass' => 'admin',
+  'directory' => '$DATADIR',
+  'dbuser' => '$DATABASEUSER',
+  'dbname' => '$DATABASENAME',
+  'dbhost' => 'localhost',
+  'dbpass' => '',
+);
+DELIM
+
+cat > ./tests/autoconfig-oracle.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+  'installed' => false,
+  'dbtype' => 'oci',
+  'dbtableprefix' => 'oc_',
+  'adminlogin' => '$ADMINLOGIN',
+  'adminpass' => 'admin',
+  'directory' => '$DATADIR',
+  'dbuser' => '$DATABASENAME',
+  'dbname' => 'XE',
+  'dbhost' => 'localhost',
+  'dbpass' => 'owncloud',
+  'loglevel' => 0,
+);
+DELIM
+
+function execute_tests {
+	echo "Setup environment for $1 testing ..."
+	# back to root folder
+	cd $BASEDIR
+
+	# revert changes to tests/data
+	git checkout tests/data/*
+
+	# reset data directory
+	rm -rf $DATADIR
+	mkdir $DATADIR
+
+	cp tests/preseed-config.php config/config.php
+
+	if [ "$1" == "oracle" ] ; then
+		echo "Load Oracle environment variables so that we can run 'sqlplus'."
+		. $ORACLE_HOME/bin/oracle_env.sh
+
+		echo "create the database"
+		sqlplus -s -l / as sysdba <<EOF
+			create user $DATABASENAME identified by owncloud;
+			alter user $DATABASENAME default tablespace users
+			temporary tablespace temp
+			quota unlimited on users;
+			grant create session
+			, create table
+			, create procedure
+			, create sequence
+			, create trigger
+			, create view
+			, create synonym
+			, alter session
+			to $DATABASENAME;
+			exit;
+EOF
+	fi
+
+	# copy autoconfig
+	cp $BASEDIR/tests/autoconfig-$1.php $BASEDIR/config/autoconfig.php
+
+	# trigger installation
+	echo "INDEX"
+	php -f index.php
+	echo "END INDEX"
+
+	#test execution
+	cd tests
+	#php -f enable_all.php
+}
+
+#
+# start test execution
+#
+if [ -z "$1" ]
+  then
+	# run all known database configs
+	for DBCONFIG in $DBCONFIGS; do
+		execute_tests $DBCONFIG
+	done
+else
+	execute_tests $1 $2 $3
+fi
+
+# show environment
+echo "owncloud configuration:"
+cat $BASEDIR/config/config.php
+
+
+echo "data directory:"
+ls -ll $DATADIR
+
+echo "owncloud.log:"
+[ -f "$DATADIR/owncloud.log" ] && cat $DATADIR/owncloud.log
+[ -f "$BASEDIR/data/owncloud.log" ] && cat $BASEDIR/data/owncloud.log
+
+cd $BASEDIR