mirror of
https://github.com/smittix/intercept.git
synced 2026-07-06 00:28:12 -07:00
96172ca593
First-time run of ruff-format via pre-commit hook normalises quote style, trailing commas, and whitespace across 188 Python files. No logic changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
"""Tests for HackRF command builder."""
|
|
|
|
from utils.sdr.base import SDRDevice, SDRType
|
|
from utils.sdr.hackrf import HackRFCommandBuilder
|
|
|
|
|
|
def _make_device(serial: str = "abc123") -> SDRDevice:
|
|
return SDRDevice(
|
|
sdr_type=SDRType.HACKRF,
|
|
index=0,
|
|
name="HackRF One",
|
|
serial=serial,
|
|
driver="hackrf",
|
|
capabilities=HackRFCommandBuilder.CAPABILITIES,
|
|
)
|
|
|
|
|
|
class TestHackRFCapabilities:
|
|
def test_gain_max_reflects_combined_lna_vga(self):
|
|
"""gain_max should be LNA(40) + VGA(62) = 102."""
|
|
assert HackRFCommandBuilder.CAPABILITIES.gain_max == 102.0
|
|
|
|
def test_frequency_range(self):
|
|
caps = HackRFCommandBuilder.CAPABILITIES
|
|
assert caps.freq_min_mhz == 1.0
|
|
assert caps.freq_max_mhz == 6000.0
|
|
|
|
def test_tx_capable(self):
|
|
assert HackRFCommandBuilder.CAPABILITIES.tx_capable is True
|
|
|
|
|
|
class TestSplitGain:
|
|
def test_low_gain_all_to_lna(self):
|
|
builder = HackRFCommandBuilder()
|
|
lna, vga = builder._split_gain(30)
|
|
assert lna == 30
|
|
assert vga == 0
|
|
|
|
def test_gain_at_lna_max(self):
|
|
builder = HackRFCommandBuilder()
|
|
lna, vga = builder._split_gain(40)
|
|
assert lna == 40
|
|
assert vga == 0
|
|
|
|
def test_high_gain_splits_across_stages(self):
|
|
builder = HackRFCommandBuilder()
|
|
lna, vga = builder._split_gain(80)
|
|
assert lna == 40
|
|
assert vga == 40
|
|
|
|
def test_max_combined_gain(self):
|
|
builder = HackRFCommandBuilder()
|
|
lna, vga = builder._split_gain(102)
|
|
assert lna == 40
|
|
assert vga == 62
|
|
|
|
|
|
class TestBuildAdsbCommand:
|
|
def test_contains_soapysdr_device_type(self):
|
|
builder = HackRFCommandBuilder()
|
|
cmd = builder.build_adsb_command(_make_device(), gain=40)
|
|
assert "--device-type" in cmd
|
|
assert "soapysdr" in cmd
|
|
|
|
def test_includes_serial_in_device_string(self):
|
|
builder = HackRFCommandBuilder()
|
|
cmd = builder.build_adsb_command(_make_device(serial="deadbeef"), gain=40)
|
|
device_idx = cmd.index("--device")
|
|
assert "deadbeef" in cmd[device_idx + 1]
|
|
|
|
|
|
class TestBuildIQCaptureCommand:
|
|
def test_outputs_cu8_to_stdout(self):
|
|
builder = HackRFCommandBuilder()
|
|
cmd = builder.build_iq_capture_command(_make_device(), frequency_mhz=100.0, sample_rate=2048000, gain=40)
|
|
assert "-F" in cmd
|
|
assert "CU8" in cmd
|
|
assert cmd[-1] == "-"
|
|
|
|
def test_gain_split_in_command(self):
|
|
builder = HackRFCommandBuilder()
|
|
cmd = builder.build_iq_capture_command(_make_device(), frequency_mhz=100.0, gain=80)
|
|
gain_idx = cmd.index("-g")
|
|
assert cmd[gain_idx + 1] == "LNA=40,VGA=40"
|