class FNode::Node

Constants

ATTRS
CONFIG_FILE
FUZZINGS_FOLDER

Public Class Methods

new() click to toggle source
# File lib/fnode/node.rb, line 41
def initialize
  load_attrs CONFIG_FILE
  setup_logger
end
test() click to toggle source
# File lib/fnode/node.rb, line 84
def self.test
  n = Node.instance
  n.test_app = "pluma"
  n.test_file_path = "/tmp/fuzz.txt"
  n.run_fuzz_test
  sleep 10
  n.stop_fuzz_test
end

Public Instance Methods

dump_attrs(yml_file=CONFIG_FILE) click to toggle source
# File lib/fnode/node.rb, line 25
def dump_attrs(yml_file=CONFIG_FILE)
  attrs = {}
  ATTRS.each do |attr|
    attrs.store attr, self.public_send(attr)
  end

  open(yml_file, "w") do |f|
    f << attrs.to_yaml
  end
end
get_server_file() click to toggle source
# File lib/fnode/node.rb, line 76
def get_server_file
  file = Tempfile.new("templete_file")
  file.binmode
  file << open("http://#{admin_ip}:#{admin_port}/tasks/#{task.id}/templete_file").read
  file.close
  file
end
load_attrs(yml_file=CONFIG_FILE) click to toggle source
# File lib/fnode/node.rb, line 18
def load_attrs(yml_file=CONFIG_FILE)
  attrs = YAML.load_file(yml_file)
  ATTRS.each do |attr|
    self.public_send("#{attr}=", attrs[attr])
  end
end
run_fuzz_test() click to toggle source
# File lib/fnode/node.rb, line 46
def run_fuzz_test
  stop_fuzz_test unless pid.nil?

  self.pid = fork do
    FileUtils.mkdir_p FUZZINGS_FOLDER
    Dir.chdir FUZZINGS_FOLDER
    cmd = "python #{File.expand_path('../../fuzzers/fusil_fuzzer.py', __dir__)} #{test_file_path} --force-unsafe --keep-sessions --fuzzing #{test_app}"
    begin
      set_state  "running"
      @log.info "pid: #{Process.pid}"
      exec cmd
    rescue Exception => e
      @log_error.error "run test error: " + e.to_s
      stop_fuzz_test
    end
  end
end
set_state(new_state) click to toggle source
# File lib/fnode/node.rb, line 36
def set_state(new_state)
  state = new_state
  @log.info "Change state: #{state}"
end
stop_fuzz_test() click to toggle source
# File lib/fnode/node.rb, line 64
def stop_fuzz_test
  unless pid.nil?
    begin
      Process.kill('QUIT', pid)
      self.pid = nil
      set_state "stop"
    rescue => e
      @log_error.error "stop fuzz test error" + e.to_s
    end
  end
end

Private Instance Methods

setup_logger() click to toggle source
# File lib/fnode/node.rb, line 94
def setup_logger
  require 'fileutils'
  FileUtils.mkdir_p 'log'

  @log = Logging.logger['fnode']
  @log.level = :info

  # here we setup a color scheme called 'bright'
  Logging.color_scheme( 'bright',
    :levels => {
      :info  => :green,
      :warn  => :yellow,
      :error => :red,
      :fatal => [:white, :on_red]
    },
    :date => :blue,
    :logger => :cyan,
    :message => :magenta
  )

  Logging.appenders.stdout(
    'stdout',
    :layout => Logging.layouts.pattern(
      :pattern => '[%d] %-5l %c: %m\n',
      :color_scheme => 'bright'
    )
  )

  @log.add_appenders 'stdout', \
    Logging.appenders.file('log/fnode.log', \
      :layout => Logging.layouts.pattern(:pattern => '[%d] %-5l %c: %m\n'))

  @log_error = Logging.logger['error']
  @log_error.level = :error
  @log_error.add_appenders Logging.appenders.file('log/fnode.error.log', \
      :layout => Logging.layouts.pattern(:pattern => '[%d] %-5l %c: %m\n'))
end