diff --git a/.delivery/project.toml b/.delivery/project.toml
new file mode 100644
index 0000000..6d5e361
--- /dev/null
+++ b/.delivery/project.toml
@@ -0,0 +1 @@
+remote_file = "https://raw.githubusercontent.com/chef-cookbooks/community_cookbook_tools/master/delivery/project.toml"
diff --git a/.kitchen.dokken.yml b/.kitchen.dokken.yml
new file mode 100644
index 0000000..1a4b8e9
--- /dev/null
+++ b/.kitchen.dokken.yml
@@ -0,0 +1,65 @@
+---
+driver:
+  name: dokken
+  chef_version: latest
+
+transport:
+  name: dokken
+
+provisioner:
+  name: dokken
+  always_update_cookbooks: true
+
+platforms:
+  - name: debian-8
+    driver:
+      image: dokken/debian-8
+      privileged: true
+      pid_one_command: /lib/systemd/systemd
+      volumes:
+        - /sys/fs/cgroup:/sys/fs/cgroup:ro # required by systemd
+  - name: debian-9
+    driver:
+      image: dokken/debian-9
+      privileged: true
+      pid_one_command: /lib/systemd/systemd
+      volumes:
+        - /sys/fs/cgroup:/sys/fs/cgroup:ro # required by systemd
+  - name: ubuntu-14
+    driver:
+      image: dokken/ubuntu-14.04
+      privileged: true
+  - name: ubuntu-16
+    driver:
+      image: dokken/ubuntu-16.04
+      privileged: true
+      pid_one_command: /lib/systemd/systemd
+      volumes:
+        - /sys/fs/cgroup:/sys/fs/cgroup:ro # required by systemd
+  - name: centos-6
+    driver:
+      image: dokken/centos-6
+      privileged: true
+  - name: centos-7
+    driver:
+      image: dokken/centos-7
+      privileged: true
+      pid_one_command: /usr/lib/systemd/systemd
+      volumes:
+        - /sys/fs/cgroup:/sys/fs/cgroup:ro # required by systemd
+
+verifier:
+  name: inspec
+
+suites:
+  - name: default
+    run_list:
+      - recipe[collectd::default]
+  - name: userchange
+    run_list:
+      - recipe[collectd::default]
+      - recipe[collectd-test::_test_plugin]
+    attributes:
+      collectd:
+        service_user: 'root'
+        service_group: 'root'
diff --git a/.kitchen.yml b/.kitchen.yml
index a137349..5566bc1 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -6,22 +6,16 @@ provisioner:
   name: chef_zero
 
 platforms:
-  - name: ubuntu-14.04
-    run_list:
-      - recipe[apt::default]
-  - name: ubuntu-12.04
+  - name: ubuntu-16.04
     run_list:
       - recipe[apt::default]
-  - name: ubuntu-10.04
+  - name: ubuntu-14.04
     run_list:
       - recipe[apt::default]
-  - name: centos-7.2
+  - name: centos-7.5
     run_list:
       - recipe[yum-epel::default]
-  - name: centos-6.7
-    run_list:
-      - recipe[yum-epel::default]
-  - name: centos-5.11
+  - name: centos-6.8
     run_list:
       - recipe[yum-epel::default]
 
@@ -32,9 +26,8 @@ suites:
   - name: userchange
     run_list:
       - recipe[collectd::default]
-      - recipe[collectd::_test_plugin]
+      - recipe[collectd-test::_test_plugin]
     attributes:
       collectd:
         service_user: 'root'
         service_group: 'root'
