beaker-windows 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: