Add basic kitchen tests setup

Added tests for designate salt formulas for
deployment without started services and without backend.

Change-Id: I4bad0fb4a00761e3121c073c266a733c9bb47f25
diff --git a/.kitchen.yml b/.kitchen.yml
new file mode 100644
index 0000000..04266e2
--- /dev/null
+++ b/.kitchen.yml
@@ -0,0 +1,61 @@
+---
+driver:
+  name: docker
+  hostname: designate.ci.local
+  use_sudo: true
+
+provisioner:
+  name: salt_solo
+  salt_install: bootstrap
+  salt_bootstrap_url: https://bootstrap.saltstack.com
+  salt_version: latest
+  require_chef: false
+  log_level: error
+  formula: designate
+  grains:
+    noservices: True
+  dependencies:
+    - name: linux
+      repo: git
+      source: https://github.com/salt-formulas/salt-formula-linux
+    - name: mysql
+      repo: git
+      source: https://github.com/salt-formulas/salt-formula-mysql
+    - name: rabbitmq
+      repo: git
+      source: https://github.com/salt-formulas/salt-formula-rabbitmq
+  state_top:
+    base:
+      "*":
+        - linux
+        - mysql
+#TODO: use rabbitmq when https://mirantis.jira.com/browse/PROD-11712 is fixed
+#        - rabbitmq
+        - designate
+  pillars:
+    top.sls:
+      base:
+        "*":
+          - linux_repo_openstack
+          - designate
+  pillars-from-files:
+    linux_repo_openstack.sls: tests/pillar/repo_mcp_openstack.sls
+
+verifier:
+  name: inspec
+  sudo: true
+
+platforms:
+  - name: <%= ENV['PLATFORM'] || 'ubuntu-xenial' %>
+    driver_config:
+      image: <%= ENV['PLATFORM'] || 'trevorj/salty-whales:xenial' %>
+      platform: ubuntu
+
+suites:
+
+  - name: designate_without_backend
+    provisioner:
+      pillars-from-files:
+        designate.sls: tests/pillar/designate_ocata.sls
+
+# vim: ft=yaml sw=2 ts=2 sts=2 tw=125
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..03a7f7b
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,38 @@
+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: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/designate/server.sls b/designate/server.sls
index 934757a..246887b 100644
--- a/designate/server.sls
+++ b/designate/server.sls
@@ -41,6 +41,7 @@
   - require:
     - pkg: designate_server_packages
 
+{%- if not grains.get('noservices', False) %}
 designate_syncdb:
   cmd.run:
     - name: designate-manage database sync
@@ -62,6 +63,7 @@
       - cmd: designate_pool_sync
     - watch:
       - file: /etc/designate/designate.conf
+{%- endif %}
 
 {%- if server.version not in ['liberty', 'juno', 'kilo'] and server.pools is defined %}
 # Since Mitaka it is recommended to use pools.yaml for pools configuration
@@ -72,6 +74,7 @@
   - require:
     - pkg: designate_server_packages
 
+{%- if not grains.get('noservices', False) %}
 designate_pool_update:
   cmd.run:
     - name: designate-manage pool update
@@ -80,3 +83,4 @@
       - service: designate_server_services
 {%- endif %}
 {%- endif %}
+{%- endif %}
diff --git a/tests/pillar/designate_ocata.sls b/tests/pillar/designate_ocata.sls
index 4022cdb..eee747c 100644
--- a/tests/pillar/designate_ocata.sls
+++ b/tests/pillar/designate_ocata.sls
@@ -1,14 +1,39 @@
 designate:
+  _support:
+    sensu:
+      enabled: false
   server:
     enabled: true
+    local_bind: true
     region: RegionOne
     domain_id: 5186883b-91fb-4891-bd49-e6769234a8fc
     version: ocata
+    bind:
+      api:
+        address: 127.0.0.1
+    database:
+      engine: mysql
+      host: 127.0.0.1
+      port: 3306
+      name:
+        main_database: designate
+        pool_manager: designate_pool_manager
+      user: designate
+      password: passw0rd
+    identity:
+      engine: keystone
+      host: 127.0.0.1
+      port: 35357
+      tenant: service
+      user: designate
+      password: passw0rd
     message_queue:
+      engine: rabbitmq
       members:
