winrm 2.3.0 → 2.3.5

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/lib/winrm/http/response_handler.rb +1 -1
  3. data/lib/winrm/http/transport.rb +2 -2
  4. data/lib/winrm/psrp/message.rb +128 -128
  5. data/lib/winrm/psrp/message_data/error_record.rb +2 -0
  6. data/lib/winrm/psrp/message_data/pipeline_output.rb +1 -1
  7. data/lib/winrm/psrp/message_factory.rb +14 -2
  8. data/lib/winrm/psrp/powershell_output_decoder.rb +142 -142
  9. data/lib/winrm/shells/base.rb +1 -0
  10. data/lib/winrm/shells/power_shell.rb +4 -4
  11. data/lib/winrm/version.rb +1 -1
  12. metadata +16 -90
  13. data/.gitignore +0 -10
  14. data/.rubocop.yml +0 -38
  15. data/.travis.yml +0 -10
  16. data/Gemfile +0 -2
  17. data/Rakefile +0 -33
  18. data/Vagrantfile +0 -6
  19. data/WinrmAppveyor.psm1 +0 -32
  20. data/appveyor.yml +0 -50
  21. data/changelog.md +0 -133
  22. data/preamble +0 -17
  23. data/tests/integration/auth_timeout_spec.rb +0 -17
  24. data/tests/integration/cmd_spec.rb +0 -130
  25. data/tests/integration/config-example.yml +0 -16
  26. data/tests/integration/issue_59_spec.rb +0 -25
  27. data/tests/integration/powershell_spec.rb +0 -164
  28. data/tests/integration/spec_helper.rb +0 -62
  29. data/tests/integration/transport_spec.rb +0 -98
  30. data/tests/integration/wql_spec.rb +0 -33
  31. data/tests/matchers.rb +0 -59
  32. data/tests/spec/configuration_spec.rb +0 -183
  33. data/tests/spec/connection_spec.rb +0 -37
  34. data/tests/spec/exception_spec.rb +0 -49
  35. data/tests/spec/http/transport_factory_spec.rb +0 -66
  36. data/tests/spec/http/transport_spec.rb +0 -43
  37. data/tests/spec/output_spec.rb +0 -128
  38. data/tests/spec/psrp/fragment_spec.rb +0 -60
  39. data/tests/spec/psrp/message_data/base_spec.rb +0 -11
  40. data/tests/spec/psrp/message_data/error_record_spec.rb +0 -39
  41. data/tests/spec/psrp/message_data/pipeline_host_call_spec.rb +0 -23
  42. data/tests/spec/psrp/message_data/pipeline_output_spec.rb +0 -30
  43. data/tests/spec/psrp/message_data/pipeline_state_spec.rb +0 -38
  44. data/tests/spec/psrp/message_data/runspace_pool_host_call_spec.rb +0 -23
  45. data/tests/spec/psrp/message_data/runspacepool_state_spec.rb +0 -14
  46. data/tests/spec/psrp/message_data/session_capability_spec.rb +0 -28
  47. data/tests/spec/psrp/message_data_spec.rb +0 -33
  48. data/tests/spec/psrp/message_defragmenter_spec.rb +0 -45
  49. data/tests/spec/psrp/message_fragmenter_spec.rb +0 -103
  50. data/tests/spec/psrp/powershell_output_decoder_spec.rb +0 -98
  51. data/tests/spec/psrp/psrp_message_spec.rb +0 -73
  52. data/tests/spec/psrp/recieve_response_reader_spec.rb +0 -170
  53. data/tests/spec/psrp/uuid_spec.rb +0 -28
  54. data/tests/spec/response_handler_spec.rb +0 -69
  55. data/tests/spec/shells/base_spec.rb +0 -227
  56. data/tests/spec/shells/cmd_spec.rb +0 -75
  57. data/tests/spec/shells/powershell_spec.rb +0 -221
  58. data/tests/spec/spec_helper.rb +0 -46
  59. data/tests/spec/stubs/clixml/error_record.xml.erb +0 -84
  60. data/tests/spec/stubs/clixml/pipeline_state.xml.erb +0 -88
  61. data/tests/spec/stubs/responses/get_command_output_response.xml.erb +0 -13
  62. data/tests/spec/stubs/responses/get_command_output_response_not_done.xml.erb +0 -10
  63. data/tests/spec/stubs/responses/get_omi_command_output_response.xml.erb +0 -23
  64. data/tests/spec/stubs/responses/get_omi_command_output_response_not_done.xml.erb +0 -24
  65. data/tests/spec/stubs/responses/get_omi_config_response.xml +0 -45
  66. data/tests/spec/stubs/responses/get_omi_powershell_keepalive_response.xml.erb +0 -33
  67. data/tests/spec/stubs/responses/get_powershell_keepalive_response.xml.erb +0 -10
  68. data/tests/spec/stubs/responses/get_powershell_output_response.xml.erb +0 -12
  69. data/tests/spec/stubs/responses/get_powershell_output_response_not_done.xml.erb +0 -9
  70. data/tests/spec/stubs/responses/open_shell_omi.xml +0 -43
  71. data/tests/spec/stubs/responses/open_shell_v1.xml +0 -19
  72. data/tests/spec/stubs/responses/open_shell_v2.xml +0 -20
  73. data/tests/spec/stubs/responses/soap_fault_omi.xml +0 -31
  74. data/tests/spec/stubs/responses/soap_fault_v1.xml +0 -36
  75. data/tests/spec/stubs/responses/soap_fault_v2.xml +0 -42
  76. data/tests/spec/stubs/responses/wmi_error_v2.xml +0 -41
  77. data/tests/spec/wsmv/cleanup_command_spec.rb +0 -20
  78. data/tests/spec/wsmv/close_shell_spec.rb +0 -15
  79. data/tests/spec/wsmv/command_output_decoder_spec.rb +0 -35
  80. data/tests/spec/wsmv/command_output_spec.rb +0 -43
  81. data/tests/spec/wsmv/command_spec.rb +0 -17
  82. data/tests/spec/wsmv/configuration_spec.rb +0 -15
  83. data/tests/spec/wsmv/create_pipeline_spec.rb +0 -30
  84. data/tests/spec/wsmv/create_shell_spec.rb +0 -39
  85. data/tests/spec/wsmv/init_runspace_pool_spec.rb +0 -38
  86. data/tests/spec/wsmv/keep_alive_spec.rb +0 -21
  87. data/tests/spec/wsmv/receive_response_reader_spec.rb +0 -124
  88. data/tests/spec/wsmv/send_data_spec.rb +0 -30
  89. data/tests/spec/wsmv/wql_query_spec.rb +0 -11
  90. data/tests/spec/wsmv/write_stdin_spec.rb +0 -20
  91. data/winrm.gemspec +0 -46
