class Specinfra::Backend::BeakerCygwin

Public Instance Methods

run_command(cmd, _opt = {}) click to toggle source

Run a windows style command using serverspec. Defaults to running on the ‘default_node’ test node, otherwise uses the node specified in @example.metadata @param [String] cmd The serverspec command to executed @param [Hash] opt No currently supported options @return [Hash] Returns a hash containing :exit_status, :stdout and :stderr

# File lib/beaker-rspec/helpers/serverspec.rb, line 218
def run_command(cmd, _opt = {})
  node = get_working_node
  script = create_script(cmd)
  # when node is not cygwin rm -rf will fail so lets use native del instead
  # There should be a better way to do this, but for now , this works
  if node.is_cygwin?
    delete_command = 'rm -rf'
    redirection = '< /dev/null'
  else
    delete_command = 'del'
    redirection = '< NUL'
  end
  on node, "#{delete_command} script.ps1"
  create_remote_file(node, 'script.ps1', script)
  # When using cmd on a pswindows node redirection should be set to < NUl
  # when using a cygwing one, /dev/null should be fine
  ret = ssh_exec!(node, "powershell.exe -File script.ps1 #{redirection}")

  if @example
    @example.metadata[:command] = script
    @example.metadata[:stdout]  = ret[:stdout]
  end

  CommandResult.new ret
end