-        - host: 127.0.0.1
-        - host: 127.0.1.1
-        - host: 127.0.2.1
+      - host: 127.0.0.1
+      user: openstack
+      password: password
+      virtual_host: '/openstack'
     pools:
       default:
         description: 'default pool'
@@ -41,3 +66,75 @@
         also_notifies:
           - host: 127.0.3.1
             port: 53
+mysql:
+  client:
+    enabled: true
+    version: '5.7'
+    admin:
+      host: localhost
+      port: 3306
+      user: admin
+      password: password
+      encoding: utf8
+  server:
+    enabled: true
+    version: "5.7"
+    force_encoding: utf8
+    bind:
+      address: 0.0.0.0
+      port: 3306
+      protocol: tcp
+    database:
+      designate:
+        encoding: utf8
+        users:
+        - host: '%'
+          name: designate
+          password: passw0rd
+          rights: all
+        - host: 127.0.0.1
+          name: designate
+          password: passw0rd
+          rights: all
+      designate_pool_manager:
+        encoding: utf8
+        users:
+        - host: '%'
+          name: designate
+          password: passw0rd
+          rights: all
+        - host: 127.0.0.1
+          name: designate
+          password: passw0rd
+          rights: all
+# On xenial rabbitmq fails to start inside docker on MK CI
+# rabbitmq:
+#   server:
+#     enabled: true
+#     bind:
+#       address: 0.0.0.0
+#       port: 5672
+#     secret_key: rabbit_master_cookie
+#     admin:
+#       name: adminuser
+#       password: pwd
+#     host:
+#       '/':
+#         enabled: true
+#         user: guest
+#         password: guest
+#         policies:
+#         - name: HA
+#           pattern: '^(?!amq\.).*'
+#           definition: '{"ha-mode": "all", "message-ttl": 120000}'
+#       '/openstack':
+#         enabled: true
+#         user: openstack
+#         password: password
+#         policies:
+#         - name: HA
+#           pattern: '^(?!amq\.).*'
+#           definition: '{"ha-mode": "all", "message-ttl": 120000}'
+#     memory:
+#       vm_high_watermark: 0.4
+#     plugins: ['']
diff --git a/tests/pillar/repo_mcp_openstack.sls b/tests/pillar/repo_mcp_openstack.sls
new file mode 100644
index 0000000..7d73591
--- /dev/null
+++ b/tests/pillar/repo_mcp_openstack.sls
@@ -0,0 +1,52 @@
+linux:
+  system:
+    enabled: true
+    repo:
+      mirantis_openstack:
+        source: "deb http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }} ocata main"
+        architectures: amd64
+        key_url: "http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }}/archive-mcpocata.key"
+        pin:
+        - pin: 'release a=ocata'
+          priority: 1100
+          package: '*'
+      mirantis_openstack_hotfix:
+        source: "deb http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }} ocata-hotfix main"
+        architectures: amd64
+        key_url: "http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }}/archive-mcpocata.key"
+        pin:
+        - pin: 'release a=ocata-hotfix'
+          priority: 1100
+          package: '*'
+      mirantis_openstack_security:
+        source: "deb http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }} ocata-security main"
+        architectures: amd64
+        key_url: "http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }}/archive-mcpocata.key"
+        pin:
+        - pin: 'release a=ocata-security'
+          priority: 1100
+          package: '*'
+      mirantis_openstack_updates:
+        source: "deb http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }} ocata-updates main"
+        architectures: amd64
+        key_url: "http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }}/archive-mcpocata.key"
+        pin:
+        - pin: 'release a=ocata-uptades'
+          priority: 1100
+          package: '*'
+      mirantis_openstack_holdback:
+        source: "deb http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }} ocata-holdback main"
+        architectures: amd64
+        key_url: "http://mirror.fuel-infra.org/mcp-repos/ocata/{{ grains.get('oscodename') }}/archive-mcpocata.key"
+        pin:
+        - pin: 'release a=ocata-holdback'
+          priority: 1100
+          package: '*'
+      mk_openstack:
+        source: "deb [arch=amd64] http://apt-mk.mirantis.com/{{ grains.get('oscodename') }}/ nightly ocata"
+        architectures: amd64
+        key_url: "http://apt-mk.mirantis.com/public.gpg"
+        pin:
+        - pin: 'release a=nightly'
+          priority: 1100
+          package: '*'