-
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..9f3608c
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,32 @@
+---
+repos:
+-   repo: git://github.com/pre-commit/pre-commit-hooks
+    rev: v1.4.0-1
+    hooks:
+    -   id: trailing-whitespace
+    -   id: check-merge-conflict
+    -   id: end-of-file-fixer
+    -   id: check-added-large-files
+    -   id: check-json
+    -   id: check-vcs-permalinks
+    -   id: mixed-line-ending
+    -   id: pretty-format-json
+        args:
+        - --autofix
+        - --top-keys=id
+    -   id: sort-simple-yaml
+        files: '.yaml$'
+    -   id: check-symlinks
+    -   id: check-yaml
+    -   id: detect-private-key
+-   repo: git://github.com/Lucas-C/pre-commit-hooks
+    rev: v1.1.6
+    hooks:
+    -   id: remove-crlf
+    -   id: remove-tabs
+-   repo: git://github.com/EMSL-MSC/pre-commit-hooks-chef
+    rev: 8e9ad15ee7430c7a52d5527d6b9cc5d0a158c974
+    hooks:
+    -   id: check-cookstyle
+    -   id: check-foodcritic
+    #-   id: check-rspec
diff --git a/.rspec b/.rspec
deleted file mode 100644
index b4401c4..0000000
--- a/.rspec
+++ /dev/null
@@ -1,2 +0,0 @@
---default-path test/spec
---color
diff --git a/.rubocop.yml b/.rubocop.yml
deleted file mode 100644
index 7e1519f..0000000
--- a/.rubocop.yml
+++ /dev/null
@@ -1,44 +0,0 @@
----
-AllCops:
-  Exclude:
-    - 'Guardfile'
-    - 'Rakefile'
-    - 'Vagrantfile'
-    - 'Policyfile.rb'
-    - 'Berksfile'
-    - 'Thorfile'
-    - 'Gemfile'
-    - 'metadata.rb'
-    - 'test/**/*'
-    - 'bin/**'
-    - 'vendor/**/*'
-AlignParameters:
-  Enabled: false
-ClassLength:
-  Enabled: false
-CyclomaticComplexity:
-  Enabled: false
-Documentation:
-  Enabled: false
-Encoding:
-  Enabled: false
-Style/FileName:
-  Enabled: false
-LineLength:
-  Enabled: false
-MethodLength:
-  Enabled: false
-Metrics/AbcSize:
-  Enabled: false
-PerceivedComplexity:
-  Enabled: false
-Style/SpaceBeforeFirstArg:
-  Enabled: false
-Style/ClassAndModuleChildren:
-  Enabled: false
-Style/FileName:
-  Enabled: false
-Style/GuardClause:
-  Enabled: false
-Style/PercentLiteralDelimiters:
-  Enabled: false
diff --git a/.travis.yml b/.travis.yml
index ea742e3..1b8e197 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,51 @@
 ---
-language: ruby
-cache: bundler
-sudo: false
-notifications:
-  slack: bloomberg-rnd:BvYmxrV9xj902XWTRNrkLNkR
-script: bundle exec rake travis
-rvm:
-  - 2.2
-branches:
-  only:
-    - master
-matrix:
-  fast_finish: true
+dist: trusty
+sudo: required
+group: edge
+services: docker
+addons:
+  apt:
+    sources:
+      - chef-stable-trusty
+    packages:
+      - chefdk
+
+stages:
+  - lint
+  - test
+
+install: "chef exec bundle install --with deps"
+
+before_script:
+  - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER )
+  - eval "$(/opt/chefdk/bin/chef shell-init bash)"
+  - chef --version
+
+env:
+  - T=server-debian-8
+  - T=server-debian-9
+  - T=server-ubuntu-14
+  - T=server-ubuntu-16
+  - T=server-centos-6
+  - T=server-centos-7
+
+script:
+  - chef gem install kitchen-dokken
+  - KITCHEN_LOCAL_YAML=.kitchen.dokken.yml kitchen test $T -d always
+
+jobs:
+  include:
+    - stage: lint
+      env:
+      services:
+      sudo:
+      language: python
+      python: 3.6
+      script:
+        - cookstyle --version
+        - foodcritic --version
+        - rspec --version
+        - delivery --version
+        - pip install pre-commit
+        - pre-commit run -a
+        - chef exec delivery local all
diff --git a/Berksfile b/Berksfile
index f63be1c..5ba1d32 100644
--- a/Berksfile
+++ b/Berksfile
@@ -1,6 +1,6 @@
 source 'https://supermarket.chef.io'
 metadata
-
+solver :ruby, :required
 group :test, :integration do
   cookbook 'apt'
   cookbook 'yum-epel'
diff --git a/Gemfile b/Gemfile
index 394cc01..69ff7db 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,7 +1,10 @@
 source 'https://rubygems.org'
-gem 'poise', '~> 2.2'
-gem 'poise-service', '~> 1.0'
-gem 'poise-boiler'
+
+group :deps do
+  gem 'poise', '~> 2.8'
+  gem 'poise-service', '~> 1.5'
+  gem 'poise-boiler', '~> 1.18'
+end
 
 group :lint do
   gem 'rubocop'
