Add some minimal specs for #generate

This commit is contained in:
James Lee
2015-04-03 00:11:41 -05:00
parent fde7cdd4a7
commit a1b4cf375f
+71 -4
View File
@@ -4,8 +4,23 @@ require 'msf/core/encoded_payload'
describe Msf::EncodedPayload do
include_context 'Msf::Simple::Framework#modules loading'
before do
expect_to_load_module_ancestors(
ancestor_reference_names: [
# Excellent rank
'x86/shikata_ga_nai',
# Great rank
'x86/call4_dword_xor',
'generic/none',
],
module_type: 'encoder',
modules_path: modules_path,
)
end
let(:ancestor_reference_names) {
%w{singles/linux/x86/shell_reverse_tcp}
# A module that doesn't require any datastore junk to generate
%w{singles/linux/x86/shell_bind_tcp}
}
let(:module_type) {
@@ -13,7 +28,7 @@ describe Msf::EncodedPayload do
}
let(:reference_name) {
'linux/x86/shell_reverse_tcp'
'linux/x86/shell_bind_tcp'
}
let(:payload) {
@@ -25,14 +40,26 @@ describe Msf::EncodedPayload do
}
subject(:encoded_payload) do
described_class.new(framework, payload, {})
described_class.new(framework, payload, reqs)
end
let(:badchars) { nil }
let(:reqs) { { 'BadChars' => badchars } }
it 'is an Msf::EncodedPayload' do
expect(encoded_payload).to be_a(described_class)
end
describe '.create' do
subject(:encoded_payload) do
described_class.create(payload, { 'BadChars' => badchars } )
end
specify { expect(encoded_payload).to respond_to(:encoded) }
it 'is an Msf::EncodedPayload' do
expect(encoded_payload).to be_a(described_class)
end
context 'when passed a valid payload instance' do
@@ -40,7 +67,7 @@ describe Msf::EncodedPayload do
before { described_class.any_instance.stub(:generate) }
it 'returns an Msf::EncodedPayload instance' do
expect(described_class.create(payload)).to be_a(described_class)
expect(encoded_payload).to be_a(described_class)
end
end
@@ -76,4 +103,44 @@ describe Msf::EncodedPayload do
end
end
end
describe '#generate' do
let!(:generate) { encoded_payload.generate }
context 'with no badchars' do
let(:badchars) { nil }
specify 'returns the raw value' do
expect(encoded_payload.generate("RAW")).to eql("RAW")
end
end
context 'with bad characters: "\\0"' do
let(:badchars) { "\0".force_encoding('binary') }
specify 'chooses x86/shikata_ga_nai' do
expect(encoded_payload.encoder.refname).to eq("x86/shikata_ga_nai")
end
specify do
expect(encoded_payload.encoded).not_to include(badchars)
end
end
context 'with bad characters: "\\xD9\\x00"' do
let(:badchars) { "\xD9\x00".force_encoding('binary') }
specify 'chooses x86/call4_dword_xor' do
expect(encoded_payload.encoder.refname).to eq("x86/call4_dword_xor")
end
specify do
expect(encoded_payload.encoded).not_to include(badchars)
end
end
end
end