Files
metasploit-gs/spec/support/shared/examples/msf/db_manager/service.rb
T
2025-01-20 22:07:13 +00:00

69 lines
2.2 KiB
Ruby

RSpec.shared_examples_for 'Msf::DBManager::Service' do
unless ENV['REMOTE_DB']
it { is_expected.to respond_to :delete_service }
it { is_expected.to respond_to :each_service }
end
it { is_expected.to respond_to :find_or_create_service }
it { is_expected.to respond_to :services }
it { is_expected.to respond_to :report_service }
describe '#report_service', if: !ENV['REMOTE_DB'] do
let(:workspace) do
subject.default_workspace
end
let(:task) do
subject.report_task(workspace: workspace, user: 'test_user', info: 'info', path: 'mock/path')
end
context 'without a task' do
it 'creates a service' do
service = subject.report_service(
host: '192.0.2.1',
port: '5000',
name: 'test_service',
proto: 'tcp',
info: 'banner',
workspace: workspace
)
expect(subject.services({ workspace: workspace }).count).to eq 1
expect(service.name).to eq 'test_service'
expect(service.port).to eq 5000
expect(service.proto).to eq 'tcp'
expect(service.info).to eq 'banner'
expect(service.host.address.to_s).to eq '192.0.2.1'
expect(service.host.workspace).to eq workspace
expect(service.task_services).to be_empty
expect(task.task_services).to be_empty
end
end
context 'with a task and calling multiple times' do
it 'creates a service' do
service = 3.times.map do |count|
subject.report_service(
host: '192.0.2.1',
port: '5000',
name: 'test_service',
proto: 'tcp',
info: "banner #{count}",
workspace: workspace,
task: task
)
end.last
expect(subject.services({ workspace: workspace }).count).to eq 1
expect(service.name).to eq 'test_service'
expect(service.port).to eq 5000
expect(service.proto).to eq 'tcp'
expect(service.info).to eq 'banner 2'
expect(service.host.address.to_s).to eq '192.0.2.1'
expect(service.host.workspace).to eq workspace
expect(service.task_services.length).to eq 1
expect(task.task_services.length).to eq 1
end
end
end
end