@@ -1,128 +0,0 @@
1
- describe WinRM::Output do
2
- subject { WinRM::Output.new }
3
-
4
- context 'when there is no output' do
5
- describe '#stdout' do
6
- it 'is empty' do
7
- expect(subject.stdout).to be_empty
8
- end
9
- end
10
-
11
- describe '#stderr' do
12
- it 'is empty' do
13
- expect(subject.stderr).to be_empty
14
- end
15
- end
16
-
17
- describe '#output' do
18
- it 'is empty' do
19
- expect(subject.output).to be_empty
20
- end
21
- end
22
- end
23
-
24
- context 'when there is only one line' do
25
- describe '#stdout' do
26
- it 'is equal to that line' do
27
- subject << { stdout: 'foo' }
28
- expect(subject.stdout).to eq('foo')
29
- end
30
- end
31
-
32
- describe '#stderr' do
33
- it 'is equal to that line' do
34
- subject << { stderr: 'foo' }
35
- expect(subject.stderr).to eq('foo')
36
- end
37
- end
38
-
39
- describe '#output' do
40
- it 'is equal to stdout' do
41
- subject << { stdout: 'foo' }
42
- expect(subject.output).to eq('foo')
43
- end
44
-
45
- it 'is equal to stderr' do
46
- subject << { stderr: 'foo' }
47
- expect(subject.output).to eq('foo')
48
- end
49
- end
50
- end
51
-
52
- context 'when there is one line of each type' do
53
- before(:each) do
54
- subject << { stdout: 'foo' }
55
- subject << { stderr: 'bar' }
56
- end
57
-
58
- describe '#stdout' do
59
- it 'is equal to that line' do
60
- expect(subject.stdout).to eq('foo')
61
- end
62
- end
63
-
64
- describe '#stderr' do
65
- it 'is equal to that line' do
66
- expect(subject.stderr).to eq('bar')
67
- end
68
- end
69
-
70
- describe '#output' do
71
- it 'is equal to stdout + stderr' do
72
- expect(subject.output).to eq('foobar')
73
- end
74
- end
75
- end
76
-
77
- context 'when there are multiple lines' do
78
- before(:each) do
79
- subject << { stdout: 'I can have a newline\nanywhere, ' }
80
- subject << { stderr: 'I can also have stderr' }
81
- subject << { stdout: 'or stdout', stderr: ' and stderr' }
82
- subject << {}
83
- subject << { stdout: ' or nothing! (above)' }
84
- end
85
-
86
- describe '#stdout' do
87
- it 'is equal to that line' do
88
- expect(subject.stdout).to eq(
89
- 'I can have a newline\nanywhere, or stdout or nothing! (above)'
90
- )
91
- end
92
- end
93
-
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')
97
- end
98
- end
99
-
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)'
105
- )
106
- end
107
- end
108
- end
109
-
110
- describe '#exitcode' do
111
- let(:exitcode) { 0 }
112
-
113
- context 'when a valid exit code is set' do
114
- it 'sets the exit code' do
115
- subject.exitcode = exitcode
116
- expect(subject.exitcode).to eq exitcode
117
- end
118
- end
119
-
120
- context 'when an invalid exit code is set' do
121
- let(:exitcode) { 'bad' }
122
-
123
- it 'sets the exit code' do
124
- expect { subject.exitcode = exitcode }.to raise_error WinRM::InvalidExitCode
125
- end
126
- end
127
- end
128
- end
@@ -1,60 +0,0 @@
1
- require 'winrm/psrp/fragment'
2
-
3
- describe WinRM::PSRP::Fragment do
4
- let(:id) { 1 }
5
- let(:message) { 'blah blah blah' }
6
-
7
- context 'called with just id and blob' do
8
- subject { described_class.new(id, message.bytes) }
9
-
10
- it 'sets the message id to 1' do
11
- expect(subject.bytes[0..7]).to eq([0, 0, 0, 0, 0, 0, 0, id])
12
- end
13
- it 'sets the fragment id to 0' do
14
- expect(subject.bytes[8..15]).to eq([0, 0, 0, 0, 0, 0, 0, 0])
15
- end
16
- it 'sets the last 2 bits of the end/start fragment' do
17
- expect(subject.bytes[16]).to eq(3)
18
- end
19
- it 'sets message blob length to 3640' do
20
- expect(subject.bytes[17..20]).to eq([0, 0, 0, message.bytes.length])
21
- end
22
- it 'sets message blob' do
23
- expect(subject.bytes[21..-1]).to eq(message.bytes)
24
- end
25
- end
26
-
27
- context 'specifying a fragment id' do
28
- let(:fragment_id) { 1 }
29
-
30
- subject { described_class.new(id, message.bytes, fragment_id) }
31
-
32
- it 'sets the fragment id' do
33
- expect(subject.bytes[8..15]).to eq([0, 0, 0, 0, 0, 0, 0, fragment_id])
34
- end
35
- end
36
-
37
- context 'middle fragment' do
38
- subject { described_class.new(id, message.bytes, 1, false, false) }
39
-
40
- it 'sets the last 2 bits of the end/start fragment to 0' do
41
- expect(subject.bytes[16]).to eq(0)
42
- end
43
- end
44
-
45
- context 'end fragment' do
46
- subject { described_class.new(id, message.bytes, 1, true, false) }
47
-
48
- it 'sets the end fragment bit' do
49
- expect(subject.bytes[16]).to eq(1)
50
- end
51
- end
52
-
53
- context 'start fragment' do
54
- subject { described_class.new(id, message.bytes, 1, false, true) }
55
-
56
- it 'sets the start fragment bit' do
57
- expect(subject.bytes[16]).to eq(2)
58
- end
59
- end
60
- end
@@ -1,11 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
-
3
- describe WinRM::PSRP::MessageData::Base do
4
- let(:raw_data) { 'raw_data' }
5
-
6
- subject { WinRM::PSRP::MessageData::Base.new(raw_data) }
7
-
8
- it 'holds raw message data' do
9
- expect(subject.raw).to eq(raw_data)
10
- end
11
- end
@@ -1,39 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/error_record'
3
-
4
- describe WinRM::PSRP::MessageData::ErrorRecord do
5
- let(:test_data_xml_template) do
6
- ERB.new(stubbed_clixml('error_record.xml.erb'))
7
- end
8
- let(:error_message) { 'an error' }
9
- let(:script_root) { 'script_root' }
10
- let(:category_message) { 'category message' }
11
- let(:stack_trace) { 'stack trace' }
12
- let(:error_id) { 'Microsoft.PowerShell.Commands.WriteErrorException' }
13
- let(:raw_data) { test_data_xml_template.result(binding) }
14
- subject { described_class.new(raw_data) }
15
-
16
- it 'returns the exception' do
17
- expect(subject.exception[:message]).to eq(error_message)
18
- end
19
-
20
- it 'returns the FullyQualifiedErrorId' do
21
- expect(subject.fully_qualified_error_id).to eq(error_id)
22
- end
23
-
24
- it 'returns the invocation info' do
25
- expect(subject.invocation_info[:line]).to eq("write-error '#{error_message}'")
26
- end
27
-
28
- it 'converts camel case properties to underscore' do
29
- expect(subject.invocation_info[:ps_script_root]).to eq(script_root)
30
- end
31
-
32
- it 'returns the error category message' do
33
- expect(subject.error_category_message).to eq(category_message)
34
- end
35
-
36
- it 'returns the script stack trace' do
37
- expect(subject.error_details_script_stack_trace).to eq(stack_trace)
38
- end
39
- end
@@ -1,23 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/pipeline_host_call'
3
-
4
- describe WinRM::PSRP::MessageData::PipelineHostCall do
5
- let(:raw_data) do
6
- "\xEF\xBB\xBF<Obj RefId=\"0\"><MS><I64 N=\"ci\">-100</I64><Obj N=\"mi\" RefId=\"1\">"\
7
- '<TN RefId="0"><T>System.Management.Automation.Remoting.RemoteHostMethodId</T>'\
8
- '<T>System.Enum</T><T>System.ValueType</T><T>System.Object</T></TN>'\
9
- '<ToString>WriteLine3</ToString><I32>17</I32></Obj><Obj N="mp" RefId="2">'\
10
- '<TN RefId="1"><T>System.Collections.ArrayList</T><T>System.Object</T></TN><LST>'\
11
- '<I32>7</I32><I32>0</I32><S>hello</S></LST></Obj></MS></Obj>'
12
- end
13
-
14
- subject { described_class.new(raw_data) }
15
-
16
- it 'parses method identifier' do
17
- expect(subject.method_identifier).to eq('WriteLine3')
18
- end
19
-
20
- it 'parses method parameters' do
21
- expect(subject.method_parameters[:s]).to eq('hello')
22
- end
23
- end
@@ -1,30 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/pipeline_output'
3
-
4
- describe WinRM::PSRP::MessageData::PipelineOutput do
5
- subject { described_class.new(raw_data) }
6
-
7
- context 'receiving output with BOM and no new line' do
8
- let(:raw_data) { "\xEF\xBB\xBF<obj><S>some data</S></obj>" }
9
-
10
- it 'output removes BOM and adds newline' do
11
- expect(subject.output).to eq("some data\r\n")
12
- end
13
- end
14
-
15
- context 'receiving output with encoded new line' do
16
- let(:raw_data) { '<obj><S>some data_x000D__x000A_</S></obj>' }
17
-
18
- it 'decodes without double newline' do
19
- expect(subject.output).to eq("some data\r\n")
20
- end
21
- end
22
-
23
- context 'receiving output with new line in middle' do
24
- let(:raw_data) { '<obj><S>some_x000D__x000A_data</S></obj>' }
25
-
26
- it 'decodes and replaces newline' do
27
- expect(subject.output).to eq("some\r\ndata\r\n")
28
- end
29
- end
30
- end
@@ -1,38 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/pipeline_state'
3
-
4
- describe WinRM::PSRP::MessageData::PipelineState do
5
- let(:test_data_xml_template) do
6
- ERB.new(stubbed_clixml('pipeline_state.xml.erb'))
7
- end
8
- let(:pipeline_state) { WinRM::PSRP::MessageData::PipelineState::FAILED }
9
- let(:error_message) { 'an error occured' }
10
- let(:category_message) { 'category message' }
11
- let(:error_id) { 'an error occured' }
12
- let(:raw_data) { test_data_xml_template.result(binding) }
13
- subject { described_class.new(raw_data) }
14
-
15
- it 'returns the state' do
16
- expect(subject.pipeline_state).to eq(pipeline_state)
17
- end
18
-
19
- it 'returns the exception' do
20
- expect(subject.exception_as_error_record.exception[:message]).to eq(error_message)
21
- end
22
-
23
- it 'returns the FullyQualifiedErrorId' do
24
- expect(subject.exception_as_error_record.fully_qualified_error_id).to eq(error_id)
25
- end
26
-
27
- it 'returns the error category message' do
28
- expect(subject.exception_as_error_record.error_category_message).to eq(category_message)
29
- end
30
-
31
- context 'state is not failed' do
32
- let(:pipeline_state) { WinRM::PSRP::MessageData::PipelineState::COMPLETED }
33
-
34
- it 'has a nil exception' do
35
- expect(subject.exception_as_error_record).to be(nil)
36
- end
37
- end
38
- end
@@ -1,23 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/runspacepool_host_call'
3
-
4
- describe WinRM::PSRP::MessageData::RunspacepoolHostCall do
5
- let(:raw_data) do
6
- "\xEF\xBB\xBF<Obj RefId=\"0\"><MS><I64 N=\"ci\">-100</I64><Obj N=\"mi\" RefId=\"1\">"\
7
- '<TN RefId="0"><T>System.Management.Automation.Remoting.RemoteHostMethodId</T>'\
8
- '<T>System.Enum</T><T>System.ValueType</T><T>System.Object</T></TN>'\
9
- '<ToString>WriteLine3</ToString><I32>17</I32></Obj><Obj N="mp" RefId="2">'\
10
- '<TN RefId="1"><T>System.Collections.ArrayList</T><T>System.Object</T></TN><LST>'\
11
- '<I32>7</I32><I32>0</I32><S>hello</S></LST></Obj></MS></Obj>'
12
- end
13
-
14
- subject { described_class.new(raw_data) }
15
-
16
- it 'parses method identifier' do
17
- expect(subject.method_identifier).to eq('WriteLine3')
18
- end
19
-
20
- it 'parses method parameters' do
21
- expect(subject.method_parameters[:s]).to eq('hello')
22
- end
23
- end
@@ -1,14 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/runspacepool_state'
3
-
4
- describe WinRM::PSRP::MessageData::RunspacepoolState do
5
- let(:raw_data) do
6
- "\xEF\xBB\xBF<Obj RefId=\"0\"><MS><I32 N=\"RunspaceState\">2</I32></MS></Obj>"
7
- end
8
-
9
- subject { described_class.new(raw_data) }
10
-
11
- it 'parses runspace state' do
12
- expect(subject.runspace_state).to eq(WinRM::PSRP::MessageData::RunspacepoolState::OPENED)
13
- end
14
- end
@@ -1,28 +0,0 @@
1
- require 'winrm/psrp/message_data/base'
2
- require 'winrm/psrp/message_data/session_capability'
3
-
4
- describe WinRM::PSRP::MessageData::SessionCapability do
5
- let(:protocol_version) { '2.2' }
6
- let(:ps_version) { '2.0' }
7
- let(:serialization_version) { '1.1.0.1' }
8
- let(:raw_data) do
9
- "\xEF\xBB\xBF<Obj RefId=\"0\"><MS>"\
10
- "<Version N=\"protocolversion\">#{protocol_version}</Version>"\
11
- "<Version N=\"PSVersion\">#{ps_version}</Version>"\
12
- "<Version N=\"SerializationVersion\">#{serialization_version}</Version></MS></Obj>"
13
- end
14
-
15
- subject { described_class.new(raw_data) }
16
-
17
- it 'parses protocol version' do
18
- expect(subject.protocol_version).to eq(protocol_version)
19
- end
20
-
21
- it 'parses ps version' do
22
- expect(subject.ps_version).to eq(ps_version)
23
- end
24
-
25
- it 'parses serialization version' do
26
- expect(subject.serialization_version).to eq(serialization_version)
27
- end
28
- end
@@ -1,33 +0,0 @@
1
- require 'winrm/psrp/message'
2
- require 'winrm/psrp/message_data'
3
-
4
- describe WinRM::PSRP::MessageData do
5
- describe '#parse' do
6
- let(:raw_data) { 'raw_data' }
7
- let(:message) do
8
- WinRM::PSRP::Message.new(
9
- '00000000-0000-0000-0000-000000000000',
10
- message_type,
11
- raw_data
12
- )
13
- end
14
-
15
- subject { WinRM::PSRP::MessageData.parse(message) }
16
-
17
- context 'defined message type' do
18
- let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_output] }
19
-
20
- it 'creates correct message data type' do
21
- expect(subject).to be_a(WinRM::PSRP::MessageData::PipelineOutput)
22
- end
23
- end
24
-
25
- context 'undefined message type' do
26
- let(:message_type) { WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_input] }
27
-
28
- it 'returns nill' do
29
- expect(subject).to be nil
30
- end
31
- end
32
- end
33
- end
@@ -1,45 +0,0 @@
1
- require 'winrm/psrp/message_defragmenter'
2
-
3
- describe WinRM::PSRP::MessageDefragmenter do
4
- context 'a real life fragment' do
5
- let(:bytes) do
6
- "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00I\x01"\
7
- "\x00\x00\x00\x04\x10\x04\x00Kk/=Z\xD3-E\x81v\xA0+6\xB1\xD3\x88\n\xED\x90\x9Cj\xE7PG"\
8
- "\x9F\xA2\xB2\xC99to9\xEF\xBB\xBF<S>some data_x000D__x000A_</S>".to_byte_string
9
- end
10
- subject { described_class.new.defragment(Base64.encode64(bytes)) }
11
-
12
- it 'parses the data' do
13
- expect(subject.data).to eq("\xEF\xBB\xBF<S>some data_x000D__x000A_</S>".to_byte_string)
14
- end
15
-
16
- it 'parses the destination' do
17
- expect(subject.destination).to eq(1)
18
- end
19
-
20
- it 'parses the message type' do
21
- expect(subject.type).to eq(WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_output])
22
- end
23
- end
24
-
25
- context 'multiple fragments' do
26
- let(:blob) do
27
- WinRM::PSRP::Message.new(
28
- 'bc1bfbba-8215-4a04-b2df-7a3ac0310e16',
29
- WinRM::PSRP::Message::MESSAGE_TYPES[:session_capability],
30
- 'This is a fragmented message'
31
- )
32
- end
33
- let(:fragment1) { WinRM::PSRP::Fragment.new(1, blob.bytes[0..5], 0, true, false) }
34
- let(:fragment2) { WinRM::PSRP::Fragment.new(1, blob.bytes[6..10], 1, false, false) }
35
- let(:fragment3) { WinRM::PSRP::Fragment.new(1, blob.bytes[11..-1], 2, false, true) }
36
-
37
- it 'pieces the message together' do
38
- subject.defragment(Base64.strict_encode64(fragment1.bytes.pack('C*')))
39
- subject.defragment(Base64.strict_encode64(fragment2.bytes.pack('C*')))
40
- message = subject.defragment(Base64.strict_encode64(fragment3.bytes.pack('C*')))
41
-
42
- expect(message.data[3..-1]).to eq(blob.data)
43
- end
44
- end
45
- end