winrm 2.0.3 → 2.1.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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -10
  3. data/.rubocop.yml +26 -26
  4. data/.travis.yml +11 -11
  5. data/Gemfile +3 -3
  6. data/README.md +260 -233
  7. data/Rakefile +34 -34
  8. data/Vagrantfile +6 -6
  9. data/WinrmAppveyor.psm1 +31 -31
  10. data/appveyor.yml +51 -51
  11. data/changelog.md +104 -101
  12. data/lib/winrm.rb +39 -39
  13. data/lib/winrm/connection.rb +83 -82
  14. data/lib/winrm/connection_opts.rb +91 -91
  15. data/lib/winrm/exceptions.rb +76 -76
  16. data/lib/winrm/http/response_handler.rb +96 -96
  17. data/lib/winrm/http/transport.rb +424 -424
  18. data/lib/winrm/http/transport_factory.rb +68 -68
  19. data/lib/winrm/output.rb +59 -59
  20. data/lib/winrm/psrp/create_pipeline.xml.erb +167 -167
  21. data/lib/winrm/psrp/fragment.rb +70 -70
  22. data/lib/winrm/psrp/init_runspace_pool.xml.erb +224 -224
  23. data/lib/winrm/psrp/message.rb +130 -130
  24. data/lib/winrm/psrp/message_data.rb +42 -42
  25. data/lib/winrm/psrp/message_data/base.rb +49 -49
  26. data/lib/winrm/psrp/message_data/error_record.rb +68 -68
  27. data/lib/winrm/psrp/message_data/pipeline_host_call.rb +32 -32
  28. data/lib/winrm/psrp/message_data/pipeline_output.rb +49 -49
  29. data/lib/winrm/psrp/message_data/pipeline_state.rb +40 -40
  30. data/lib/winrm/psrp/message_data/runspacepool_host_call.rb +32 -32
  31. data/lib/winrm/psrp/message_data/runspacepool_state.rb +39 -39
  32. data/lib/winrm/psrp/message_data/session_capability.rb +36 -36
  33. data/lib/winrm/psrp/message_defragmenter.rb +62 -62
  34. data/lib/winrm/psrp/message_factory.rb +75 -75
  35. data/lib/winrm/psrp/message_fragmenter.rb +60 -60
  36. data/lib/winrm/psrp/powershell_output_decoder.rb +139 -139
  37. data/lib/winrm/psrp/receive_response_reader.rb +97 -97
  38. data/lib/winrm/psrp/session_capability.xml.erb +7 -7
  39. data/lib/winrm/psrp/uuid.rb +40 -40
  40. data/lib/winrm/shells/base.rb +180 -175
  41. data/lib/winrm/shells/cmd.rb +65 -65
  42. data/lib/winrm/shells/power_shell.rb +202 -202
  43. data/lib/winrm/shells/retryable.rb +45 -45
  44. data/lib/winrm/shells/shell_factory.rb +58 -50
  45. data/lib/winrm/version.rb +7 -7
  46. data/lib/winrm/wsmv/base.rb +59 -59
  47. data/lib/winrm/wsmv/cleanup_command.rb +61 -61
  48. data/lib/winrm/wsmv/close_shell.rb +50 -50
  49. data/lib/winrm/wsmv/command.rb +101 -101
  50. data/lib/winrm/wsmv/command_output.rb +76 -76
  51. data/lib/winrm/wsmv/command_output_decoder.rb +55 -55
  52. data/lib/winrm/wsmv/configuration.rb +46 -46
  53. data/lib/winrm/wsmv/create_pipeline.rb +66 -66
  54. data/lib/winrm/wsmv/create_shell.rb +119 -119
  55. data/lib/winrm/wsmv/header.rb +203 -203
  56. data/lib/winrm/wsmv/init_runspace_pool.rb +95 -95
  57. data/lib/winrm/wsmv/iso8601_duration.rb +60 -60
  58. data/lib/winrm/wsmv/keep_alive.rb +68 -68
  59. data/lib/winrm/wsmv/receive_response_reader.rb +126 -126
  60. data/lib/winrm/wsmv/send_data.rb +68 -68
  61. data/lib/winrm/wsmv/soap.rb +51 -51
  62. data/lib/winrm/wsmv/wql_query.rb +79 -79
  63. data/lib/winrm/wsmv/write_stdin.rb +88 -88
  64. data/tests/integration/auth_timeout_spec.rb +18 -18
  65. data/tests/integration/cmd_spec.rb +131 -110
  66. data/tests/integration/config-example.yml +16 -16
  67. data/tests/integration/issue_59_spec.rb +26 -26
  68. data/tests/integration/powershell_spec.rb +165 -165
  69. data/tests/integration/spec_helper.rb +65 -65
  70. data/tests/integration/transport_spec.rb +99 -99
  71. data/tests/integration/wql_spec.rb +16 -16
  72. data/tests/matchers.rb +60 -60
  73. data/tests/spec/configuration_spec.rb +184 -184
  74. data/tests/spec/connection_spec.rb +39 -39
  75. data/tests/spec/exception_spec.rb +50 -50
  76. data/tests/spec/http/transport_factory_spec.rb +68 -68
  77. data/tests/spec/http/transport_spec.rb +44 -44
  78. data/tests/spec/output_spec.rb +127 -127
  79. data/tests/spec/psrp/fragment_spec.rb +62 -62
  80. data/tests/spec/psrp/message_data/base_spec.rb +13 -13
  81. data/tests/spec/psrp/message_data/error_record_spec.rb +41 -41
  82. data/tests/spec/psrp/message_data/pipeline_host_call_spec.rb +25 -25
  83. data/tests/spec/psrp/message_data/pipeline_output_spec.rb +32 -32
  84. data/tests/spec/psrp/message_data/pipeline_state_spec.rb +40 -40
  85. data/tests/spec/psrp/message_data/runspace_pool_host_call_spec.rb +25 -25
  86. data/tests/spec/psrp/message_data/runspacepool_state_spec.rb +16 -16
  87. data/tests/spec/psrp/message_data/session_capability_spec.rb +30 -30
  88. data/tests/spec/psrp/message_data_spec.rb +35 -35
  89. data/tests/spec/psrp/message_defragmenter_spec.rb +47 -47
  90. data/tests/spec/psrp/message_fragmenter_spec.rb +105 -105
  91. data/tests/spec/psrp/powershell_output_decoder_spec.rb +100 -100
  92. data/tests/spec/psrp/psrp_message_spec.rb +70 -70
  93. data/tests/spec/psrp/recieve_response_reader_spec.rb +172 -172
  94. data/tests/spec/psrp/uuid_spec.rb +28 -28
  95. data/tests/spec/response_handler_spec.rb +61 -61
  96. data/tests/spec/shells/base_spec.rb +202 -202
  97. data/tests/spec/shells/cmd_spec.rb +75 -75
  98. data/tests/spec/shells/powershell_spec.rb +175 -175
  99. data/tests/spec/spec_helper.rb +47 -47
  100. data/tests/spec/stubs/clixml/error_record.xml.erb +84 -84
  101. data/tests/spec/stubs/clixml/pipeline_state.xml.erb +88 -88
  102. data/tests/spec/stubs/responses/get_command_output_response.xml.erb +13 -13
  103. data/tests/spec/stubs/responses/get_command_output_response_not_done.xml.erb +10 -10
  104. data/tests/spec/stubs/responses/get_powershell_keepalive_response.xml.erb +10 -10
  105. data/tests/spec/stubs/responses/get_powershell_output_response.xml.erb +12 -12
  106. data/tests/spec/stubs/responses/get_powershell_output_response_not_done.xml.erb +9 -9
  107. data/tests/spec/stubs/responses/open_shell_v1.xml +19 -19
  108. data/tests/spec/stubs/responses/open_shell_v2.xml +20 -20
  109. data/tests/spec/stubs/responses/soap_fault_v1.xml +36 -36
  110. data/tests/spec/stubs/responses/soap_fault_v2.xml +42 -42
  111. data/tests/spec/stubs/responses/wmi_error_v2.xml +41 -41
  112. data/tests/spec/wsmv/cleanup_command_spec.rb +22 -22
  113. data/tests/spec/wsmv/close_shell_spec.rb +17 -17
  114. data/tests/spec/wsmv/command_output_decoder_spec.rb +37 -37
  115. data/tests/spec/wsmv/command_output_spec.rb +45 -45
  116. data/tests/spec/wsmv/command_spec.rb +19 -19
  117. data/tests/spec/wsmv/configuration_spec.rb +17 -17
  118. data/tests/spec/wsmv/create_pipeline_spec.rb +31 -31
  119. data/tests/spec/wsmv/create_shell_spec.rb +38 -38
  120. data/tests/spec/wsmv/init_runspace_pool_spec.rb +36 -36
  121. data/tests/spec/wsmv/keep_alive_spec.rb +21 -21
  122. data/tests/spec/wsmv/receive_response_reader_spec.rb +123 -123
  123. data/tests/spec/wsmv/send_data_spec.rb +30 -30
  124. data/tests/spec/wsmv/wql_query_spec.rb +13 -13
  125. data/tests/spec/wsmv/write_stdin_spec.rb +22 -22
  126. data/winrm.gemspec +42 -42
  127. metadata +2 -2