@@ -12,6 +15,7 @@ group :unit, :integration do
   gem 'berkshelf'
   gem 'chefspec'
   gem 'serverspec'
+  gem 'inspec'
 end
 
 group :development do
diff --git a/libraries/collectd_config.rb b/libraries/collectd_config.rb
index b6185b3..27b1999 100644
--- a/libraries/collectd_config.rb
+++ b/libraries/collectd_config.rb
@@ -65,7 +65,7 @@ def write_elements(directives, indent = 0)
             next if id.nil?
             [%(#{tabs}<#{key} "#{id}">),
              write_elements(value, indent.next),
-             %(#{tabs}</#{key}>)
+             %(#{tabs}</#{key}>),
             ].join("\n")
           elsif value.is_a?(String)
             %(#{tabs}#{key} "#{value}")
diff --git a/libraries/collectd_plugin.rb b/libraries/collectd_plugin.rb
index bef1070..1b53c6f 100644
--- a/libraries/collectd_plugin.rb
+++ b/libraries/collectd_plugin.rb
@@ -63,7 +63,7 @@ def config_filename
             configuration(
               'load_plugin' => new_resource.plugin_name,
               'plugin' => {
-                'id' => new_resource.plugin_name
+                'id' => new_resource.plugin_name,
               }.merge(new_resource.options)
             )
           end
diff --git a/libraries/collectd_service.rb b/libraries/collectd_service.rb
index 533ff24..9d472cc 100644
--- a/libraries/collectd_service.rb
+++ b/libraries/collectd_service.rb
@@ -92,7 +92,7 @@ def action_enable
           # TODO: (jbellone) Fix the package resource for AIX so that
           # it is able to install from a URL.
           package_path = if new_resource.package_source
-                           url = new_resource.package_source % { version: new_resource.package_version }
+                           url = format(new_resource.package_source, version: new_resource.package_version)
                            basename = ::File.basename(url)
                            remote_file ::File.join(Chef::Config[:file_cache_path], basename) do
                              source url
@@ -100,15 +100,38 @@ def action_enable
                            end.path
                          end
 
-          package new_resource.package_name do
-            provider Chef::Provider::Package::Solaris if platform?('solaris2')
-            provider Chef::Provider::Package::Dpkg if platform?('ubuntu') && new_resource.package_source
-            action :upgrade
-            version new_resource.package_version
-            source package_path
-            notifies :restart, new_resource, :delayed
+          if platform?('solaris2')
+            solaris_package new_resource.package_name do
+              action :upgrade
+              version new_resource.package_version
+              source package_path
+              notifies :restart, new_resource, :delayed
+            end
+          elsif platform_family?('debian')
+            dpkg_package new_resource.package_name do
+              action :upgrade
+              version new_resource.package_version
+              source package_path
+              notifies :restart, new_resource, :delayed
+            end
+          elsif platform_family?('rhel')
+            yum_package new_resource.package_name do
+              action :upgrade
+              version new_resource.package_version
+              source package_path
+              notifies :restart, new_resource, :delayed
+            end
           end
 
+          # package_provider new_resource.package_name do
+          #   # provider Chef::Provider::Package::Solaris if platform?('solaris2')
+          #   # provider Chef::Provider::Package::Dpkg if platform?('ubuntu') && new_resource.package_source
+          #   action :upgrade
+          #   version new_resource.package_version
+          #   source package_path
+          #   notifies :restart, new_resource, :delayed
+          # end
+
           # Installing package starts collectd service automatically
           # Disable this so that collectd can be managed through poise-service
           service new_resource.package_name do
diff --git a/metadata.rb b/metadata.rb
index 9e23d50..eb2c9c2 100644
--- a/metadata.rb
+++ b/metadata.rb
@@ -1,18 +1,21 @@
 name 'collectd'
 maintainer 'John Bellone'
 maintainer_email 'jbellone@bloomberg.net'
-license 'Apache 2.0'
+license 'Apache-2.0'
 description 'Installs and configures the collectd monitoring daemon.'
 long_description 'Installs and configures the collectd monitoring daemon.'
-version '2.2.4'
+version '2.2.5'
 source_url 'https://github.com/bloomberg/collectd-cookbook'
 issues_url 'https://github.com/bloomberg/collectd-cookbook/issues'
 
-supports 'ubuntu', '>= 10.04'
-supports 'centos', '>= 5.8'
-supports 'redhat', '>= 5.8'
-supports 'aix'
-supports 'solaris2'
+chef_version '~> 14'
 
-depends 'poise', '~> 2.2'
-depends 'poise-service', '~> 1.0'
+supports 'ubuntu', '>= 14.04'
+# supports 'debian', '>= 8.0'
+supports 'centos', '>= 6.8'
+# supports 'redhat', '>= 6.0' # need to add actual rhel to testing infra
+# supports 'aix' # need to add actual testing for aix
+# supports 'solaris2' # need to add actual testing for solaris2
+
+depends 'poise', '~> 2.8'
+depends 'poise-service', '~> 1.5'
diff --git a/test/spec/libraries/collectd_config_spec.rb b/spec/libraries/collectd_config_spec.rb
similarity index 56%
rename from test/spec/libraries/collectd_config_spec.rb
rename to spec/libraries/collectd_config_spec.rb
index 71466e1..7b411f3 100644
--- a/test/spec/libraries/collectd_config_spec.rb
+++ b/spec/libraries/collectd_config_spec.rb
@@ -27,34 +27,34 @@
     recipe do
       collectd_config '/etc/collectd.conf' do
         configuration('hash' => {
-          'id' => 'id',
-          'string' => 'string',
-          'integer' => 1,
-          'true_class' => true,
-          'false_class' => false,
-          'symbol' => :symbol,
-          'array' => %w{1 2 3},
-          'hash' => {
-            'id' => 'id',
-            'string' => 'string'
-          }
-        })
+                        'id' => 'id',
+                        'string' => 'string',
+                        'integer' => 1,
+                        'true_class' => true,
+                        'false_class' => false,
+                        'symbol' => :symbol,
+                        'array' => %w(1 2 3),
+                        'hash' => {
+                          'id' => 'id',
+                          'string' => 'string',
+                        },
+                      })
       end
     end
 
     it { expect(chef_run).to render_file('/etc/collectd.conf').with_content(<<-EOH.chomp) }
 <Hash "id">
-	String "string"
-	Integer 1
-	TrueClass true
-	FalseClass false
-	Symbol symbol
-	Array "1"
-	Array "2"
-	Array "3"
-	<Hash "id">
-		String "string"
-	</Hash>
+    String "string"
+    Integer 1
+    TrueClass true
+    FalseClass false
+    Symbol symbol
+    Array "1"
+    Array "2"
+    Array "3"
+    <Hash "id">
+        String "string"
+    </Hash>
 </Hash>
 EOH
   end
diff --git a/test/spec/libraries/collectd_plugin_spec.rb b/spec/libraries/collectd_plugin_spec.rb
similarity index 69%
rename from test/spec/libraries/collectd_plugin_spec.rb
rename to spec/libraries/collectd_plugin_spec.rb
index fa6afc4..fb25a6c 100644
--- a/test/spec/libraries/collectd_plugin_spec.rb
+++ b/spec/libraries/collectd_plugin_spec.rb
@@ -16,13 +16,13 @@
 
     it do
       expect(chef_run).to create_collectd_config('/etc/collectd.d/syslog.conf')
-      .with(configuration: {
-        'load_plugin' => 'syslog',
-        'plugin' => {
-          'id' => 'syslog',
-          'log_level' => 'info'
-        }
-      })
+        .with(configuration: {
+                'load_plugin' => 'syslog',
+                'plugin' => {
+                  'id' => 'syslog',
+                  'log_level' => 'info',
+                },
+              })
     end
   end
 end
diff --git a/test/spec/libraries/collectd_service_spec.rb b/spec/libraries/collectd_service_spec.rb
similarity index 63%
rename from test/spec/libraries/collectd_service_spec.rb
rename to spec/libraries/collectd_service_spec.rb
index 95b462e..1f0533f 100644
--- a/test/spec/libraries/collectd_service_spec.rb
+++ b/spec/libraries/collectd_service_spec.rb
@@ -12,16 +12,16 @@
 
     it do
       expect(chef_run).to create_directory('/etc/collectd.d')
-      .with(owner: 'collectd', group: 'collectd', mode: '0755')
+        .with(owner: 'collectd', group: 'collectd', mode: '0755')
     end
 
     it do
       expect(chef_run).to create_collectd_config('/etc/collectd.conf')
-      .with(configuration: {
-        'include' => '/etc/collectd.d/*.conf',
-        'pid_file' => '/var/lib/collectd/collectd.pid',
-        'base_dir' => '/var/lib/collectd'
-      })
+        .with(configuration: {
+                'include' => '/etc/collectd.d/*.conf',
+                'pid_file' => '/var/lib/collectd/collectd.pid',
+                'base_dir' => '/var/lib/collectd',
+              })
     end
   end
 end
diff --git a/test/spec/recipes/default_spec.rb b/spec/recipes/default_spec.rb
similarity index 86%
rename from test/spec/recipes/default_spec.rb
rename to spec/recipes/default_spec.rb
index 5f8680c..300951a 100644
--- a/test/spec/recipes/default_spec.rb
+++ b/spec/recipes/default_spec.rb
@@ -5,8 +5,8 @@
   it { expect(chef_run).to create_poise_service_user('collectd').with(group: 'collectd') }
   it do
     expect(chef_run).to enable_collectd_service('collectd')
-    .with(user: 'collectd')
-    .with(group: 'collectd')
+      .with(user: 'collectd')
+      .with(group: 'collectd')
   end
 
   context 'with default attributes' do
diff --git a/test/spec/spec_helper.rb b/spec/spec_helper.rb
similarity index 100%
rename from test/spec/spec_helper.rb
rename to spec/spec_helper.rb
diff --git a/test/fixtures/cookbooks/collectd-test/metadata.rb b/test/fixtures/cookbooks/collectd-test/metadata.rb
new file mode 100644
index 0000000..9ad1b69
--- /dev/null
+++ b/test/fixtures/cookbooks/collectd-test/metadata.rb
@@ -0,0 +1,18 @@
+name 'collectd-test'
+maintainer 'John Bellone'
+maintainer_email 'jbellone@bloomberg.net'
+license 'Apache-2.0'
+description 'Tests the collectd-cookbook.'
+long_description 'This cookbook will consume and test the collectd-cookbook.'
+version '2.2.5'
+source_url 'https://github.com/bloomberg/collectd-cookbook'
+issues_url 'https://github.com/bloomberg/collectd-cookbook/issues'
+
+chef_version '~> 14'
+
+supports 'ubuntu', '>= 14.04'
+supports 'debian', '>= 8.0'
+supports 'centos', '>= 6.8'
+# supports 'redhat', '>= 6.0' # need to add actual rhel to testing infra
+# supports 'aix' # need to add actual testing for aix
+# supports 'solaris2' # need to add actual testing for solaris2
diff --git a/recipes/_test_plugin.rb b/test/fixtures/cookbooks/collectd-test/recipes/_test_plugin.rb
similarity index 100%
rename from recipes/_test_plugin.rb
rename to test/fixtures/cookbooks/collectd-test/recipes/_test_plugin.rb
diff --git a/test/integration/default/serverspec/default_spec.rb b/test/integration/default/serverspec/default_spec.rb
index 738b64c..c41a91b 100644
--- a/test/integration/default/serverspec/default_spec.rb
+++ b/test/integration/default/serverspec/default_spec.rb
@@ -27,7 +27,7 @@
 
 describe file('/etc/collectd.conf') do
   it { should be_file }
-  it { should be_owned_by 'collectd'}
+  it { should be_owned_by 'collectd' }
   it { should be_grouped_into 'collectd' }
   it { should contain 'Interval 10' }
   it { should contain 'ReadThreads 5' }
diff --git a/test/integration/userchange/serverspec/default_spec.rb b/test/integration/userchange/serverspec/default_spec.rb
index ded66fc..102184e 100644
--- a/test/integration/userchange/serverspec/default_spec.rb
+++ b/test/integration/userchange/serverspec/default_spec.rb
@@ -27,7 +27,7 @@
 
 describe file('/etc/collectd.conf') do
   it { should be_file }
-  it { should be_owned_by 'root'}
+  it { should be_owned_by 'root' }
   it { should be_grouped_into 'root' }
   it { should contain 'Interval 10' }
   it { should contain 'ReadThreads 5' }