Skip to content

Commit 113b154

Browse files
authored
Merge pull request #3489 from kaitozaw/issue/3488-long-tests
Fixes issue/long-tests (#3488)
2 parents 53c9772 + fe89790 commit 113b154

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,20 @@ RUN adduser --home /beef --gecos beef --disabled-password beef \
7878
zlib1g \
7979
bison \
8080
nodejs \
81+
firefox-esr \
8182
&& apt-get -y clean \
8283
&& rm -rf /var/lib/apt/lists/*
8384

85+
# Install geckodriver for Selenium tests
86+
# Pin version and verify checksum to mitigate supply chain attacks
87+
ENV GECKODRIVER_VERSION=v0.36.0
88+
ENV GECKODRIVER_SHA256=0bde38707eb0a686a20c6bd50f4adcc7d60d4f73c60eb83ee9e0db8f65823e04
89+
RUN wget -q "https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz" \
90+
&& echo "${GECKODRIVER_SHA256} geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz" | sha256sum -c - \
91+
&& tar -xzf "geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz" -C /usr/local/bin \
92+
&& chmod +x /usr/local/bin/geckodriver \
93+
&& rm "geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz"
94+
8495
# Use gemset created by the builder above
8596
COPY --chown=beef:beef . /beef
8697
COPY --from=builder /usr/local/bundle /usr/local/bundle

spec/spec_helper.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,7 @@ def start_beef_server
229229
@host = '127.0.0.1'
230230

231231
unless port_available?
232-
print_error "Port #{@port} is already in use. Exiting."
233-
exit
232+
raise "Port #{@port} is already in use. Cannot start BeEF server."
234233
end
235234
load_beef_extensions_and_modules
236235

@@ -317,11 +316,9 @@ def start_beef_server_and_wait
317316
end
318317

319318
def stop_beef_server(pid)
320-
exit if pid.nil?
321-
# Shutting down server
319+
return if pid.nil?
322320
Process.kill("KILL", pid) unless pid.nil?
323321
Process.wait(pid) unless pid.nil? # Ensure the process has exited and the port is released
324-
pid = nil
325322
end
326323

327324
end

spec/support/ui_support.rb

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,36 @@
1010
def start_beef_and_hook_browser()
1111
reset_beef_db
1212
pid = start_beef_server_and_wait
13-
beef_session = BeefTest.login
14-
hooked_browser = BeefTest.new_victim
1513

16-
expect(hooked_browser).not_to be_nil
17-
expect(hooked_browser).to be_a(Capybara::Session)
18-
expect(hooked_browser).to have_content('BeEF', wait: PAGE_LOAD_TIMEOUT)
14+
begin
15+
beef_session = BeefTest.login
16+
hooked_browser = BeefTest.new_victim
1917

20-
expect(beef_session).not_to be_nil
21-
expect(beef_session).to be_a(Capybara::Session)
22-
expect(beef_session).to have_content('Hooked Browsers', wait: PAGE_LOAD_TIMEOUT)
18+
expect(hooked_browser).not_to be_nil
19+
expect(hooked_browser).to be_a(Capybara::Session)
20+
expect(hooked_browser).to have_content('BeEF', wait: PAGE_LOAD_TIMEOUT)
2321

24-
navigate_to_hooked_browser(beef_session)
22+
expect(beef_session).not_to be_nil
23+
expect(beef_session).to be_a(Capybara::Session)
24+
expect(beef_session).to have_content('Hooked Browsers', wait: PAGE_LOAD_TIMEOUT)
2525

26-
expect(beef_session).to have_content('Commands', wait: PAGE_LOAD_TIMEOUT)
27-
beef_session.click_on('Commands')
26+
navigate_to_hooked_browser(beef_session)
2827

29-
return pid, beef_session, hooked_browser
28+
expect(beef_session).to have_content('Commands', wait: PAGE_LOAD_TIMEOUT)
29+
beef_session.click_on('Commands')
30+
31+
return pid, beef_session, hooked_browser
32+
rescue => e
33+
# If setup fails, cleanup the server before re-raising
34+
stop_beef_server(pid)
35+
raise e
36+
end
3037
end
3138

3239
def stop_beef_and_unhook_browser(pid, beef_session, hooked_browser)
3340
stop_beef_server(pid)
34-
beef_session.driver.browser.close
35-
hooked_browser.driver.browser.close
41+
beef_session.driver.browser.close if beef_session
42+
hooked_browser.driver.browser.close if hooked_browser
3643
end
3744

3845
def navigate_to_hooked_browser(session, hooked_browser_text = nil)

0 commit comments

Comments
 (0)