Merge pull request #471 from dafyddj/test-windows
Add testing for Windows (both local and CI)
This commit is contained in:
		
						commit
						38e385622d
					
				
							
								
								
									
										39
									
								
								.github/workflows/kitchen.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/kitchen.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -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
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Gemfile
									
									
									
									
									
								
							| @ -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 | ||||
|  | ||||
| @ -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) | ||||
| @ -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 | ||||
|  | ||||
| @ -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
									
								
								kitchen.github.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								kitchen.github.yml
									
									
									
									
									
										Normal file
									
								
							| @ -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
									
								
								kitchen.vagrant.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								kitchen.vagrant.yml
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||
| @ -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 | ||||
| 
 | ||||
|  | ||||
| @ -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}/) } | ||||
|  | ||||
| @ -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 } | ||||
|  | ||||
| @ -17,3 +17,4 @@ supports: | ||||
|   - platform-name: amazon | ||||
|   - platform-name: oracle | ||||
|   - platform-name: arch | ||||
|   - platform: windows | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Imran Iqbal
						Imran Iqbal