/usr/lib/ruby/vendor_ruby/specinfra/backend/cmd.rb is in ruby-specinfra 2.35.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | require 'open3'
module Specinfra
module Backend
class Cmd < Base
include PowerShell::ScriptHelper
def os_info
{ :family => 'windows', :release => nil, :arch => nil }
end
def run_command(cmd, opts={})
script = create_script(cmd)
result = execute_script %Q{#{powershell} -encodedCommand #{encode_script(script)}}
if @example
@example.metadata[:command] = script
@example.metadata[:stdout] = result[:stdout] + result[:stderr]
end
CommandResult.new :stdout => result[:stdout], :stderr => result[:stderr],
:exit_status => result[:status]
end
def execute_script script
if Open3.respond_to? :capture3
stdout, stderr, status = Open3.capture3(script)
# powershell still exits with 0 even if there are syntax errors, although it spits the error out into stderr
# so we have to resort to return an error exit code if there is anything in the standard error
status = 1 if status == 0 and !stderr.empty?
{ :stdout => stdout, :stderr => stderr, :status => status }
else
stdout = `#{script} 2>&1`
{ :stdout => stdout, :stderr => nil, :status => $? }
end
end
def check_os
# Dirty hack for specs
'Windows'
end
private
def powershell
architecture = @example.metadata[:architecture] || get_config(:architecture)
case architecture
when :i386 then x86_powershell
when :x86_64 then x64_powershell
else raise ArgumentError, "invalid architecture [#{architecture}]"
end
end
def x64_powershell
find_powershell(%w(sysnative system32))
end
def x86_powershell
find_powershell(%w(syswow64 system32))
end
def find_powershell(dirs)
( dirs.map { |dir| "#{ENV['WINDIR']}\\#{dir}\\WindowsPowerShell\\v1.0\\powershell.exe" } ).find { |exe| File.exists?(exe) } || 'powershell'
end
end
end
end
|