@@ -1,17 +1,17 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/close_shell'
4
-
5
- describe WinRM::WSMV::CloseShell do
6
- context 'default session options' do
7
- subject do
8
- described_class.new(default_connection_opts, shell_id: 'F4A2622B-B842-4EB8-8A78-0225C8A993DF')
9
- end
10
- let(:xml) { subject.build }
11
- it 'creates a well formed message' do
12
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
13
- expect(xml).to include('<a:Action mustUnderstand="true">' \
14
- 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action>')
15
- end
16
- end
17
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/close_shell'
4
+
5
+ describe WinRM::WSMV::CloseShell do
6
+ context 'default session options' do
7
+ subject do
8
+ described_class.new(default_connection_opts, shell_id: 'F4A2622B-B842-4EB8-8A78-0225C8A993DF')
9
+ end
10
+ let(:xml) { subject.build }
11
+ it 'creates a well formed message' do
12
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
13
+ expect(xml).to include('<a:Action mustUnderstand="true">' \
14
+ 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action>')
15
+ end
16
+ end
17
+ end
@@ -1,37 +1,37 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/command_output_decoder'
4
-
5
- describe WinRM::WSMV::CommandOutputDecoder do
6
- let(:raw_output_with_bom) do
7
- '77u/' \
8
- 'ICAgQ29ubmVjdGlvbi1zcGVjaWZpYyBETlMgU3VmZml4ICAuIDogDQogICBMaW5rLWxvY2FsIElQdjYgQWRkcmVzcyA' \
9
- 'uIC4gLiAuIC4gOiBmZTgwOjo5MTFkOjE2OTQ6NTcwNDo1YjI5JTEyDQogICBJUHY0IEFkZHJlc3MuIC4gLiAuIC4gLi' \
10
- 'AuIC4gLiAuIC4gOiAxMC4wLjIuMTUNCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yN' \
11
- 'TUuMjU1LjANCiAgIERlZmF1bHQgR2F0ZXdheSAuIC4gLiAuIC4gLiAuIC4gLiA6IDEwLjAuMi4yDQoNClR1bm5lbCBh' \
12
- 'ZGFwdGVyIGlzYXRhcC57RjBENTY2RDgtNzlCMS00QUYwLUJENUQtMkM5RkVEOEI3MTE3fToNCg0KICAgTWVkaWEgU3R' \
13
- 'hdGUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogTWVkaWEgZGlzY29ubmVjdGVkDQogICBDb25uZWN0aW9uLXNwZWNpZm' \
14
- 'ljIEROUyBTdWZmaXggIC4gOiANCg0KVHVubmVsIGFkYXB0ZXIgVGVyZWRvIFR1bm5lbGluZyBQc2V1ZG8tSW50ZXJmY' \
15
- 'WNlOg0KDQogICBDb25uZWN0aW9uLXNwZWNpZmljIEROUyBTdWZmaXggIC4gOiANCiAgIElQdjYgQWRkcmVzcy4gLiAu' \
16
- 'IC4gLiAuIC4gLiAuIC4gLiA6IDIwMDE6MDo5ZDM4OjZhYmQ6NGJiOjI4YjU6ZjVmZjpmZGYwDQogICBMaW5rLWxvY2F' \
17
- 'sIElQdjYgQWRkcmVzcyAuIC4gLiAuIC4gOiBmZTgwOjo0YmI6MjhiNTpmNWZmOmZkZjAlMTQNCiAgIERlZmF1bHQgR2' \
18
- 'F0ZXdheSAuIC4gLiAuIC4gLiAuIC4gLiA6IDo6DQo='
19
- end
20
- let(:expected) do
21
- " Connection-specific DNS Suffix . : \r\n Link-local IPv6 Address . . . . . : fe80::911" \
22
- "d:1694:5704:5b29%12\r\n IPv4 Address. . . . . . . . . . . : 10.0.2.15\r\n Subnet Mask ." \
23
- " . . . . . . . . . . : 255.255.255.0\r\n Default Gateway . . . . . . . . . : 10.0.2.2\r\n" \
24
- "\r\nTunnel adapter isatap.{F0D566D8-79B1-4AF0-BD5D-2C9FED8B7117}:\r\n\r\n Media State . ." \
25
- " . . . . . . . . . : Media disconnected\r\n Connection-specific DNS Suffix . : \r\n\r\nT" \
26
- "unnel adapter Teredo Tunneling Pseudo-Interface:\r\n\r\n Connection-specific DNS Suffix " \
27
- ". : \r\n IPv6 Address. . . . . . . . . . . : 2001:0:9d38:6abd:4bb:28b5:f5ff:fdf0\r\n Li" \
28
- "nk-local IPv6 Address . . . . . : fe80::4bb:28b5:f5ff:fdf0%14\r\n Default Gateway . . . ." \
29
- " . . . . . : ::\r\n"
30
- end
31
- subject { described_class.new }
32
- context 'valid UTF-8 raw output' do
33
- it 'decodes' do
34
- expect(subject.decode(raw_output_with_bom)).to eq(expected)
35
- end
36
- end
37
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/command_output_decoder'
4
+
5
+ describe WinRM::WSMV::CommandOutputDecoder do
6
+ let(:raw_output_with_bom) do
7
+ '77u/' \
8
+ 'ICAgQ29ubmVjdGlvbi1zcGVjaWZpYyBETlMgU3VmZml4ICAuIDogDQogICBMaW5rLWxvY2FsIElQdjYgQWRkcmVzcyA' \
9
+ 'uIC4gLiAuIC4gOiBmZTgwOjo5MTFkOjE2OTQ6NTcwNDo1YjI5JTEyDQogICBJUHY0IEFkZHJlc3MuIC4gLiAuIC4gLi' \
10
+ 'AuIC4gLiAuIC4gOiAxMC4wLjIuMTUNCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yN' \
11
+ 'TUuMjU1LjANCiAgIERlZmF1bHQgR2F0ZXdheSAuIC4gLiAuIC4gLiAuIC4gLiA6IDEwLjAuMi4yDQoNClR1bm5lbCBh' \
12
+ 'ZGFwdGVyIGlzYXRhcC57RjBENTY2RDgtNzlCMS00QUYwLUJENUQtMkM5RkVEOEI3MTE3fToNCg0KICAgTWVkaWEgU3R' \
13
+ 'hdGUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogTWVkaWEgZGlzY29ubmVjdGVkDQogICBDb25uZWN0aW9uLXNwZWNpZm' \
14
+ 'ljIEROUyBTdWZmaXggIC4gOiANCg0KVHVubmVsIGFkYXB0ZXIgVGVyZWRvIFR1bm5lbGluZyBQc2V1ZG8tSW50ZXJmY' \
15
+ 'WNlOg0KDQogICBDb25uZWN0aW9uLXNwZWNpZmljIEROUyBTdWZmaXggIC4gOiANCiAgIElQdjYgQWRkcmVzcy4gLiAu' \
16
+ 'IC4gLiAuIC4gLiAuIC4gLiA6IDIwMDE6MDo5ZDM4OjZhYmQ6NGJiOjI4YjU6ZjVmZjpmZGYwDQogICBMaW5rLWxvY2F' \
17
+ 'sIElQdjYgQWRkcmVzcyAuIC4gLiAuIC4gOiBmZTgwOjo0YmI6MjhiNTpmNWZmOmZkZjAlMTQNCiAgIERlZmF1bHQgR2' \
18
+ 'F0ZXdheSAuIC4gLiAuIC4gLiAuIC4gLiA6IDo6DQo='
19
+ end
20
+ let(:expected) do
21
+ " Connection-specific DNS Suffix . : \r\n Link-local IPv6 Address . . . . . : fe80::911" \
22
+ "d:1694:5704:5b29%12\r\n IPv4 Address. . . . . . . . . . . : 10.0.2.15\r\n Subnet Mask ." \
23
+ " . . . . . . . . . . : 255.255.255.0\r\n Default Gateway . . . . . . . . . : 10.0.2.2\r\n" \
24
+ "\r\nTunnel adapter isatap.{F0D566D8-79B1-4AF0-BD5D-2C9FED8B7117}:\r\n\r\n Media State . ." \
25
+ " . . . . . . . . . : Media disconnected\r\n Connection-specific DNS Suffix . : \r\n\r\nT" \
26
+ "unnel adapter Teredo Tunneling Pseudo-Interface:\r\n\r\n Connection-specific DNS Suffix " \
27
+ ". : \r\n IPv6 Address. . . . . . . . . . . : 2001:0:9d38:6abd:4bb:28b5:f5ff:fdf0\r\n Li" \
28
+ "nk-local IPv6 Address . . . . . : fe80::4bb:28b5:f5ff:fdf0%14\r\n Default Gateway . . . ." \
29
+ " . . . . . : ::\r\n"
30
+ end
31
+ subject { described_class.new }
32
+ context 'valid UTF-8 raw output' do
33
+ it 'decodes' do
34
+ expect(subject.decode(raw_output_with_bom)).to eq(expected)
35
+ end
36
+ end
37
+ end
@@ -1,45 +1,45 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/command_output'
4
- require 'winrm/wsmv/header'
5
-
6
- describe WinRM::WSMV::CommandOutput do
7
- context 'default session options' do
8
- let(:cmd_out_opts) do
9
- {
10
- shell_id: 'F4A2622B-B842-4EB8-8A78-0225C8A993DF',
11
- command_id: 'A2A2622B-B842-4EB8-8A78-0225C8A993DF'
12
- }
13
- end
14
- subject { described_class.new(default_connection_opts, cmd_out_opts) }
15
- let(:xml) { subject.build }
16
- it 'creates a well formed message' do
17
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
18
- expect(xml).to include('<w:Option Name="WSMAN_CMDSHELL_OPTION_KEEPALIVE">TRUE</w:Option>')
19
- expect(xml).to include('w:ResourceURI mustUnderstand="true">' \
20
- 'http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd</w:ResourceURI>')
21
- expect(xml).to include('<rsp:DesiredStream ' \
22
- 'CommandId="A2A2622B-B842-4EB8-8A78-0225C8A993DF">stdout stderr</rsp:DesiredStream>')
23
- end
24
- end
25
- context 'powershell' do
26
- let(:cmd_out_opts) do
27
- {
28
- shell_id: 'F4A2622B-B842-4EB8-8A78-0225C8A993DF',
29
- command_id: 'A2A2622B-B842-4EB8-8A78-0225C8A993DF',
30
- shell_uri: WinRM::WSMV::Header::RESOURCE_URI_POWERSHELL,
31
- out_streams: %w(stdout)
32
- }
33
- end
34
- subject { described_class.new(default_connection_opts, cmd_out_opts) }
35
- let(:xml) { subject.build }
36
- it 'creates a well formed message' do
37
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
38
- expect(xml).to include('<w:Option Name="WSMAN_CMDSHELL_OPTION_KEEPALIVE">TRUE</w:Option>')
39
- expect(xml).to include('w:ResourceURI mustUnderstand="true">' \
40
- 'http://schemas.microsoft.com/powershell/Microsoft.PowerShell</w:ResourceURI>')
41
- expect(xml).to include('<rsp:DesiredStream ' \
42
- 'CommandId="A2A2622B-B842-4EB8-8A78-0225C8A993DF">stdout</rsp:DesiredStream>')
43
- end
44
- end
45
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/command_output'
4
+ require 'winrm/wsmv/header'
5
+
6
+ describe WinRM::WSMV::CommandOutput do
7
+ context 'default session options' do
8
+ let(:cmd_out_opts) do
9
+ {
10
+ shell_id: 'F4A2622B-B842-4EB8-8A78-0225C8A993DF',
11
+ command_id: 'A2A2622B-B842-4EB8-8A78-0225C8A993DF'
12
+ }
13
+ end
14
+ subject { described_class.new(default_connection_opts, cmd_out_opts) }
15
+ let(:xml) { subject.build }
16
+ it 'creates a well formed message' do
17
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
18
+ expect(xml).to include('<w:Option Name="WSMAN_CMDSHELL_OPTION_KEEPALIVE">TRUE</w:Option>')
19
+ expect(xml).to include('w:ResourceURI mustUnderstand="true">' \
20
+ 'http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd</w:ResourceURI>')
21
+ expect(xml).to include('<rsp:DesiredStream ' \
22
+ 'CommandId="A2A2622B-B842-4EB8-8A78-0225C8A993DF">stdout stderr</rsp:DesiredStream>')
23
+ end
24
+ end
25
+ context 'powershell' do
26
+ let(:cmd_out_opts) do
27
+ {
28
+ shell_id: 'F4A2622B-B842-4EB8-8A78-0225C8A993DF',
29
+ command_id: 'A2A2622B-B842-4EB8-8A78-0225C8A993DF',
30
+ shell_uri: WinRM::WSMV::Header::RESOURCE_URI_POWERSHELL,
31
+ out_streams: %w(stdout)
32
+ }
33
+ end
34
+ subject { described_class.new(default_connection_opts, cmd_out_opts) }
35
+ let(:xml) { subject.build }
36
+ it 'creates a well formed message' do
37
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
38
+ expect(xml).to include('<w:Option Name="WSMAN_CMDSHELL_OPTION_KEEPALIVE">TRUE</w:Option>')
39
+ expect(xml).to include('w:ResourceURI mustUnderstand="true">' \
40
+ 'http://schemas.microsoft.com/powershell/Microsoft.PowerShell</w:ResourceURI>')
41
+ expect(xml).to include('<rsp:DesiredStream ' \
42
+ 'CommandId="A2A2622B-B842-4EB8-8A78-0225C8A993DF">stdout</rsp:DesiredStream>')
43
+ end
44
+ end
45
+ end
@@ -1,19 +1,19 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/command'
4
-
5
- describe WinRM::WSMV::Command do
6
- context 'default session options' do
7
- let(:cmd_opts) do
8
- {
9
- shell_id: 'D5A2622B-B842-4EB8-8A78-0225C8A993DF',
10
- command: 'ipconfig'
11
- }
12
- end
13
- subject { described_class.new(default_connection_opts, cmd_opts) }
14
- let(:xml) { subject.build }
15
- it 'creates a well formed message' do
16
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
17
- end
18
- end
19
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/command'
4
+
5
+ describe WinRM::WSMV::Command do
6
+ context 'default session options' do
7
+ let(:cmd_opts) do
8
+ {
9
+ shell_id: 'D5A2622B-B842-4EB8-8A78-0225C8A993DF',
10
+ command: 'ipconfig'
11
+ }
12
+ end
13
+ subject { described_class.new(default_connection_opts, cmd_opts) }
14
+ let(:xml) { subject.build }
15
+ it 'creates a well formed message' do
16
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
17
+ end
18
+ end
19
+ end
@@ -1,17 +1,17 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/configuration'
4
-
5
- describe WinRM::WSMV::Configuration do
6
- subject do
7
- described_class.new(default_connection_opts)
8
- end
9
- let(:xml) { subject.build }
10
- it 'creates a well formed message' do
11
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
12
- expect(xml).to include('<a:Action mustUnderstand="true">' \
13
- 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action>')
14
- expect(xml).to include('w:ResourceURI mustUnderstand="true">' \
15
- 'http://schemas.microsoft.com/wbem/wsman/1/config</w:ResourceURI>')
16
- end
17
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/configuration'
4
+
5
+ describe WinRM::WSMV::Configuration do
6
+ subject do
7
+ described_class.new(default_connection_opts)
8
+ end
9
+ let(:xml) { subject.build }
10
+ it 'creates a well formed message' do
11
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
12
+ expect(xml).to include('<a:Action mustUnderstand="true">' \
13
+ 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action>')
14
+ expect(xml).to include('w:ResourceURI mustUnderstand="true">' \
15
+ 'http://schemas.microsoft.com/wbem/wsman/1/config</w:ResourceURI>')
16
+ end
17
+ end
@@ -1,31 +1,31 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/create_pipeline'
4
-
5
- describe WinRM::WSMV::CreatePipeline do
6
- context 'default session options' do
7
- let(:shell_id) { 'D5A2622B-B842-4EB8-8A78-0225C8A993DF' }
8
- let(:command_id) { 'D5A2622B-B842-4EB8-8A78-0225C8A993DF' }
9
- let(:fragment) { WinRM::PSRP::Fragment.new(0, [1, 2, 3]) }
10
- let(:pipeline) { Base64.strict_encode64(fragment.bytes.pack('C*')) }
11
-
12
- subject do
13
- WinRM::WSMV::CreatePipeline.new(
14
- default_connection_opts,
15
- shell_id,
16
- command_id,
17
- fragment
18
- )
19
- end
20
- let(:xml) { subject.build }
21
- it 'creates a well formed message' do
22
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
23
- expect(xml).to include(
24
- '<w:SelectorSet><w:Selector Name="ShellId">' \
25
- "#{shell_id}</w:Selector></w:SelectorSet>")
26
- expect(xml).to include("<rsp:CommandLine CommandId=\"#{command_id}\">")
27
- expect(xml).to include('<rsp:Command>Invoke-Expression</rsp:Command>')
28
- expect(xml).to include("<rsp:Arguments>#{pipeline}</rsp:Arguments>")
29
- end
30
- end
31
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/create_pipeline'
4
+
5
+ describe WinRM::WSMV::CreatePipeline do
6
+ context 'default session options' do
7
+ let(:shell_id) { 'D5A2622B-B842-4EB8-8A78-0225C8A993DF' }
8
+ let(:command_id) { 'D5A2622B-B842-4EB8-8A78-0225C8A993DF' }
9
+ let(:fragment) { WinRM::PSRP::Fragment.new(0, [1, 2, 3]) }
10
+ let(:pipeline) { Base64.strict_encode64(fragment.bytes.pack('C*')) }
11
+
12
+ subject do
13
+ WinRM::WSMV::CreatePipeline.new(
14
+ default_connection_opts,
15
+ shell_id,
16
+ command_id,
17
+ fragment
18
+ )
19
+ end
20
+ let(:xml) { subject.build }
21
+ it 'creates a well formed message' do
22
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
23
+ expect(xml).to include(
24
+ '<w:SelectorSet><w:Selector Name="ShellId">' \
25
+ "#{shell_id}</w:Selector></w:SelectorSet>")
26
+ expect(xml).to include("<rsp:CommandLine CommandId=\"#{command_id}\">")
27
+ expect(xml).to include('<rsp:Command>Invoke-Expression</rsp:Command>')
28
+ expect(xml).to include("<rsp:Arguments>#{pipeline}</rsp:Arguments>")
29
+ end
30
+ end
31
+ end
@@ -1,38 +1,38 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/create_shell'
4
-
5
- describe WinRM::WSMV::CreateShell do
6
- context 'default session options' do
7
- subject { described_class.new(default_connection_opts) }
8
- let(:xml) { subject.build }
9
- it 'creates a well formed message' do
10
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
11
- expect(xml).to include('<w:Locale xml:lang="en-US" mustUnderstand="false"/>')
12
- expect(xml).to include('<p:DataLocale xml:lang="en-US" mustUnderstand="false"/>')
13
- expect(xml).to include(
14
- '<p:SessionId mustUnderstand="false">' \
15
- 'uuid:05A2622B-B842-4EB8-8A78-0225C8A993DF</p:SessionId>')
16
- expect(xml).to include('<w:MaxEnvelopeSize mustUnderstand="true">153600</w:MaxEnvelopeSize>')
17
- expect(xml).to include('<a:To>http://localhost:5985/wsman</a:To>')
18
- expect(xml).to include('<rsp:InputStreams>stdin</rsp:InputStreams>')
19
- expect(xml).to include('<rsp:OutputStreams>stdout stderr</rsp:OutputStreams>')
20
- expect(xml).to include(
21
- '<w:ResourceURI mustUnderstand="true">' \
22
- 'http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd</w:ResourceURI>')
23
- end
24
- context 'shell options w/env vars' do
25
- let(:shell_opts) do
26
- {
27
- env_vars: { 'FOO' => 'BAR' }
28
- }
29
- end
30
- subject { described_class.new(default_connection_opts, shell_opts) }
31
- let(:xml) { subject.build }
32
- it 'includes environemt vars' do
33
- expect(xml).to include(
34
- '<rsp:Environment><rsp:Variable Name="FOO">BAR</rsp:Variable></rsp:Environment>')
35
- end
36
- end
37
- end
38
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/create_shell'
4
+
5
+ describe WinRM::WSMV::CreateShell do
6
+ context 'default session options' do
7
+ subject { described_class.new(default_connection_opts) }
8
+ let(:xml) { subject.build }
9
+ it 'creates a well formed message' do
10
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
11
+ expect(xml).to include('<w:Locale xml:lang="en-US" mustUnderstand="false"/>')
12
+ expect(xml).to include('<p:DataLocale xml:lang="en-US" mustUnderstand="false"/>')
13
+ expect(xml).to include(
14
+ '<p:SessionId mustUnderstand="false">' \
15
+ 'uuid:05A2622B-B842-4EB8-8A78-0225C8A993DF</p:SessionId>')
16
+ expect(xml).to include('<w:MaxEnvelopeSize mustUnderstand="true">153600</w:MaxEnvelopeSize>')
17
+ expect(xml).to include('<a:To>http://localhost:5985/wsman</a:To>')
18
+ expect(xml).to include('<rsp:InputStreams>stdin</rsp:InputStreams>')
19
+ expect(xml).to include('<rsp:OutputStreams>stdout stderr</rsp:OutputStreams>')
20
+ expect(xml).to include(
21
+ '<w:ResourceURI mustUnderstand="true">' \
22
+ 'http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd</w:ResourceURI>')
23
+ end
24
+ context 'shell options w/env vars' do
25
+ let(:shell_opts) do
26
+ {
27
+ env_vars: { 'FOO' => 'BAR' }
28
+ }
29
+ end
30
+ subject { described_class.new(default_connection_opts, shell_opts) }
31
+ let(:xml) { subject.build }
32
+ it 'includes environemt vars' do
33
+ expect(xml).to include(
34
+ '<rsp:Environment><rsp:Variable Name="FOO">BAR</rsp:Variable></rsp:Environment>')
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,36 +1,36 @@
1
- # encoding: UTF-8
2
-
3
- require 'winrm/wsmv/init_runspace_pool'
4
-
5
- describe WinRM::WSMV::InitRunspacePool do
6
- context 'default session options' do
7
- let(:shell_id) { SecureRandom.uuid.to_s.upcase }
8
- let(:payload) { 'blah'.bytes }
9
-
10
- subject { described_class.new(default_connection_opts, shell_id, payload) }
11
-
12
- it 'creates a well formed message' do
13
- xml = subject.build
14
- expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
15
- expect(xml).to include('<w:Locale xml:lang="en-US" mustUnderstand="false"/>')
16
- expect(xml).to include('<p:DataLocale xml:lang="en-US" mustUnderstand="false"/>')
17
- expect(xml).to include(
18
- '<p:SessionId mustUnderstand="false">' \
19
- 'uuid:05A2622B-B842-4EB8-8A78-0225C8A993DF</p:SessionId>')
20
- expect(xml).to include('<w:MaxEnvelopeSize mustUnderstand="true">153600</w:MaxEnvelopeSize>')
21
- expect(xml).to include('<a:To>http://localhost:5985/wsman</a:To>')
22
- expect(xml).to include(
23
- '<w:OptionSet env:mustUnderstand="true">' \
24
- '<w:Option Name="protocolversion" MustComply="true">2.3</w:Option></w:OptionSet>')
25
- expect(xml).to include('<rsp:InputStreams>stdin pr</rsp:InputStreams>')
26
- expect(xml).to include('<rsp:OutputStreams>stdout</rsp:OutputStreams>')
27
- expect(xml).to include("<rsp:Shell ShellId=\"#{subject.shell_id}\">")
28
- expect(xml).to include(
29
- '<w:ResourceURI mustUnderstand="true">' \
30
- 'http://schemas.microsoft.com/powershell/Microsoft.PowerShell')
31
- expect(xml).to include(
32
- '<creationXml xmlns="http://schemas.microsoft.com/powershell">' \
33
- "#{Base64.strict_encode64(payload.pack('C*'))}</creationXml>")
34
- end
35
- end
36
- end
1
+ # encoding: UTF-8
2
+
3
+ require 'winrm/wsmv/init_runspace_pool'
4
+
5
+ describe WinRM::WSMV::InitRunspacePool do
6
+ context 'default session options' do
7
+ let(:shell_id) { SecureRandom.uuid.to_s.upcase }
8
+ let(:payload) { 'blah'.bytes }
9
+
10
+ subject { described_class.new(default_connection_opts, shell_id, payload) }
11
+
12
+ it 'creates a well formed message' do
13
+ xml = subject.build
14
+ expect(xml).to include('<w:OperationTimeout>PT60S</w:OperationTimeout>')
15
+ expect(xml).to include('<w:Locale xml:lang="en-US" mustUnderstand="false"/>')
16
+ expect(xml).to include('<p:DataLocale xml:lang="en-US" mustUnderstand="false"/>')
17
+ expect(xml).to include(
18
+ '<p:SessionId mustUnderstand="false">' \
19
+ 'uuid:05A2622B-B842-4EB8-8A78-0225C8A993DF</p:SessionId>')
20
+ expect(xml).to include('<w:MaxEnvelopeSize mustUnderstand="true">153600</w:MaxEnvelopeSize>')
21
+ expect(xml).to include('<a:To>http://localhost:5985/wsman</a:To>')
22
+ expect(xml).to include(
23
+ '<w:OptionSet env:mustUnderstand="true">' \
24
+ '<w:Option Name="protocolversion" MustComply="true">2.3</w:Option></w:OptionSet>')
25
+ expect(xml).to include('<rsp:InputStreams>stdin pr</rsp:InputStreams>')
26
+ expect(xml).to include('<rsp:OutputStreams>stdout</rsp:OutputStreams>')
27
+ expect(xml).to include("<rsp:Shell ShellId=\"#{subject.shell_id}\">")
28
+ expect(xml).to include(
29
+ '<w:ResourceURI mustUnderstand="true">' \
30
+ 'http://schemas.microsoft.com/powershell/Microsoft.PowerShell')
31
+ expect(xml).to include(
32
+ '<creationXml xmlns="http://schemas.microsoft.com/powershell">' \
33
+ "#{Base64.strict_encode64(payload.pack('C*'))}</creationXml>")
34
+ end
35
+ end
36
+ end