Skip to content

Commit

Permalink
Merge pull request #471 from dafyddj/test-windows
Browse files Browse the repository at this point in the history
Add testing for Windows (both local and CI)
  • Loading branch information
myii authored Jun 28, 2020
2 parents 1ffceaf + 9a88243 commit 38e3856
Show file tree
Hide file tree
Showing 10 changed files with 206 additions and 9 deletions.
39 changes: 39 additions & 0 deletions .github/workflows/kitchen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
name: CI

'on': [push, pull_request]

env:
machine_user: kitchen
machine_pass: Pass@word1
machine_port: 5985
KITCHEN_LOCAL_YAML: kitchen.github.yml

jobs:
build:
runs-on: windows-latest

steps:
- uses: actions/checkout@v2
- uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- shell: powershell
run: |
$password = ConvertTo-SecureString $env:machine_pass -AsPlainText -Force
New-LocalUser $env:machine_user -Password $password
Add-LocalGroupMember -Group "Administrators" -Member $env:machine_user
- shell: powershell
run: >
Set-WSManQuickConfig -Force;
Set-WSManInstance -ResourceURI winrm/config/service
-ValueSet @{AllowUnencrypted="true"}
- run: gem install bundler --quiet --no-document
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- run: bundle exec kitchen test
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@ source 'https://rubygems.org'
gem 'kitchen-docker', '>= 2.9'
gem 'kitchen-inspec', '>= 1.1'
gem 'kitchen-salt', '>= 0.6.0'

group :vagrant do
gem 'kitchen-vagrant'
end
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,8 @@ GEM
kitchen-salt (0.6.3)
hashie (>= 3.5)
test-kitchen (>= 1.4)
kitchen-vagrant (1.6.1)
test-kitchen (>= 1.4, < 3)
libyajl2 (1.2.0)
license-acceptance (1.0.19)
pastel (~> 0.7)
Expand Down Expand Up @@ -526,6 +528,7 @@ DEPENDENCIES
kitchen-docker (>= 2.9)
kitchen-inspec (>= 1.1)
kitchen-salt (>= 0.6.0)
kitchen-vagrant

BUNDLED WITH
2.1.2
62 changes: 62 additions & 0 deletions docs/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -251,3 +251,65 @@ Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``veri
^^^^^^^^^^^^^^^^^^^^^

Gives you SSH access to the instance for manual testing.

Testing with Vagrant
--------------------

Windows testing is done with ``kitchen-salt``.

Requirements
^^^^^^^^^^^^

* Ruby
* Virtualbox
* Vagrant

Setup
^^^^^

.. code-block:: bash
$ gem install bundler
$ bundle install --with=vagrant
$ bin/kitchen test [platform]
Where ``[platform]`` is the platform name defined in ``kitchen.yml``,
e.g. ``windows``.

Note
^^^^

When testing using Vagrant you must set the environment variable ``KITCHEN_LOCAL_YAML`` to ``kitchen.vagrant.yml``. For example:

.. code-block:: bash
$ KITCHEN_LOCAL_YAML=kitchen.vagrant.yml bin/kitchen test # Alternatively,
$ export KITCHEN_LOCAL_YAML=kitchen.vagrant.yml
$ bin/kitchen test
Then run the following commands as needed.

``bin/kitchen converge``
^^^^^^^^^^^^^^^^^^^^^^^^

Creates the Vagrant instance and runs the ``salt.minion`` main state, ready for testing.

``bin/kitchen verify``
^^^^^^^^^^^^^^^^^^^^^^

Runs the ``inspec`` tests on the actual instance.

``bin/kitchen destroy``
^^^^^^^^^^^^^^^^^^^^^^^

Removes the Vagrant instance.

``bin/kitchen test``
^^^^^^^^^^^^^^^^^^^^

Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``.

``bin/kitchen login``
^^^^^^^^^^^^^^^^^^^^^

Gives you RDP access to the instance for manual testing.
40 changes: 40 additions & 0 deletions kitchen.github.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
driver:
name: proxy
host: localhost
reset_command: "exit 0"
port: 5985
username: kitchen
password: Pass@word1

platforms:
- name: windows

provisioner:
salt_install: bootstrap
salt_bootstrap_options: -pythonVersion 3 -version 3000.3
init_environment: >
C:\salt\salt-call --local state.single file.managed
C:\Users\kitchen\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\salt-minion-py3.sls
source=https://github.com/saltstack/salt-winrepo-ng/raw/master/salt-minion-py3.sls
skip_verify=True makedirs=True
suites:
- name: v3000-py3
provisioner:
state_top:
base:
'*':
- salt.minion
pillars:
top.sls:
base:
'*':
- salt
- v3000-py3
pillars_from_files:
salt.sls: test/salt/pillar/salt.sls
v3000-py3.sls: test/salt/pillar/v3000-py3.sls
verifier:
inspec_tests:
- path: test/integration/v3000-py3
38 changes: 38 additions & 0 deletions kitchen.vagrant.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
driver:
name: vagrant

platforms:
- name: windows-81
driver:
box: techneg/win81x64-pro-salt
gui: false
linked_clone: true
provisioner:
init_environment: >
salt-call --local state.single file.managed
C:\Users\vagrant\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\salt-minion-py3.sls
source=https://github.com/saltstack/salt-winrepo-ng/raw/master/salt-minion-py3.sls
skip_verify=True makedirs=True
suites:
- name: v3000-py3
provisioner:
state_top:
base:
'*':
- salt.minion
pillars:
top.sls:
base:
'*':
- salt
- v3000-py3
pillars_from_files:
salt.sls: test/salt/pillar/salt.sls
v3000-py3.sls: test/salt/pillar/v3000-py3.sls
verifier:
inspec_tests:
- path: test/integration/v3000-py3
2 changes: 1 addition & 1 deletion salt/osfamilymap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ OpenBSD:
python_git: py-GitPython

Windows:
salt_minion: salt-minion{{ py_ver_repr or '-py3' }}
salt_minion: salt-minion{{ '-' ~ py_ver_repr if py_ver_repr else '' }}
config_path: 'C:\salt\conf'
minion_service: salt-minion

Expand Down
13 changes: 9 additions & 4 deletions test/integration/v3000-py3/controls/pkgs_spec.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
# frozen_string_literal: true

pkgs =
case platform[:family]
when 'windows'
%w[Salt\ Minion]
else
%w[salt-master salt-minion]
end

control 'salt packages' do
title 'should be installed'

version = '3000.3'

%w[
salt-master
salt-minion
].each do |p|
pkgs.each do |p|
describe package(p) do
it { should be_installed }
its('version') { should match(/^#{version}/) }
Expand Down
13 changes: 9 additions & 4 deletions test/integration/v3000-py3/controls/service_spec.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
# frozen_string_literal: true

services =
case platform[:family]
when 'windows'
%w[salt-minion]
else
%w[salt-master salt-minion]
end

control 'salt services' do
title 'should be running'

%w[
salt-master
salt-minion
].each do |p|
services.each do |p|
describe service(p) do
it { should be_installed }
it { should be_enabled }
Expand Down
1 change: 1 addition & 0 deletions test/integration/v3000-py3/inspec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ supports:
- platform-name: amazon
- platform-name: oracle
- platform-name: arch
- platform: windows

0 comments on commit 38e3856

Please sign in to comment.