diff --git a/.kitchen.yml b/.kitchen.yml
new file mode 100644
index 0000000..84071c0
--- /dev/null
+++ b/.kitchen.yml
@@ -0,0 +1,48 @@
+---
+driver:
+  name: docker
+  hostname: mongodb.ci.local
+  use_sudo: false
+
+provisioner:
+  name: salt_solo
+  salt_install: bootstrap
+  salt_bootstrap_url: https://bootstrap.saltstack.com
+  salt_version: latest
+  require_chef: false
+  log_level: error
+  formula: mongodb
+  grains:
+    noservices: True
+  state_top:
+    base:
+      "*":
+        - mongodb
+  pillars:
+    top.sls:
+      base:
+        "*":
+          - mongodb
+
+verifier:
+  name: inspec
+  sudo: true
+
+platforms:
+  - name: <%=ENV['PLATFORM'] || 'ubuntu-xenial'%>
+    driver_config:
+      image: <%=ENV['PLATFORM'] || 'trevorj/salty-whales:xenial'%>
+      platform: ubuntu
+
+suites:
+
+  - name: cluster
+    provisioner:
+      pillars-from-files:
+        mongodb.sls: tests/pillar/cluster.sls
+
+  - name: single
+    provisioner:
+      pillars-from-files:
+        mongodb.sls: tests/pillar/single.sls
+# vim: ft=yaml sw=2 ts=2 sts=2 tw=125
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..7a77247
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,39 @@
+sudo: required
+services:
+  - docker
+
+install:
+  - pip install PyYAML
+  - pip install virtualenv
+  - |
+    test -e Gemfile || cat <<EOF > Gemfile
+    source 'https://rubygems.org'
+    gem 'rake'
+    gem 'test-kitchen'
+    gem 'kitchen-docker'
+    gem 'kitchen-inspec'
+    gem 'inspec'
+    gem 'kitchen-salt', :git => 'https://github.com/salt-formulas/kitchen-salt.git'
+  - bundle install
+
+env:
+    - PLATFORM=trevorj/salty-whales:trusty
+    - PLATFORM=trevorj/salty-whales:xenial
+
+before_script:
+  - set -o pipefail
+  - make test | tail
+
+script:
+  - test ! -e .kitchen.yml || bundle exec kitchen test -t tests/integration
+
+notifications:
+  webhooks:
+    urls:
+      - https://webhooks.gitter.im/e/6123573504759330786b
+    on_success: change  # options: [always|never|change] default: always
+    on_failure: never  # options: [always|never|change] default: always
+    on_start: never     # options: [always|never|change] default: always
+    on_cancel: never    # options: [always|never|change] default: always
+    on_error: never    # options: [always|never|change] default: always
+  email: false
diff --git a/mongodb/server.sls b/mongodb/server.sls
index c209970..73ea09f 100644
--- a/mongodb/server.sls
+++ b/mongodb/server.sls
@@ -21,8 +21,10 @@
   - user: mongodb
   - require:
     - pkg: mongodb_packages
+  {%- if not grains.get('noservices', False) %}
   - watch_in:
     - service: mongodb_service
+  {%- endif %}
 
 {%- endif %}
 
@@ -30,6 +32,8 @@
   file.directory:
     - makedirs: true
 
+{%- if not grains.get('noservices', False) %}
+
 mongodb_service:
   service.running:
   - name: {{ server.service }}
@@ -40,6 +44,8 @@
   - watch:
     - file: /etc/mongodb.conf
 
