beaker-windows 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ module BeakerWindows
2
+ module Version
3
+ STRING = '0.6.2'
4
+ end
5
+ end
@@ -0,0 +1,179 @@
1
+ module BeakerWindows
2
+ module WindowsFeature
3
+
4
+ # Retrieve a list of Windows roles and features from a host. The list can be filtered
5
+ # to available or installed.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +host+ - A Windows Beaker host running PowerShell 3 or greater.
10
+ # * +opts:filter+ - Filter the list of Windows features.
11
+ # * +:all+ - Do not filter anything from the list. (Default)
12
+ # * +:available+ - Filter the list to only the available Windows features.
13
+ # * +:installed+ - Filter the list to only the installed Windows features.
14
+ #
15
+ # ==== Returns
16
+ #
17
+ # +Array+ - An array of strings representing Windows features.
18
+ #
19
+ # ==== Raises
20
+ #
21
+ # +ArgumentError+ - An invalid filter was specified.
22
+ # +RuntimeError+ - The host does not have PowerShell 3 or greater available.
23
+ #
24
+ # ==== Example
25
+ #
26
+ # get_windows_features_on(host)
27
+ # get_windows_features_on(host, :filter => :available)
28
+ # get_windows_features_on(host, :filter => :installed)
29
+ def get_windows_features_on(host, opts={})
30
+ # Init
31
+ opts[:filter] ||= :all
32
+
33
+ ps_cmd = 'Get-WindowsFeature'
34
+
35
+ # Filter features
36
+ case opts[:filter]
37
+ when :available
38
+ ps_cmd << ' | Where { \$_.Installed -Eq \$false }'
39
+ when :installed
40
+ ps_cmd << ' | Where { \$_.Installed -Eq \$true }'
41
+ else
42
+ error_message = 'Unknown filter! Specify :all, :available or :installed.'
43
+ raise(ArgumentError, error_message) unless opts[:filter] == :all
44
+ end
45
+
46
+ # Select only the feature name
47
+ ps_cmd << ' | Select -ExpandProperty Name'
48
+
49
+ # Parse output
50
+ result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
51
+
52
+ raise(RuntimeError, 'This method requires PowerShell 3 or greater!') if result.exit_code == 1
53
+
54
+ return result.stdout.rstrip.split("\n")
55
+ end
56
+
57
+ # Install a Windows role or feature on a host.
58
+ #
59
+ # ==== Attributes
60
+ #
61
+ # * +host+ - A Windows Beaker host running PowerShell 3 or greater.
62
+ # * +feature_name+ - The name of the Windows feature to install. (NOT THE DISPLAY NAME!)
63
+ # * +opts:suppress_fail+ - Suppress raising exception on feature installation failure.
64
+ # * +:true+ - Suppress the raising a RuntimeError exception.
65
+ # * +:false+ - Allow RuntimeError to be raised if feature fails to install. (Default)
66
+ #
67
+ # ==== Raises
68
+ #
69
+ # +RuntimeError+ - Failed to install the feature.
70
+ # +RuntimeError+ - Invalid feature name or incorrect PowerShell version!
71
+ #
72
+ # ==== Example
73
+ #
74
+ # install_windows_feature_on(host, 'Print-Server')
75
+ # install_windows_feature_on(host, 'Bad-Feature', :suppress_fail => true)
76
+ def install_windows_feature_on(host, feature_name, opts={})
77
+ # Init
78
+ opts[:suppress_fail] ||= false
79
+
80
+ ps_cmd = "(Install-WindowsFeature -Name '#{feature_name}' -ErrorAction 'Stop').Success"
81
+
82
+ # Parse output
83
+ result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
84
+
85
+ unless opts[:suppress_fail]
86
+ raise(RuntimeError, 'Invalid feature name or incorrect PowerShell version!') if result.exit_code == 1
87
+ raise(RuntimeError, 'Failed to install feature!') unless result.stdout =~ /True/
88
+ end
89
+ end
90
+
91
+ # Remove a Windows role or feature on a host.
92
+ #
93
+ # ==== Attributes
94
+ #
95
+ # * +host+ - A Windows Beaker host running PowerShell 3 or greater.
96
+ # * +feature_name+ - The name of the Windows feature to remove. (NOT THE DISPLAY NAME!)
97
+ # * +opts:suppress_fail+ - Suppress raising exception on feature installation failure.
98
+ # * +:true+ - Suppress the raising a RuntimeError exception.
99
+ # * +:false+ - Allow RuntimeError to be raised if feature fails to be removed. (Default)
100
+ #
101
+ # ==== Raises
102
+ #
103
+ # +RuntimeError+ - Failed to remove the feature.
104
+ # +RuntimeError+ - Invalid feature name or incorrect PowerShell version!
105
+ #
106
+ # ==== Example
107
+ #
108
+ # remove_windows_feature_on(host, 'Print-Server')
109
+ # remove_windows_feature_on(host, 'Bad-Feature', :suppress_fail => true)
110
+ def remove_windows_feature_on(host, feature_name, opts={})
111
+ # Init
112
+ opts[:suppress_fail] ||= false
113
+
114
+ ps_cmd = "(Remove-WindowsFeature -Name '#{feature_name}' -ErrorAction 'Stop').Success"
115
+
116
+ # Parse output
117
+ result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
118
+
119
+ unless opts[:suppress_fail]
120
+ raise(RuntimeError, 'Invalid feature name or incorrect PowerShell version!') if result.exit_code == 1
121
+ raise(RuntimeError, 'Failed to remove feature!') unless result.stdout =~ /True/
122
+ end
123
+ end
124
+
125
+ end
126
+ end
127
+
128
+ module Beaker
129
+ module DSL
130
+ module Assertions
131
+
132
+ # Assert that a Windows feature is installed or not on a host.
133
+ #
134
+ # ==== Attributes
135
+ #
136
+ # * +host+ - A Windows Beaker host running PowerShell 3 or greater.
137
+ # * +feature_name+ - The name of the Windows feature to verify if installed.
138
+ # (NOT THE DISPLAY NAME!)
139
+ # * +opts:state+ - Assert the state of the Windows feature.
140
+ # * +:installed+ - Feature is installed. (Default)
141
+ # * +:available+ - Feature is not installed.
142
+ #
143
+ # ==== Raises
144
+ #
145
+ # +ArgumentError+ - An invalid state was specified.
146
+ # +Minitest::Assertion+ - The feature is not in the desired state or does not exist.
147
+ #
148
+ # ==== Example
149
+ #
150
+ # assert_windows_feature_on(host, 'Print-Server')
151
+ # assert_windows_feature_on(host, 'WINS', :state => :available)
152
+ # assert_windows_feature_on(host, 'Powershell-V2', :state => :installed)
153
+ def assert_windows_feature_on(host, feature_name, opts={})
154
+ # Init
155
+ opts[:state] ||= :installed
156
+
157
+ ps_cmd = "(Get-WindowsFeature -Name '#{feature_name}').InstallState -Eq "
158
+
159
+ # Desired state
160
+ case opts[:state]
161
+ when :available
162
+ ps_cmd << "'Available'"
163
+ when :installed
164
+ ps_cmd << "'Installed'"
165
+ else
166
+ raise(ArgumentError, 'Unknown feature state! Specify either :available or :installed.')
167
+ end
168
+
169
+ # Parse output
170
+ result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
171
+
172
+ raise(RuntimeError, 'This method requires PowerShell 3 or greater!') if result.exit_code == 1
173
+
174
+ assert_match(/True/, result.stdout, 'The feature is not in the desired state or does not exist!')
175
+ end
176
+
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,10 @@
1
+ require 'simplecov'
2
+ require 'rspec'
3
+
4
+ SimpleCov.start
5
+
6
+ require 'beaker-windows'
7
+
8
+ RSpec.configure do |c|
9
+
10
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: beaker-windows
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.2
5
+ platform: ruby
6
+ authors:
7
+ - Puppet Labs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.11'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.11'
69
+ - !ruby/object:Gem::Dependency
70
+ name: beaker
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.32'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.32'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: markdown
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: This Gem extends the Beaker DSL for the verify state on Windows nodes.
112
+ email:
113
+ - qa@puppetlabs.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - Gemfile
119
+ - Gemfile.lock
120
+ - HISTORY.md
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - lib/beaker-windows.rb
125
+ - lib/beaker-windows/path.rb
126
+ - lib/beaker-windows/powershell.rb
127
+ - lib/beaker-windows/registry.rb
128
+ - lib/beaker-windows/version.rb
129
+ - lib/beaker-windows/windows_feature.rb
130
+ - spec/spec_helper.rb
131
+ homepage: https://github.com/puppetlabs/beaker-windows
132
+ licenses:
133
+ - Apache-2.0
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubyforge_project:
151
+ rubygems_version: 2.4.6
152
+ signing_key:
153
+ specification_version: 4
154
+ summary: Puppet Labs testing library for testing on Windows.
155
+ test_files:
156
+ - spec/spec_helper.rb
157
+ has_rdoc: