winrm 1.3.0.dev.3 → 1.3.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -0
- data/Gemfile +1 -0
- data/README.md +8 -27
- data/Rakefile +12 -10
- data/VERSION +1 -1
- data/Vagrantfile +3 -2
- data/bin/rwinrm +21 -15
- data/changelog.md +22 -1
- data/lib/winrm.rb +12 -9
- data/lib/winrm/exceptions/exceptions.rb +5 -10
- data/lib/winrm/helpers/iso8601_duration.rb +22 -15
- data/lib/winrm/helpers/powershell_script.rb +18 -3
- data/lib/winrm/http/response_handler.rb +32 -32
- data/lib/winrm/http/transport.rb +65 -37
- data/lib/winrm/output.rb +16 -0
- data/lib/winrm/soap_provider.rb +17 -14
- data/lib/winrm/winrm_service.rb +14 -6
- data/spec/auth_timeout_spec.rb +2 -1
- data/spec/cmd_spec.rb +12 -11
- data/spec/exception_spec.rb +6 -8
- data/spec/issue_59_spec.rb +15 -0
- data/spec/matchers.rb +5 -3
- data/spec/output_spec.rb +57 -53
- data/spec/powershell_spec.rb +16 -14
- data/spec/response_handler_spec.rb +12 -11
- data/spec/spec_helper.rb +10 -7
- data/spec/winrm_options_spec.rb +6 -5
- data/spec/winrm_primitives_spec.rb +9 -10
- data/spec/wql_spec.rb +2 -1
- data/winrm.gemspec +16 -15
- metadata +20 -4
data/spec/auth_timeout_spec.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
# This test may only be meaningful with kerberos auth
|
2
3
|
# Against server 2012, a kerberos connection will require reauth (get a 401)
|
3
4
|
# if there are no requests for >= 15 seconds
|
4
5
|
|
5
|
-
describe
|
6
|
+
describe 'Verify kerberos will reauth when necessary', kerberos: true do
|
6
7
|
before(:all) do
|
7
8
|
@winrm = winrm_connection
|
8
9
|
end
|
data/spec/cmd_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
# encoding: UTF-8
|
2
|
+
describe 'winrm client cmd', integration: true do
|
2
3
|
before(:all) do
|
3
4
|
@winrm = winrm_connection
|
4
5
|
end
|
@@ -13,14 +14,14 @@ describe 'winrm client cmd', :integration => true do
|
|
13
14
|
describe 'ipconfig' do
|
14
15
|
subject(:output) { @winrm.cmd('ipconfig') }
|
15
16
|
it { should have_exit_code 0 }
|
16
|
-
it { should have_stdout_match
|
17
|
+
it { should have_stdout_match(/Windows IP Configuration/) }
|
17
18
|
it { should have_no_stderr }
|
18
19
|
end
|
19
20
|
|
20
21
|
describe 'echo \'hello world\' using apostrophes' do
|
21
22
|
subject(:output) { @winrm.cmd("echo 'hello world'") }
|
22
23
|
it { should have_exit_code 0 }
|
23
|
-
it { should have_stdout_match
|
24
|
+
it { should have_stdout_match(/'hello world'/) }
|
24
25
|
it { should have_no_stderr }
|
25
26
|
end
|
26
27
|
|
@@ -32,9 +33,9 @@ describe 'winrm client cmd', :integration => true do
|
|
32
33
|
# echo , world! 1>&2
|
33
34
|
# eos
|
34
35
|
|
35
|
-
script =
|
36
|
+
script = 'echo Hello & echo , world! 1>&2'
|
36
37
|
|
37
|
-
@captured_stdout, @captured_stderr =
|
38
|
+
@captured_stdout, @captured_stderr = '', ''
|
38
39
|
@winrm.cmd(script) do |stdout, stderr|
|
39
40
|
@captured_stdout << stdout if stdout
|
40
41
|
@captured_stderr << stderr if stderr
|
@@ -57,9 +58,9 @@ describe 'winrm client cmd', :integration => true do
|
|
57
58
|
end
|
58
59
|
|
59
60
|
describe 'ipconfig with /all argument' do
|
60
|
-
subject(:output) { @winrm.cmd('ipconfig', %w
|
61
|
+
subject(:output) { @winrm.cmd('ipconfig', %w(/all)) }
|
61
62
|
it { should have_exit_code 0 }
|
62
|
-
it { should have_stdout_match
|
63
|
+
it { should have_stdout_match(/Windows IP Configuration/) }
|
63
64
|
it { should have_no_stderr }
|
64
65
|
end
|
65
66
|
|
@@ -67,20 +68,20 @@ describe 'winrm client cmd', :integration => true do
|
|
67
68
|
subject(:output) { @winrm.cmd('dir /z') }
|
68
69
|
it { should have_exit_code 1 }
|
69
70
|
it { should have_no_stdout }
|
70
|
-
it { should have_stderr_match
|
71
|
+
it { should have_stderr_match(/Invalid switch/) }
|
71
72
|
end
|
72
73
|
|
73
74
|
describe 'ipconfig && echo error 1>&2' do
|
74
75
|
subject(:output) { @winrm.cmd('ipconfig && echo error 1>&2') }
|
75
76
|
it { should have_exit_code 0 }
|
76
|
-
it { should have_stdout_match
|
77
|
-
it { should have_stderr_match
|
77
|
+
it { should have_stdout_match(/Windows IP Configuration/) }
|
78
|
+
it { should have_stderr_match(/error/) }
|
78
79
|
end
|
79
80
|
|
80
81
|
describe 'ipconfig with a block' do
|
81
82
|
subject(:stdout) do
|
82
83
|
outvar = ''
|
83
|
-
@winrm.cmd('ipconfig') do |stdout,
|
84
|
+
@winrm.cmd('ipconfig') do |stdout, _stderr |
|
84
85
|
outvar << stdout
|
85
86
|
end
|
86
87
|
outvar
|
data/spec/exception_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
# encoding: UTF-8
|
2
|
+
describe 'Exceptions', unit: true do
|
2
3
|
describe WinRM::WinRMAuthorizationError do
|
3
|
-
|
4
|
-
let (:error) { WinRM::WinRMHTTPTransportError.new("Foo happened", 500) }
|
4
|
+
let(:error) { WinRM::WinRMHTTPTransportError.new('Foo happened', 500) }
|
5
5
|
|
6
6
|
it 'adds the response code to the message' do
|
7
7
|
expect(error.message).to eq('Foo happened (500).')
|
@@ -17,8 +17,7 @@ describe "Exceptions", :unit => true do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
describe WinRM::WinRMWSManFault do
|
20
|
-
|
21
|
-
let (:error) { WinRM::WinRMWSManFault.new("fault text", 42) }
|
20
|
+
let(:error) { WinRM::WinRMWSManFault.new('fault text', 42) }
|
22
21
|
|
23
22
|
it 'exposes the fault text as an attribute' do
|
24
23
|
expect(error.fault_description).to eq('fault text')
|
@@ -34,15 +33,14 @@ describe "Exceptions", :unit => true do
|
|
34
33
|
end
|
35
34
|
|
36
35
|
describe WinRM::WinRMWMIError do
|
37
|
-
|
38
|
-
let (:error) { WinRM::WinRMWMIError.new("message text", 77777) }
|
36
|
+
let(:error) { WinRM::WinRMWMIError.new('message text', 77_777) }
|
39
37
|
|
40
38
|
it 'exposes the error text as an attribute' do
|
41
39
|
expect(error.error).to eq('message text')
|
42
40
|
end
|
43
41
|
|
44
42
|
it 'exposes the error code as an attribute' do
|
45
|
-
expect(error.error_code).to eq
|
43
|
+
expect(error.error_code).to eq 77_777
|
46
44
|
end
|
47
45
|
|
48
46
|
it 'is a winrm error' do
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
describe 'issue 59', integration: true do
|
3
|
+
before(:all) do
|
4
|
+
@winrm = winrm_connection
|
5
|
+
end
|
6
|
+
|
7
|
+
describe 'long running script without output' do
|
8
|
+
it 'should not error' do
|
9
|
+
output = @winrm.powershell('sleep 60; Write-Host "Hello"')
|
10
|
+
expect(output).to have_exit_code 0
|
11
|
+
expect(output).to have_stdout_match(/Hello/)
|
12
|
+
expect(output).to have_no_stderr
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/spec/matchers.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
require 'rspec/expectations'
|
2
3
|
|
4
|
+
# rspec matchers
|
3
5
|
module WinRMSpecs
|
4
6
|
def self.stdout(output)
|
5
7
|
output[:data].collect do |i|
|
@@ -16,7 +18,7 @@ end
|
|
16
18
|
|
17
19
|
RSpec::Matchers.define :have_stdout_match do |expected_stdout|
|
18
20
|
match do |actual_output|
|
19
|
-
expected_stdout.match(WinRMSpecs.stdout(actual_output))
|
21
|
+
!expected_stdout.match(WinRMSpecs.stdout(actual_output)).nil?
|
20
22
|
end
|
21
23
|
failure_message do |actual_output|
|
22
24
|
"expected that '#{WinRMSpecs.stdout(actual_output)}' would match #{expected_stdout}"
|
@@ -25,7 +27,7 @@ end
|
|
25
27
|
|
26
28
|
RSpec::Matchers.define :have_stderr_match do |expected_stderr|
|
27
29
|
match do |actual_output|
|
28
|
-
expected_stderr.match(WinRMSpecs.stderr(actual_output))
|
30
|
+
!expected_stderr.match(WinRMSpecs.stderr(actual_output)).nil?
|
29
31
|
end
|
30
32
|
failure_message do |actual_output|
|
31
33
|
"expected that '#{WinRMSpecs.stderr(actual_output)}' would match #{expected_stderr}"
|
@@ -64,7 +66,7 @@ end
|
|
64
66
|
RSpec::Matchers.define :be_a_uid do
|
65
67
|
match do |actual|
|
66
68
|
# WinRM1.1 returns uuid's prefixed with 'uuid:' where as later versions do not
|
67
|
-
actual
|
69
|
+
!actual.nil? && actual.match(/^(uuid:)*\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/)
|
68
70
|
end
|
69
71
|
failure_message do |actual|
|
70
72
|
"expected a uid, but got '#{actual}'"
|
data/spec/output_spec.rb
CHANGED
@@ -1,106 +1,110 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# encoding: UTF-8
|
2
|
+
describe WinRM::Output, unit: true do
|
3
|
+
subject { WinRM::Output.new }
|
3
4
|
|
4
|
-
context
|
5
|
-
describe
|
6
|
-
it
|
5
|
+
context 'when there is no output' do
|
6
|
+
describe '#stdout' do
|
7
|
+
it 'is empty' do
|
7
8
|
expect(subject.stdout).to be_empty
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
11
|
-
describe
|
12
|
-
it
|
12
|
+
describe '#stderr' do
|
13
|
+
it 'is empty' do
|
13
14
|
expect(subject.stderr).to be_empty
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
|
-
describe
|
18
|
-
it
|
18
|
+
describe '#output' do
|
19
|
+
it 'is empty' do
|
19
20
|
expect(subject.output).to be_empty
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
context
|
25
|
-
describe
|
26
|
-
it
|
27
|
-
subject[:data] << { :
|
28
|
-
expect(subject.stdout).to eq(
|
25
|
+
context 'when there is only one line' do
|
26
|
+
describe '#stdout' do
|
27
|
+
it 'is equal to that line' do
|
28
|
+
subject[:data] << { stdout: 'foo' }
|
29
|
+
expect(subject.stdout).to eq('foo')
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
|
-
describe
|
33
|
-
it
|
34
|
-
subject[:data] << { :
|
35
|
-
expect(subject.stderr).to eq(
|
33
|
+
describe '#stderr' do
|
34
|
+
it 'is equal to that line' do
|
35
|
+
subject[:data] << { stderr: 'foo' }
|
36
|
+
expect(subject.stderr).to eq('foo')
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
|
-
describe
|
40
|
-
it
|
41
|
-
subject[:data] << { :
|
42
|
-
expect(subject.output).to eq(
|
40
|
+
describe '#output' do
|
41
|
+
it 'is equal to stdout' do
|
42
|
+
subject[:data] << { stdout: 'foo' }
|
43
|
+
expect(subject.output).to eq('foo')
|
43
44
|
end
|
44
45
|
|
45
|
-
it
|
46
|
-
subject[:data] << { :
|
47
|
-
expect(subject.output).to eq(
|
46
|
+
it 'is equal to stderr' do
|
47
|
+
subject[:data] << { stderr: 'foo' }
|
48
|
+
expect(subject.output).to eq('foo')
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
52
|
-
context
|
53
|
+
context 'when there is one line of each type' do
|
53
54
|
before(:each) do
|
54
|
-
subject[:data] << { :
|
55
|
-
subject[:data] << { :
|
55
|
+
subject[:data] << { stdout: 'foo' }
|
56
|
+
subject[:data] << { stderr: 'bar' }
|
56
57
|
end
|
57
58
|
|
58
|
-
describe
|
59
|
-
it
|
60
|
-
expect(subject.stdout).to eq(
|
59
|
+
describe '#stdout' do
|
60
|
+
it 'is equal to that line' do
|
61
|
+
expect(subject.stdout).to eq('foo')
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
|
-
describe
|
65
|
-
it
|
66
|
-
expect(subject.stderr).to eq(
|
65
|
+
describe '#stderr' do
|
66
|
+
it 'is equal to that line' do
|
67
|
+
expect(subject.stderr).to eq('bar')
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
70
|
-
describe
|
71
|
-
it
|
72
|
-
expect(subject.output).to eq(
|
71
|
+
describe '#output' do
|
72
|
+
it 'is equal to stdout + stderr' do
|
73
|
+
expect(subject.output).to eq('foobar')
|
73
74
|
end
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
77
|
-
context
|
78
|
+
context 'when there are multiple lines' do
|
78
79
|
before(:each) do
|
79
|
-
subject[:data] << { :
|
80
|
-
subject[:data] << { :
|
81
|
-
subject[:data] << { :
|
82
|
-
subject[:data] << {
|
83
|
-
subject[:data] << { :
|
80
|
+
subject[:data] << { stdout: 'I can have a newline\nanywhere, ' }
|
81
|
+
subject[:data] << { stderr: 'I can also have stderr' }
|
82
|
+
subject[:data] << { stdout: 'or stdout', stderr: ' and stderr' }
|
83
|
+
subject[:data] << {}
|
84
|
+
subject[:data] << { stdout: ' or nothing! (above)' }
|
84
85
|
end
|
85
86
|
|
86
|
-
describe
|
87
|
-
it
|
88
|
-
expect(subject.stdout).to eq(
|
87
|
+
describe '#stdout' do
|
88
|
+
it 'is equal to that line' do
|
89
|
+
expect(subject.stdout).to eq(
|
90
|
+
'I can have a newline\nanywhere, or stdout or nothing! (above)')
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
92
|
-
describe
|
93
|
-
it
|
94
|
-
expect(subject.stderr).to eq(
|
94
|
+
describe '#stderr' do
|
95
|
+
it 'is equal to that line' do
|
96
|
+
expect(subject.stderr).to eq('I can also have stderr and stderr')
|
95
97
|
end
|
96
98
|
end
|
97
99
|
|
98
|
-
describe
|
99
|
-
it
|
100
|
-
expect(subject.output).to eq(
|
100
|
+
describe '#output' do
|
101
|
+
it 'is equal to stdout + stderr' do
|
102
|
+
expect(subject.output).to eq(
|
103
|
+
'I can have a newline\nanywhere, I can also have stderror stdout ' \
|
104
|
+
'and stderr or nothing! (above)')
|
101
105
|
end
|
102
106
|
end
|
103
107
|
end
|
104
108
|
|
105
|
-
pending
|
109
|
+
pending 'parse CLIXML errors and convert to Strings and/or Exceptions'
|
106
110
|
end
|
data/spec/powershell_spec.rb
CHANGED
@@ -1,25 +1,26 @@
|
|
1
|
-
|
1
|
+
# encoding: UTF-8
|
2
|
+
describe 'winrm client powershell', integration: true do
|
2
3
|
before(:all) do
|
3
4
|
@winrm = winrm_connection
|
4
5
|
end
|
5
6
|
|
6
7
|
describe 'empty string' do
|
7
8
|
subject(:output) { @winrm.powershell('') }
|
8
|
-
it { should have_exit_code
|
9
|
-
it { should have_stderr_match
|
9
|
+
it { should have_exit_code 4_294_770_688 }
|
10
|
+
it { should have_stderr_match(/Cannot process the command because of a missing parameter/) }
|
10
11
|
end
|
11
12
|
|
12
13
|
describe 'ipconfig' do
|
13
14
|
subject(:output) { @winrm.powershell('ipconfig') }
|
14
15
|
it { should have_exit_code 0 }
|
15
|
-
it { should have_stdout_match
|
16
|
+
it { should have_stdout_match(/Windows IP Configuration/) }
|
16
17
|
it { should have_no_stderr }
|
17
18
|
end
|
18
19
|
|
19
20
|
describe 'echo \'hello world\' using apostrophes' do
|
20
21
|
subject(:output) { @winrm.powershell("echo 'hello world'") }
|
21
22
|
it { should have_exit_code 0 }
|
22
|
-
it { should have_stdout_match
|
23
|
+
it { should have_stdout_match(/hello world/) }
|
23
24
|
it { should have_no_stderr }
|
24
25
|
end
|
25
26
|
|
@@ -27,8 +28,6 @@ describe 'winrm client powershell', :integration => true do
|
|
27
28
|
subject(:output) { @winrm.powershell('dir /z') }
|
28
29
|
it { should have_exit_code 1 }
|
29
30
|
it { should have_no_stdout }
|
30
|
-
#TODO Better
|
31
|
-
#it { should have_stderr_match /Invalid switch/ }
|
32
31
|
end
|
33
32
|
|
34
33
|
describe 'Math area calculation' do
|
@@ -41,14 +40,14 @@ describe 'winrm client powershell', :integration => true do
|
|
41
40
|
)
|
42
41
|
end
|
43
42
|
it { should have_exit_code 0 }
|
44
|
-
it { should have_stdout_match
|
43
|
+
it { should have_stdout_match(/49.9648722805149/) }
|
45
44
|
it { should have_no_stderr }
|
46
45
|
end
|
47
46
|
|
48
47
|
describe 'ipconfig with a block' do
|
49
48
|
subject(:stdout) do
|
50
49
|
outvar = ''
|
51
|
-
@winrm.powershell('ipconfig') do |stdout,
|
50
|
+
@winrm.powershell('ipconfig') do |stdout, _stderr|
|
52
51
|
outvar << stdout
|
53
52
|
end
|
54
53
|
outvar
|
@@ -63,7 +62,7 @@ describe 'winrm client powershell', :integration => true do
|
|
63
62
|
$host.ui.WriteErrorLine(', world!')
|
64
63
|
eos
|
65
64
|
|
66
|
-
@captured_stdout, @captured_stderr =
|
65
|
+
@captured_stdout, @captured_stderr = '', ''
|
67
66
|
@winrm.powershell(script) do |stdout, stderr|
|
68
67
|
@captured_stdout << stdout if stdout
|
69
68
|
@captured_stderr << stderr if stderr
|
@@ -79,16 +78,19 @@ describe 'winrm client powershell', :integration => true do
|
|
79
78
|
# TODO: Option to parse CLIXML
|
80
79
|
# expect(output.output).to eq("Hello\n, world!")
|
81
80
|
# expect(output.stderr).to eq(", world!")
|
82
|
-
expect(output.stderr).to eq(
|
81
|
+
expect(output.stderr).to eq(
|
82
|
+
"#< CLIXML\r\n<Objs Version=\"1.1.0.1\" " \
|
83
|
+
"xmlns=\"http://schemas.microsoft.com/powershell/2004/04\">" \
|
84
|
+
"<S S=\"Error\">, world!_x000D__x000A_</S></Objs>")
|
83
85
|
expect(output.stderr).to eq(@captured_stderr)
|
84
86
|
end
|
85
87
|
|
86
88
|
it 'should have output' do
|
87
89
|
# TODO: Option to parse CLIXML
|
88
90
|
# expect(output.output).to eq("Hello\n, world!")
|
89
|
-
expect(output.output).to eq("Hello\n#< CLIXML\r\n<Objs Version=\"1.1.0.1\"
|
91
|
+
expect(output.output).to eq("Hello\n#< CLIXML\r\n<Objs Version=\"1.1.0.1\" " \
|
92
|
+
"xmlns=\"http://schemas.microsoft.com/powershell/2004/04\">" \
|
93
|
+
"<S S=\"Error\">, world!_x000D__x000A_</S></Objs>")
|
90
94
|
end
|
91
95
|
end
|
92
96
|
end
|
93
|
-
|
94
|
-
|
@@ -1,15 +1,15 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
require 'winrm/http/response_handler'
|
2
3
|
|
3
|
-
describe 'response handler', :
|
4
|
-
|
5
|
-
['v1', 'v2'].each do |winrm_version|
|
4
|
+
describe 'response handler', unit: true do
|
5
|
+
%w(v1, v2).each do |winrm_version|
|
6
6
|
let(:soap_fault) { File.read("spec/stubs/responses/soap_fault_#{winrm_version}.xml") }
|
7
7
|
let(:open_shell) { File.read("spec/stubs/responses/open_shell_#{winrm_version}.xml") }
|
8
8
|
|
9
9
|
describe "successful 200 #{winrm_version} response" do
|
10
10
|
it 'returns an xml doc' do
|
11
11
|
handler = WinRM::ResponseHandler.new(open_shell, 200)
|
12
|
-
xml_doc = handler.parse_to_xml
|
12
|
+
xml_doc = handler.parse_to_xml
|
13
13
|
expect(xml_doc).to be_instance_of(REXML::Document)
|
14
14
|
expect(xml_doc.to_s).to eq(REXML::Document.new(open_shell).to_s)
|
15
15
|
end
|
@@ -18,14 +18,14 @@ describe 'response handler', :unit => true do
|
|
18
18
|
describe "failed 500 #{winrm_version} response" do
|
19
19
|
it 'raises a WinRMHTTPTransportError' do
|
20
20
|
handler = WinRM::ResponseHandler.new('', 500)
|
21
|
-
expect { handler.parse_to_xml
|
21
|
+
expect { handler.parse_to_xml }.to raise_error(WinRM::WinRMHTTPTransportError)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "failed 401 #{winrm_version} response" do
|
26
26
|
it 'raises a WinRMAuthorizationError' do
|
27
27
|
handler = WinRM::ResponseHandler.new('', 401)
|
28
|
-
expect { handler.parse_to_xml
|
28
|
+
expect { handler.parse_to_xml }.to raise_error(WinRM::WinRMAuthorizationError)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -33,22 +33,23 @@ describe 'response handler', :unit => true do
|
|
33
33
|
it 'raises a WinRMWSManFault' do
|
34
34
|
handler = WinRM::ResponseHandler.new(soap_fault, 400)
|
35
35
|
begin
|
36
|
-
handler.parse_to_xml
|
36
|
+
handler.parse_to_xml
|
37
37
|
rescue WinRM::WinRMWSManFault => e
|
38
38
|
expect(e.fault_code).to eq('2150858778')
|
39
|
-
expect(e.fault_description).to include(
|
39
|
+
expect(e.fault_description).to include(
|
40
|
+
'The specified class does not exist in the given namespace')
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
|
-
describe
|
46
|
-
let(:wmi_error) { File.read(
|
46
|
+
describe 'failed 500 WMI error response' do
|
47
|
+
let(:wmi_error) { File.read('spec/stubs/responses/wmi_error_v2.xml') }
|
47
48
|
|
48
49
|
it 'raises a WinRMWMIError' do
|
49
50
|
handler = WinRM::ResponseHandler.new(wmi_error, 500)
|
50
51
|
begin
|
51
|
-
handler.parse_to_xml
|
52
|
+
handler.parse_to_xml
|
52
53
|
rescue WinRM::WinRMWMIError => e
|
53
54
|
expect(e.error_code).to eq('2150859173')
|
54
55
|
expect(e.error).to include('The WS-Management service cannot process the request.')
|