diff --git a/.kitchen.yml b/.kitchen.yml
new file mode 100644
index 0000000..ed53d70
--- /dev/null
+++ b/.kitchen.yml
@@ -0,0 +1,43 @@
+---
+driver:
+  name: docker
+  hostname: aptly.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: aptly
+  grains:
+    noservices: True
+  state_top:
+    base:
+      "*":
+        - aptly
+  pillars:
+    top.sls:
+      base:
+        "*":
+          - aptly
+
+verifier:
+  name: inspec
+  sudo: true
+
+platforms:
+  - name: <%=ENV['PLATFORM'] || 'ubuntu-xenial'%>
+    driver_config:
+      image: <%=ENV['PLATFORM'] || 'trevorj/salty-whales:xenial'%>
+      platform: ubuntu
+
+suites:
+
+  - name: default
+    provisioner:
+      pillars-from-files:
+        aptly.sls: tests/pillar/default.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/aptly/map.jinja b/aptly/map.jinja
index 22882c4..00a9a46 100644
--- a/aptly/map.jinja
+++ b/aptly/map.jinja
@@ -3,7 +3,7 @@
   'Debian': {
     'source': {
       'engine': 'pkg',
-      'pkgs': ['aptly', 'bzip2'],
+      'pkgs': ['aptly', 'bzip2', 'cron'],
     },
     'home_dir': '/var/lib/aptly',
     'root_dir': '/srv/aptly',
@@ -12,6 +12,8 @@
     'gpg': {
       'keypair_id': pillar.aptly.server.gpg_keypair_id|default(''),
       'passphrase': pillar.aptly.server.gpg_passphrase|default(''),
+      'public_key': pillar.aptly.server.gpg_public_key|default(''),
+      'private_key': pillar.aptly.server.gpg_private_key|default(''),
       'keyring': '.gnupg/trustedkeys.gpg',
       'homedir': '.gnupg',
       'keyserver': 'keys.gnupg.net',
diff --git a/aptly/server/init.sls b/aptly/server/init.sls
index 60a865f..85bf252 100644
--- a/aptly/server/init.sls
+++ b/aptly/server/init.sls
@@ -99,7 +99,7 @@
   - user: aptly
   - group: aptly
   - require:
-    - file: aptly_home_dir
+    - file: aptly_root_dir
 
 {%- if server.no_config|default(False) == True %}
 aptly_conf:
diff --git a/tests/pillar/default.sls b/tests/pillar/default.sls
new file mode 100644
index 0000000..8f85ef1
--- /dev/null
+++ b/tests/pillar/default.sls
@@ -0,0 +1,69 @@
+aptly:
+  server:
+    enabled: true
+    repo:
+      myrepo:
+        distribution: trusty
+        component: main
+        architectures: amd64
+        comment: "Custom components"
+        sources: false
+        publisher:
+          component: mycomponent
+          distributions:
+            - nightly/trusty
+    mirror_update:
+      enabled: true
+      hour: 2
+      minute: random
+    gpg_passphrase: passphrase
+    gpg_private_key: |
+      -----BEGIN PGP PRIVATE KEY BLOCK-----
+      Version: BCPG C# v1.6.1.0
+
+      lQOsBFjjpiUBCADMp/x13InHXlyQGLDqmXMZrBr5+Qc1fc1Mp2asW1WcxlmA4fMf
+      OOLoQUlMoyl61WL46ldGzRH1wG7UNT6Zoi+3IqOQTr+jMJrspR2YQKSc5jb+yXPf
+      q6p4wxe3emSc7MiYgyspHYjaUpX0A4uWgUB7rlTUPoPU3aDjygSwK8Oxsa1qsw9M
+      3buDrt9ZOU9HDkL5I1zXZ2VIUYGvgrR666EWxbPXfoJTwVimblcw1CdJ5s0js2p4
+      X75jnsNhKaFTM5jziQWrUmRjCQ9HfQq27BeIMR0BqzA+Lr5UW6y1i1yMEVAtmRjY
+      SyC5GP9SUCxsflU56t1OjaKSHgZB7dQIkTpFABEBAAH/AwMCmDb/2n/TZx9goSSD
+      lSRmAWiuEXSqFNJt+ilNYz4+AWxjabc5Yo9Yp7YA9YhtHNo8XLvpd+ORRjna+eCn
+      ZT8mADfJmVEsLMMtgl0IRj84utEggRM2yTz1TXpgEZlhkBPufB/q+JqC8cZ5qgqc
+      jT5gpAgu/aqGlwrww95zsiNPHyvLh00qYhYIie4E9Eoesma5szfXscdcrH55yk7X
+      E75tXd1lGVihH1hMixpAzeMPQtqyf3VATkRJizFmVfDhTFnr3F98DvlsikkT0QiA
+      DHlQ3P9efuSxfbW7FdB36BmwwD2zqW1rsY6+amx9GFq0jjmT6dr1BPzdB0SP/zmC
+      ise/YwjgzdsJi8cfn+6A/ybW7QL/qiVCVxVXxmdWeIOhM3c3gBOAEItfTdgheMTp
+      0+eiC67YwiPhd3uP4VkVkdu4HbiRhbqS2xo0XMU2pdpgQS3nbpPgjOJy2d/zWOIT
+      um36botJhKGSAR+5ZR4ymwEbmu8XRh+bfL/1yP24ajlRAcycgMQ84CKsguo3IMBT
+      SJTdPNZXQ9x6aCyO9a78YwDyT/o8OLU7idKlmrsMfJp5z8y+OeiqAe6FdbsqzyHa
+      XBmwUmsglgVI+NZf5500/fDMh8dx7tS5bHKUnguJSOIzRF+4XAmkB5Z9atZDKHch
+      Pu8HoGH3EfL53V8RNan60o6viQy/9X1l5Pj/YfccsIaYnZVODfjwPCbwZNBGp0Zi
+      sJHyw6WthV0ar1owyY0nIdiis8r7wKn1n1grZW4XRfkO4UmDn1bcNmkIOe2PQ7xg
+      Fi7rZQVRRfhe0/gY/42Kh/cj1+VKY//R5t9E29VvLVfok9QYLLvGPSZAvR80SxVj
+      SU4NYC1H4KCUzpThyWnaYqo+YaDkhKKQ5UAjxtPKxrQAiQEcBBABAgAGBQJY46Yl
+      AAoJEPW/luvR6iT5CwoH/19/jvNqDE6p/YNZmUF3nT0S4WEQ50EjPPOYBA18jN6e
+      /9Wqe4RRxGJhE4VvFBPXDprFrenMI5dts4gXltQU8HOQjAZa5LTehwpvx7cRqlK8
+      tRdQzJrTsYYJlbdpN5yS/wq990HWijyFDYtXSQUKldZhtKS1QiQUtaG0oMSJSb/8
+      xZqpB80D1X6WTNAJS5BawqSclopoDnWe5gPBptJ3Bq/VNY+icQIhh4uAQY/KM8v9
+      AClvbSspsgiMssct0ItHWdZNqicII6TA4yTOQa9Jo1euH8nBA2PQcaAuI9luypBB
+      fyXfDcG/SajyPSgqkryxbqyYSf6WQ8WfN2ZSCEfNWdQ=
+      =tY0L
+      -----END PGP PRIVATE KEY BLOCK-----
+    gpg_public_key: |
+      -----BEGIN PGP PUBLIC KEY BLOCK-----
+      Version: BCPG C# v1.6.1.0
+
+      mQENBFjjpiUBCADMp/x13InHXlyQGLDqmXMZrBr5+Qc1fc1Mp2asW1WcxlmA4fMf
+      OOLoQUlMoyl61WL46ldGzRH1wG7UNT6Zoi+3IqOQTr+jMJrspR2YQKSc5jb+yXPf
+      q6p4wxe3emSc7MiYgyspHYjaUpX0A4uWgUB7rlTUPoPU3aDjygSwK8Oxsa1qsw9M
+      3buDrt9ZOU9HDkL5I1zXZ2VIUYGvgrR666EWxbPXfoJTwVimblcw1CdJ5s0js2p4
+      X75jnsNhKaFTM5jziQWrUmRjCQ9HfQq27BeIMR0BqzA+Lr5UW6y1i1yMEVAtmRjY
+      SyC5GP9SUCxsflU56t1OjaKSHgZB7dQIkTpFABEBAAG0AIkBHAQQAQIABgUCWOOm
+      JQAKCRD1v5br0eok+QsKB/9ff47zagxOqf2DWZlBd509EuFhEOdBIzzzmAQNfIze
+      nv/VqnuEUcRiYROFbxQT1w6axa3pzCOXbbOIF5bUFPBzkIwGWuS03ocKb8e3EapS
+      vLUXUMya07GGCZW3aTeckv8KvfdB1oo8hQ2LV0kFCpXWYbSktUIkFLWhtKDEiUm/
+      /MWaqQfNA9V+lkzQCUuQWsKknJaKaA51nuYDwabSdwav1TWPonECIYeLgEGPyjPL
+      /QApb20rKbIIjLLHLdCLR1nWTaonCCOkwOMkzkGvSaNXrh/JwQNj0HGgLiPZbsqQ
+      QX8l3w3Bv0mo8j0oKpK8sW6smEn+lkPFnzdmUghHzVnU
+      =FoXV
+      -----END PGP PUBLIC KEY BLOCK-----
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
