Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
beefproject
GitHub Repository: beefproject/beef
Path: blob/master/spec/requests/beef_test_spec.rb
1154 views
1
#
2
# Copyright (c) 2006-2025 Wade Alcorn - [email protected]
3
# Browser Exploitation Framework (BeEF) - https://beefproject.com
4
# See the file 'doc/COPYING' for copying permission
5
#
6
require 'spec_helper'
7
require 'capybara/rspec'
8
require_relative '../support/beef_test'
9
10
RSpec.describe BeefTest, run_on_long_tests: true do
11
12
before(:each) do
13
@pid = start_beef_server_and_wait
14
end
15
16
after(:each) do
17
stop_beef_server(@pid)
18
end
19
20
describe '.login' do
21
it 'logs in successfully' do
22
expect(port_available?) # Check if the tcp port is open
23
session = BeefTest.login()
24
expect(session).not_to be_nil
25
expect(session.has_content?('Hooked Browsers', wait: 10))
26
end
27
end
28
29
describe '.logout' do
30
before(:each) do
31
expect(port_available?) # # Check if the tcp port is open
32
@session = BeefTest.login() # Ensure login before each '.logout' test
33
expect(@session.has_content?('Hooked Browsers', wait: 10))
34
end
35
36
it 'logs out successfully' do
37
expect(port_available?) # # Check if the tcp port is open
38
expect(@session.has_content?('Hooked Browsers', wait: 10))
39
40
# Log out of the session
41
@sessoin = BeefTest.logout(@session)
42
expect(@session.has_no_content?('Hooked Browsers', wait: 10))
43
expect(@session.has_content?('Authentication', wait: 10))
44
@session.reset_session!
45
end
46
end
47
48
describe '.save_screenshot' do
49
it 'saves a screenshot' do
50
session = Capybara::Session.new(:selenium_headless) if session.nil?
51
52
# Ensure the new directory does not exist
53
outputDir = '/tmp'
54
directory = "#{outputDir}/#{SecureRandom.hex}/"
55
expect(File.directory?(directory)).to be false
56
57
# Save the screenshot
58
BeefTest.save_screenshot(session, directory)
59
60
# Ensure the screenshot was saved
61
expect(File.directory?(directory)).to be true
62
screenshot_files = Dir.glob("#{directory}/*.png")
63
expect(screenshot_files.empty?).to be false
64
65
# Ensure the screenshot file is not empty and clean up
66
screenshot_files.each do |file|
67
expect(File.size(file)).to be > 0
68
File.delete(file)
69
end
70
expect(Dir.glob("#{directory}/*.png").empty?).to be true
71
72
# Remove the directory
73
Dir.delete(directory)
74
expect(File.directory?(directory)).to be false
75
end
76
end
77
78
let(:session) { Capybara::Session.new(:selenium_headless) }
79
let(:victim) { Capybara::Session.new(:selenium_headless) }
80
81
describe '.new_attacker' do
82
it 'creates a new attacker session' do
83
# # Test setup
84
expect(session).not_to be_nil
85
86
result = BeefTest.new_attacker(session)
87
88
# Test assertions
89
expect(result).to eq(session)
90
expect(session.has_no_content?('Authentication', wait: 10))
91
expect(session.has_content?('Hooked Browsers', wait: 10))
92
session.reset_session!
93
end
94
end
95
96
describe '.new_victim' do
97
it 'creates a new victim session' do
98
# Test setup
99
allow(victim).to receive(:visit)
100
expect(victim).not_to be_nil
101
102
# Test execution
103
result = BeefTest.new_victim(victim)
104
105
# Test assertions
106
expect(victim).to have_received(:visit).with(VICTIM_URL)
107
expect(result).to eq(victim)
108
victim.reset_session!
109
end
110
end
111
end
112
113