metasploit-framework/spec/tools/jsobfu_spec.rb

80 lines
1.7 KiB
Ruby

require 'spec_helper'
load Metasploit::Framework.root.join('tools/exploit/jsobfu.rb').to_path
require 'stringio'
RSpec.describe Jsobfu do
let(:fname) {
'test.js'
}
let(:js) {
%Q|alert("test");|
}
describe Jsobfu::Driver do
subject do
Jsobfu::Driver.new
end
describe '#run' do
let(:default_opts) {
{ :input => fname, :iteration => 1 }
}
before(:example) do
allow(Jsobfu::OptsConsole).to receive(:parse).with(any_args).and_return(default_opts)
allow(File).to receive(:open).with(fname, 'rb').and_yield(StringIO.new(js))
@out = $stdout
$stdout = StringIO.new
$stdout.string = ''
end
after(:example) do
$stdout = @out
end
context 'when a javascript file is given' do
it 'returns an String' do
subject.run
expect($stdout.string).to be_a(String)
end
it 'returns a non empty String' do
subject.run
expect($stdout.string).not_to be_empty
end
it 'returns an String different than the original' do
subject.run
expect($stdout.string).not_to eq(js)
end
end
end
end
describe Jsobfu::OptsConsole do
subject do
Jsobfu::OptsConsole
end
context 'when no options are given' do
it 'raises OptionParser::MissingArgument' do
expect{subject.parse([])}.to raise_error(OptionParser::MissingArgument)
end
end
context 'when -t isn\'t a number' do
it 'raises OptionParser::MissingArgument' do
args = "-i #{fname} -t NaN".split
expect{subject.parse(args)}.to raise_error(OptionParser::InvalidOption)
end
end
end
end