mirror of
https://github.com/jopohl/urh.git
synced 2026-03-03 06:54:00 +01:00
187 lines
6.6 KiB
Python
187 lines
6.6 KiB
Python
import array
|
|
import copy
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
|
|
from PyQt6.QtGui import QIcon
|
|
from tests.QtTestCase import QtTestCase
|
|
from tests.utils_testing import get_path_for_data_file
|
|
from urh import settings
|
|
from urh.dev.PCAP import PCAP
|
|
import urh.dev.PCAPNG as PCAPNG
|
|
from urh.signalprocessing.ProtocolAnalyzer import ProtocolAnalyzer
|
|
from urh.signalprocessing.Signal import Signal
|
|
from urh.util import util
|
|
from urh.util.Logger import logger
|
|
from urh.cythonext import util as c_util
|
|
|
|
|
|
class TestUtil(QtTestCase):
|
|
def test_set_icon_theme(self):
|
|
settings.write("icon_theme_index", 0)
|
|
util.set_icon_theme()
|
|
|
|
self.assertEqual(QIcon.themeName(), "oxy")
|
|
|
|
settings.write("icon_theme_index", 1)
|
|
util.set_icon_theme()
|
|
|
|
if sys.platform == "linux":
|
|
self.assertNotEqual(QIcon.themeName(), "oxy")
|
|
else:
|
|
self.assertEqual(QIcon.themeName(), "oxy")
|
|
|
|
def test_set_shared_lib_path(self):
|
|
before = os.environ["PATH"]
|
|
util.set_shared_library_path()
|
|
|
|
def test_create_textbox_dialog(self):
|
|
dialog = util.create_textbox_dialog(
|
|
"Test content", "Test title", parent=self.form
|
|
)
|
|
self.assertEqual(dialog.windowTitle(), "Test title")
|
|
self.assertEqual(
|
|
dialog.layout().itemAt(0).widget().toPlainText(), "Test content"
|
|
)
|
|
dialog.close()
|
|
|
|
def test_get_receive_buffer_size(self):
|
|
settings.OVERWRITE_RECEIVE_BUFFER_SIZE = None
|
|
ns = settings.get_receive_buffer_size(
|
|
resume_on_full_receive_buffer=True, spectrum_mode=True
|
|
)
|
|
self.assertEqual(ns, settings.SPECTRUM_BUFFER_SIZE)
|
|
|
|
ns = settings.get_receive_buffer_size(
|
|
resume_on_full_receive_buffer=True, spectrum_mode=False
|
|
)
|
|
self.assertEqual(ns, settings.SNIFF_BUFFER_SIZE)
|
|
|
|
ns1 = settings.get_receive_buffer_size(
|
|
resume_on_full_receive_buffer=False, spectrum_mode=True
|
|
)
|
|
ns2 = settings.get_receive_buffer_size(
|
|
resume_on_full_receive_buffer=False, spectrum_mode=False
|
|
)
|
|
self.assertEqual(len(str(ns1)), len(str(ns2)))
|
|
|
|
def test_write_pcap(self):
|
|
signal = Signal(get_path_for_data_file("ask.complex"), "ASK-Test")
|
|
signal.modulation_type = "ASK"
|
|
signal.samples_per_symbol = 295
|
|
signal.center = -0.1667
|
|
self.assertEqual(signal.num_samples, 13710)
|
|
|
|
proto_analyzer = ProtocolAnalyzer(signal)
|
|
proto_analyzer.get_protocol_from_signal()
|
|
self.assertEqual(proto_analyzer.decoded_hex_str[0], "b25b6db6c80")
|
|
|
|
proto_analyzer.messages.append(copy.deepcopy(proto_analyzer.messages[0]))
|
|
proto_analyzer.messages.append(copy.deepcopy(proto_analyzer.messages[0]))
|
|
proto_analyzer.messages.append(copy.deepcopy(proto_analyzer.messages[0]))
|
|
|
|
pcap = PCAP()
|
|
pcap.write_packets(
|
|
proto_analyzer.messages,
|
|
os.path.join(tempfile.gettempdir(), "test.pcap"),
|
|
1e6,
|
|
)
|
|
|
|
def test_write_pcapng(self):
|
|
signal = Signal(get_path_for_data_file("ask.complex"), "ASK-Test")
|
|
signal.modulation_type = "ASK"
|
|
signal.samples_per_symbol = 295
|
|
signal.center = -0.1667
|
|
self.assertEqual(signal.num_samples, 13710)
|
|
|
|
proto_analyzer = ProtocolAnalyzer(signal)
|
|
proto_analyzer.get_protocol_from_signal()
|
|
self.assertEqual(proto_analyzer.decoded_hex_str[0], "b25b6db6c80")
|
|
|
|
proto_analyzer.messages.append(copy.deepcopy(proto_analyzer.messages[0]))
|
|
proto_analyzer.messages.append(copy.deepcopy(proto_analyzer.messages[0]))
|
|
proto_analyzer.messages.append(copy.deepcopy(proto_analyzer.messages[0]))
|
|
|
|
filepath = os.path.join(tempfile.gettempdir(), "test.pcapng")
|
|
PCAPNG.create_pcapng_file(
|
|
filepath, "Universal Radio Hacker Test", "TestHW", 147
|
|
)
|
|
PCAPNG.append_packets_to_pcapng(
|
|
filename=filepath,
|
|
packets=(msg.decoded_ascii_buffer for msg in proto_analyzer.messages),
|
|
timestamps=(msg.timestamp for msg in proto_analyzer.messages),
|
|
)
|
|
|
|
# As we don't have PCAPNG importers, we'll verify output just by checking file size, PCAPNG SHB type number
|
|
# and that all msg bytes were written somewhere inside output file
|
|
filechecks = False
|
|
if os.path.isfile(filepath): # ok, file exist
|
|
with open(filepath, "rb") as f:
|
|
filecontents = f.read()
|
|
# min file len= SHB + IDB + 4 EPB msgs
|
|
minfilelen = (
|
|
28
|
|
+ 20
|
|
+ (4 * (32 + len(proto_analyzer.messages[0].decoded_ascii_buffer)))
|
|
)
|
|
if len(filecontents) >= minfilelen: # ok, min file length passed
|
|
if (
|
|
filecontents.find(b"\x0A\x0D\x0D\x0A") >= 0
|
|
): # ok, seems that SHB was written
|
|
if (
|
|
filecontents.find(
|
|
proto_analyzer.messages[0].decoded_ascii_buffer
|
|
)
|
|
>= 0
|
|
): # ok, msg bytes written
|
|
filechecks = True
|
|
|
|
self.assertTrue(filechecks)
|
|
|
|
def test_de_bruijn_fuzzing(self):
|
|
self.assertEqual(
|
|
c_util.de_bruijn(3), array.array("B", [0, 0, 0, 1, 0, 1, 1, 1])
|
|
)
|
|
self.assertEqual(
|
|
c_util.de_bruijn(4),
|
|
array.array("B", [0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]),
|
|
)
|
|
|
|
def test_native_backends_installed(self):
|
|
from urh.util import util
|
|
|
|
if not util.get_shared_library_path():
|
|
logger.info(
|
|
"Shared library dir not found, skipping check of native device extensions"
|
|
)
|
|
return
|
|
|
|
util.set_shared_library_path()
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import airspy
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import bladerf
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import hackrf
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import rtlsdr
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import limesdr
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import plutosdr
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import usrp
|
|
|
|
if sys.platform != "darwin":
|
|
# noinspection PyUnresolvedReferences
|
|
from urh.dev.native.lib import sdrplay
|
|
self.assertTrue(True)
|