forked from test-kitchen/test-kitchen
-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Labels
Description
Hi,
I'm using ServerSpec with Test Kitchen to validate Windows platforms, altough I believe the problem is with busser and not with ServerSpec.
When my spec files pass a given threshold in size, I get the following error:
D ---Nested Exception---
D Class: Kitchen::Transport::TransportFailed
D Message: Transport WinRM exited (1) using shell [powershell] for command: [$env:BUSSER_ROOT="/tmp/busser"; $env:G
EM_HOME="/tmp/busser/gems"; $env:GEM_PATH="/tmp/busser/gems"; $env:PATH="$env:PATH;$env:GEM_PATH/bin"; try { $env:BUSSER
_SUITE_PATH=@(busser suite path) } catch { $env:BUSSER_SUITE_PATH="" }; $env:GEM_CACHE="/tmp/busser/gems/cache"
busser suite cleanup
echo "Uploading $env:BUSSER_SUITE_PATH/serverspec/default_spec.rb (mode=0644)"
echo "<a big BASE64 string>" | busser deserialize --d
estination=$env:BUSSER_SUITE_PATH/serverspec/default_spec.rb --md5sum=ae128f6996f939cab5d3b3129919bf5f --perms=0644
echo "Uploading $env:BUSSER_SUITE_PATH/serverspec/event_logs_spec.rb (mode=0644)"
echo "<another big BASE64 string>" | bu
sser deserialize --destination=$env:BUSSER_SUITE_PATH/serverspec/event_logs_spec.rb --md5sum=e5bd4859e688b7581c07f97bdbe
b709c --perms=0644
echo "Uploading $env:BUSSER_SUITE_PATH/serverspec/windows_features_spec.rb (mode=0644)"
echo "<yet another big BASE64 string>" | busser deserialize --destination=$env:BUSSER_SUITE_PATH/serverspec/windows_features_spec.rb --md5sum=dc7f436ca8091
fb632d443e7548cf428 --perms=0644
]
REMOTE ERROR:
The command line is too long.
D ------Backtrace-------
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/transport/winrm.rb:54:in `execute'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/driver/base.rb:95:in `block in verify'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/transport/base.rb:73:in `connection'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/driver/base.rb:94:in `verify'
D C:/opscode/chefdk/embedded/lib/ruby/gems/2.0.0/gems/kitchen-vagrant-0.15.0/lib/kitchen/driver/vagrant.rb:92:in `v
erify'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:373:in `public_send'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:373:in `block in perform_action'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:437:in `call'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:437:in `synchronize_or_call'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:402:in `block in action'
D C:/opscode/chefdk/embedded/lib/ruby/2.0.0/benchmark.rb:281:in `measure'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:401:in `action'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:373:in `perform_action'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:351:in `verify_action'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:313:in `block in transition_to'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:312:in `each'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:312:in `transition_to'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/instance.rb:160:in `verify'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/command.rb:176:in `public_send'
D C:/opscode/chefdk/embedded/apps/test-kitchen/lib/kitchen/command.rb:176:in `block (2 levels) in run_action'
D C:/Users/jhm/.chefdk/gem/ruby/2.0.0/gems/logging-1.8.2/lib/logging/diagnostic_context.rb:323:in `call'
D C:/Users/jhm/.chefdk/gem/ruby/2.0.0/gems/logging-1.8.2/lib/logging/diagnostic_context.rb:323:in `block in create_
with_logging_context'
I've digged into it and I believe that the issue is we're telling powershell to execute a command that hits some ceiling.
I made a quick hack on \test-kitchen\lib\kitchen\busser.rb:
def sync_cmd
return if local_suite_files.empty?
cmd = <<-CMD.gsub(/^ {8}/, "")
#{busser_setup_env}
#{sudo(config[:busser_bin])} suite cleanup
CMD
#if shell == "bourne"
local_suite_files.each do |f|
cmd << stream_file(f, remote_file(f, config[:suite_name])).concat("\n")
end
helper_files.each do |f|
cmd << stream_file(f, remote_file(f, "helpers")).concat("\n")
end
#end
Util.wrap_command(cmd, shell)
end
def sync_files
if shell == "powershell"
suite_files = { local: local_suite_files + helper_files, remote: 'C:\tmp\busser\suites\serverspec' }
[suite_files]
else
[]
end
end
and \test-kitchen\lib\kitchen\driver\base.rb:
def verify(state)
transport.connection(state) do |conn|
conn.execute(busser.sync_cmd)
files_to_upload = busser.sync_files
files_to_upload.each do |files|
conn.upload!(files[:local], files[:remote])
end
conn.execute(busser.run_cmd)
end
end
and the problem when away. This is obviously not the correct solution but I do not know what would the best solution be.
Cheers,
João
Reactions are currently unavailable