+{%- endif %}
+
 {%- if server.members is not defined  or server.master == pillar.linux.system.name %}
 {# We are not a cluster or we are master #}
 
@@ -50,6 +56,8 @@
   - mode: 600
   - user: root
 
+{%- if not grains.get('noservices', False) %}
+
 mongodb_change_root_password:
   cmd.run:
   - name: 'mongo localhost:27017/admin /var/tmp/mongodb_user.js && touch {{ server.lock_dir }}/mongodb_password_changed'
@@ -58,6 +66,8 @@
     - service: mongodb_service
   - creates: {{ server.lock_dir }}/mongodb_password_changed
 
+{%- endif %}
+
 {%- for database_name, database in server.get('database', {}).iteritems() %}
 
 /var/tmp/mongodb_user_{{ database_name }}.js:
@@ -69,18 +79,24 @@
   - defaults:
       database_name: {{ database_name }}
 
+{%- if not grains.get('noservices', False) %}
+
 mongodb_{{ database_name }}_fix_role:
   cmd.run:
   - name: 'mongo localhost:27017/admin -u admin -p {{ server.admin.password }} /var/tmp/mongodb_user_{{ database_name }}.js && touch {{ server.lock_dir }}/mongodb_user_{{ database_name }}_created'
   - require:
     - file: /var/tmp/mongodb_user_{{ database_name }}.js
+    {%- if not grains.get('noservices', False) %}
     - service: mongodb_service
+    {%- endif%}
   - creates: {{ server.lock_dir }}/mongodb_user_{{ database_name }}_created
   {%- if server.members is defined %}
   require:
     - cmd: mongodb_setup_cluster
   {%- endif %}
 
+{%- endif %}
+
 {%- endfor %}
 
 {%- if server.members is defined %}
@@ -97,7 +113,9 @@
   - name: 'mongo localhost:27017/admin /var/tmp/mongodb_cluster.js && mongo localhost:27017/admin --quiet --eval "rs.conf()" | grep object -q'
   - unless: 'mongo localhost:27017/admin -u admin -p {{ server.admin.password }} --quiet --eval "rs.conf()" | grep object -q'
   - require:
+    {%- if not grains.get('noservices', False) %}
     - service: mongodb_service
+    {%- endif %}
     - file: /var/tmp/mongodb_cluster.js
   - require_in:
     - cmd: mongodb_change_root_password
diff --git a/tests/pillar/cluster.sls b/tests/pillar/cluster.sls
new file mode 100644
index 0000000..df2b2fd
--- /dev/null
+++ b/tests/pillar/cluster.sls
@@ -0,0 +1,17 @@
+mongodb:
+  server:
+    enabled: true
+    admin:
+      user: admin
+      password: magicunicorn
+    master: mongo01
+    members:
+      - host: 192.168.1.11
+        priority: 2
+      - host: 192.168.1.12
+      - host: 192.168.1.13
+    replica_set: default
+    shared_key: magicunicorn
+linux:
+  system:
+    name: name
diff --git a/tests/pillar/single.sls b/tests/pillar/single.sls
new file mode 100644
index 0000000..3d1e205
--- /dev/null
+++ b/tests/pillar/single.sls
@@ -0,0 +1,20 @@
+mongodb:
+  server:
+    enabled: true
+    bind:
+      address: 0.0.0.0
+      port: 27017
+    admin:
+      username: admin
+      password: magicunicorn
+    database:
+      dbname:
+        enabled: true
+        encoding: 'utf8'
+        users:
+        - name: 'username'
+          password: 'password'
+ceilometer:
+  server:
+    database:
+      password: 'password'
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
new file mode 100755
index 0000000..ab84ffb
--- /dev/null
+++ b/tests/run_tests.sh
@@ -0,0 +1,172 @@
+#!/usr/bin/env bash
+
+set -e
+[ -n "$DEBUG" ] && set -x
+
+CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+METADATA=${CURDIR}/../metadata.yml
+FORMULA_NAME=$(cat $METADATA | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']")
+
+## Overrideable parameters
+PILLARDIR=${PILLARDIR:-${CURDIR}/pillar}
+BUILDDIR=${BUILDDIR:-${CURDIR}/build}
+VENV_DIR=${VENV_DIR:-${BUILDDIR}/virtualenv}
+DEPSDIR=${BUILDDIR}/deps
+
+SALT_FILE_DIR=${SALT_FILE_DIR:-${BUILDDIR}/file_root}
+SALT_PILLAR_DIR=${SALT_PILLAR_DIR:-${BUILDDIR}/pillar_root}
+SALT_CONFIG_DIR=${SALT_CONFIG_DIR:-${BUILDDIR}/salt}
+SALT_CACHE_DIR=${SALT_CACHE_DIR:-${SALT_CONFIG_DIR}/cache}
+
+SALT_OPTS="${SALT_OPTS} --retcode-passthrough --local -c ${SALT_CONFIG_DIR}"
+
+if [ "x${SALT_VERSION}" != "x" ]; then
+    PIP_SALT_VERSION="==${SALT_VERSION}"
+fi
+
+## Functions
+log_info() {
+    echo "[INFO] $*"
+}
+
+log_err() {
+    echo "[ERROR] $*" >&2
+}
+
+setup_virtualenv() {
+    log_info "Setting up Python virtualenv"
+    virtualenv $VENV_DIR
+    source ${VENV_DIR}/bin/activate
+    pip install salt${PIP_SALT_VERSION}
+}
+
+setup_pillar() {
+    [ ! -d ${SALT_PILLAR_DIR} ] && mkdir -p ${SALT_PILLAR_DIR}
+    echo "base:" > ${SALT_PILLAR_DIR}/top.sls
+    for pillar in ${PILLARDIR}/*; do
+        state_name=$(basename ${pillar%.sls})
+        echo -e "  ${state_name}:\n    - ${state_name}" >> ${SALT_PILLAR_DIR}/top.sls
+    done
+}
+
+setup_salt() {
+    [ ! -d ${SALT_FILE_DIR} ] && mkdir -p ${SALT_FILE_DIR}
+    [ ! -d ${SALT_CONFIG_DIR} ] && mkdir -p ${SALT_CONFIG_DIR}
+    [ ! -d ${SALT_CACHE_DIR} ] && mkdir -p ${SALT_CACHE_DIR}
+
+    echo "base:" > ${SALT_FILE_DIR}/top.sls
+    for pillar in ${PILLARDIR}/*.sls; do
+        state_name=$(basename ${pillar%.sls})
+        echo -e "  ${state_name}:\n    - ${FORMULA_NAME}" >> ${SALT_FILE_DIR}/top.sls
+    done
+
+    cat << EOF > ${SALT_CONFIG_DIR}/minion
+file_client: local
+cachedir: ${SALT_CACHE_DIR}
+verify_env: False
+
+file_roots:
+  base:
+  - ${SALT_FILE_DIR}
+  - ${CURDIR}/..
+  - /usr/share/salt-formulas/env
+
+pillar_roots:
+  base:
+  - ${SALT_PILLAR_DIR}
+  - ${PILLARDIR}
+EOF
+}
+
+fetch_dependency() {
+    dep_name="$(echo $1|cut -d : -f 1)"
+    dep_source="$(echo $1|cut -d : -f 2-)"
+    dep_root="${DEPSDIR}/$(basename $dep_source .git)"
+    dep_metadata="${dep_root}/metadata.yml"
+
+    [ -d /usr/share/salt-formulas/env/${dep_name} ] && log_info "Dependency $dep_name already present in system-wide salt env" && return 0
+    [ -d $dep_root ] && log_info "Dependency $dep_name already fetched" && return 0
+
+    log_info "Fetching dependency $dep_name"
+    [ ! -d ${DEPSDIR} ] && mkdir -p ${DEPSDIR}
+    git clone $dep_source ${DEPSDIR}/$(basename $dep_source .git)
+    ln -s ${dep_root}/${dep_name} ${SALT_FILE_DIR}/${dep_name}
+
+    METADATA="${dep_metadata}" install_dependencies
+}
+
+install_dependencies() {
+    grep -E "^dependencies:" ${METADATA} >/dev/null || return 0
+    (python - | while read dep; do fetch_dependency "$dep"; done) << EOF
+import sys,yaml
+for dep in yaml.load(open('${METADATA}', 'ro'))['dependencies']:
+    print '%s:%s' % (dep["name"], dep["source"])
+EOF
+}
+
+clean() {
+    log_info "Cleaning up ${BUILDDIR}"
+    [ -d ${BUILDDIR} ] && rm -rf ${BUILDDIR} || exit 0
+}
+
+salt_run() {
+    [ -e ${VEN_DIR}/bin/activate ] && source ${VENV_DIR}/bin/activate
+    salt-call ${SALT_OPTS} $*
+}
+
+prepare() {
+    [ -d ${BUILDDIR} ] && mkdir -p ${BUILDDIR}
+
+    which salt-call || setup_virtualenv
+    setup_pillar
+    setup_salt
+    install_dependencies
+}
+
+run() {
+    for pillar in ${PILLARDIR}/*.sls; do
+        state_name=$(basename ${pillar%.sls})
+        salt_run --id=${state_name} state.show_sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1)
+    done
+}
+
+real_run() {
+    for pillar in ${PILLARDIR}/*.sls; do
+        state_name=$(basename ${pillar%.sls})
+        salt_run --id=${state_name} state.sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1)
+    done
+}
+
+_atexit() {
+    RETVAL=$?
+    trap true INT TERM EXIT
+
+    if [ $RETVAL -ne 0 ]; then
+        log_err "Execution failed"
+    else
+        log_info "Execution successful"
+    fi
+    return $RETVAL
+}
+
+## Main
+trap _atexit INT TERM EXIT
+
+case $1 in
+    clean)
+        clean
+        ;;
+    prepare)
+        prepare
+        ;;
+    run)
+        run
+        ;;
+    real-run)
+        real_run
+        ;;
+    *)
+        prepare
+        run
+        ;;
+esac
