Module: Metasploit::Framework::Spec::UntestedPayloads

Defined in:
lib/metasploit/framework/spec/untested_payloads.rb

Class Method Summary collapse

Class Method Details

.define_taskvoid

Note:

`Metasploit::Framework::Spec::UntestedPayloads.define_task` should be run after the normal spec task is defined.

This method returns an undefined value.

Adds action to `spec` tasks so that `rake spec` fails if `log/untested-payloads.log` exists and prints out untested payloads from that log to stderr.

# @example Using `Metasploit::Framework::Spec::UntestedPayloads.define_task` with 'payload can be instantiated' shared examples and 'untested payloads' shared context

# Rakefile
require 'metasploit/framework/spec/untested_payloads'

# defined spec task with rspec-rails
My::Application.load_tasks
# extends spec task to fail when there are untested payloads
Metasploit::Framework::Spec::UntestedPayloads.define_task

# spec/modules/payloads_spec.rb
require 'spec_helper'

describe 'modules/payloads' do
   modules_pathname = Pathname.new(__FILE__).parent.parent.parent.join('modules')

   include_context 'untested payloads', modules_pathname: modules_pathname

   context 'my/staged/payload/handler' do
     it_should_behave_like 'payload can be instantiated',
                           ancestor_reference_names: [
                             'stages/my/payload',
                             'stagers/my/payload/handler'
                           ],
                           modules_pathname: modules_pathname,
                           reference_name: 'my/staged/payload/handler'
   end
end

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/metasploit/framework/spec/untested_payloads.rb', line 42

def self.define_task
  Rake::Task.define_task :spec do
    untested_payloads_pathname = Pathname.new 'log/untested-payloads.log'

    if untested_payloads_pathname.exist?
      tool_path = 'tools/modules/missing_payload_tests.rb'

      $stderr.puts "Untested payload detected.  Running `#{tool_path}` to see contexts to add to " \
                   "`spec/modules/payloads_spec.rb` to test those payload ancestor reference names."

      system(tool_path)

      exit 1
    end
  end
end