require 'spec_helper'
require 'capybara/rspec'
require_relative '../support/beef_test'
RSpec.describe BeefTest, run_on_long_tests: true do
before(:each) do
@pid = start_beef_server_and_wait
end
after(:each) do
stop_beef_server(@pid)
end
describe '.login' do
it 'logs in successfully' do
expect(port_available?)
session = BeefTest.login()
expect(session).not_to be_nil
expect(session.has_content?('Hooked Browsers', wait: 10))
end
end
describe '.logout' do
before(:each) do
expect(port_available?)
@session = BeefTest.login()
expect(@session.has_content?('Hooked Browsers', wait: 10))
end
it 'logs out successfully' do
expect(port_available?)
expect(@session.has_content?('Hooked Browsers', wait: 10))
@sessoin = BeefTest.logout(@session)
expect(@session.has_no_content?('Hooked Browsers', wait: 10))
expect(@session.has_content?('Authentication', wait: 10))
@session.reset_session!
end
end
describe '.save_screenshot' do
it 'saves a screenshot' do
session = Capybara::Session.new(:selenium_headless) if session.nil?
outputDir = '/tmp'
directory = "#{outputDir}/#{SecureRandom.hex}/"
expect(File.directory?(directory)).to be false
BeefTest.save_screenshot(session, directory)
expect(File.directory?(directory)).to be true
screenshot_files = Dir.glob("#{directory}/*.png")
expect(screenshot_files.empty?).to be false
screenshot_files.each do |file|
expect(File.size(file)).to be > 0
File.delete(file)
end
expect(Dir.glob("#{directory}/*.png").empty?).to be true
Dir.delete(directory)
expect(File.directory?(directory)).to be false
end
end
let(:session) { Capybara::Session.new(:selenium_headless) }
let(:victim) { Capybara::Session.new(:selenium_headless) }
describe '.new_attacker' do
it 'creates a new attacker session' do
expect(session).not_to be_nil
result = BeefTest.new_attacker(session)
expect(result).to eq(session)
expect(session.has_no_content?('Authentication', wait: 10))
expect(session.has_content?('Hooked Browsers', wait: 10))
session.reset_session!
end
end
describe '.new_victim' do
it 'creates a new victim session' do
allow(victim).to receive(:visit)
expect(victim).not_to be_nil
result = BeefTest.new_victim(victim)
expect(victim).to have_received(:visit).with(VICTIM_URL)
expect(result).to eq(victim)
victim.reset_session!
end
end
end