inspec/lib/vulcano/backend/mock.rb
2015-09-21 13:43:09 +02:00

91 lines
2.3 KiB
Ruby

# encoding: utf-8
module Vulcano::Backends
class Mock < Vulcano.backend(1)
name 'mock'
def initialize(conf, mapping = {}, cmd_mapping = {})
@conf = conf
@files = {}
@mapping = mapping
@cmd_mapping = cmd_mapping
end
def file(path)
puts "--> get file #{path}"
newpath = @mapping[path]
@files[path] ||= File.new(self, newpath || path, newpath.nil?)
end
def run_command(cmd)
puts "--> run command #{cmd}"
result = Command.new(self, cmd)
mapping = @cmd_mapping[cmd]
# read simulation data
return result if mapping.nil?
Command.new(self, cmd, File.new(self, mapping, false).content, '', 0)
end
def to_s
'Mock Backend Runner'
end
end
class Mock
class File
def initialize(runtime, path, mock = true)
@path = path
# mock dataset
if mock
@exists = (rand < 0.8) ? true : false
@is_file = (@exists && rand < 0.7) ? true : false
@size = 0
@content = ''
if @exists && @is_file
@size = (rand**3 * 1000).to_i
@size = 0 if rand < 0.2
end
if @size > 0
@content = (0...50).map { ('a'..'z').to_a[rand(26)] }.join
end
# we have a mapping file
else
@exists = IO::File.exists?(path)
@is_file = IO::File.file?(path)
@size = IO::File.size(path)
@content = IO::File.read(path)
end
end
def size
puts "----> get file #{@path} size: #{@size}"
@size
end
def content
puts "----> get file #{@path} content: #{@content}"
@content
end
def file?
puts "----> is file #{@path} a file? #{@is_file}"
@is_file
end
def exists?
puts "----> does file #{@path} exist? #{@exists}"
@exists
end
end
class Command
attr_accessor :stdout, :stderr, :exit_status
def initialize(runtime, cmd, stdout = nil, stderr = nil, exit_code = nil)
@exit_code = exit_code || (rand < 0.7) ? 0 : (100 * rand).to_i
@stdout = stdout || (0...50).map { ('a'..'z').to_a[rand(26)] }.join
@stderr = stderr || (0...50).map { ('a'..'z').to_a[rand(26)] }.join
end
end
end
end