mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-25 01:18:38 -05:00
212 lines
7.0 KiB
Python
212 lines
7.0 KiB
Python
|
import unittest
|
||
|
import mock
|
||
|
import superscanner
|
||
|
|
||
|
# ======================================================================
|
||
|
def print_hex(bytestring):
|
||
|
print('\\x' + '\\x'.join('{:02x}'.format(x) for x in bytestring))
|
||
|
|
||
|
# ======================================================================
|
||
|
def get_deviceset_info(deviceset_index):
|
||
|
return {
|
||
|
"channelcount": 4,
|
||
|
"channels": [
|
||
|
{
|
||
|
"deltaFrequency": 170000,
|
||
|
"direction": 0,
|
||
|
"id": "NFMDemod",
|
||
|
"index": 0,
|
||
|
"title": "NFM Demodulator",
|
||
|
"uid": 1590355926650308
|
||
|
},
|
||
|
{
|
||
|
"deltaFrequency": -155000,
|
||
|
"direction": 0,
|
||
|
"id": "DSDDemod",
|
||
|
"index": 1,
|
||
|
"title": "DSD Demodulator",
|
||
|
"uid": 1590355926718405
|
||
|
},
|
||
|
{
|
||
|
"deltaFrequency": 170000,
|
||
|
"direction": 0,
|
||
|
"id": "NFMDemod",
|
||
|
"index": 2,
|
||
|
"title": "NFM Demodulator",
|
||
|
"uid": 1590355926939766
|
||
|
},
|
||
|
{
|
||
|
"deltaFrequency": -95000,
|
||
|
"direction": 0,
|
||
|
"id": "NFMDemod",
|
||
|
"index": 3,
|
||
|
"title": "NFM Demodulator",
|
||
|
"uid": 1590355926945674
|
||
|
}
|
||
|
],
|
||
|
"samplingDevice": {
|
||
|
"bandwidth": 768000,
|
||
|
"centerFrequency": 145480000,
|
||
|
"deviceNbStreams": 1,
|
||
|
"deviceStreamIndex": 0,
|
||
|
"direction": 0,
|
||
|
"hwType": "AirspyHF",
|
||
|
"index": 0,
|
||
|
"sequence": 0,
|
||
|
"serial": "c852a98040c73f93",
|
||
|
"state": "running"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# ======================================================================
|
||
|
def set_channel_frequency(channel):
|
||
|
pass
|
||
|
|
||
|
# ======================================================================
|
||
|
def set_channel_mute(channel):
|
||
|
pass
|
||
|
|
||
|
# ======================================================================
|
||
|
class TestStringMethods(unittest.TestCase):
|
||
|
|
||
|
def test_upper(self):
|
||
|
self.assertEqual('foo'.upper(), 'FOO')
|
||
|
|
||
|
def test_isupper(self):
|
||
|
self.assertTrue('FOO'.isupper())
|
||
|
self.assertFalse('Foo'.isupper())
|
||
|
|
||
|
def test_split(self):
|
||
|
s = 'hello world'
|
||
|
self.assertEqual(s.split(), ['hello', 'world'])
|
||
|
# check that s.split fails when the separator is not a string
|
||
|
with self.assertRaises(TypeError):
|
||
|
s.split(2)
|
||
|
|
||
|
# ======================================================================
|
||
|
class TestSuperScannerOptions(unittest.TestCase):
|
||
|
|
||
|
def test_options_minimal(self):
|
||
|
options = superscanner.get_input_options(["-ctoto"])
|
||
|
self.assertEqual(options.config_file, 'toto')
|
||
|
|
||
|
# ======================================================================
|
||
|
class TestSuperScannerDecode(unittest.TestCase):
|
||
|
|
||
|
def test_decode_bytes(self):
|
||
|
msg_bytes = b'\x40\xd9\xab\x08\x00\x00\x00\x00' + \
|
||
|
b'\xff\x00\x00\x00\x00\x00\x00\x00' + \
|
||
|
b'\x69\x63\xbb\x55\x72\x01\x00\x00' + \
|
||
|
b'\x00\x04\x00\x00' + \
|
||
|
b'\x00\xb8\x0b\x00' + \
|
||
|
b'\x04\x00\x00\x00'
|
||
|
for i in range(1024):
|
||
|
msg_bytes += b'\x00\x00\x00\x00'
|
||
|
msg_struct = superscanner.decode_message(msg_bytes)
|
||
|
self.assertEqual(msg_struct['fft_size'], 1024)
|
||
|
|
||
|
# ======================================================================
|
||
|
class TestSuperScannerProcessHotspots(unittest.TestCase):
|
||
|
|
||
|
@mock.patch('superscanner.get_deviceset_info', side_effect=get_deviceset_info)
|
||
|
def setUp(self, urandom_function):
|
||
|
self.options = type('options', (object,), {})()
|
||
|
self.options.address = '127.0.0.1'
|
||
|
self.options.passes = 10
|
||
|
self.options.api_port = 8091
|
||
|
self.options.ws_port = 8887
|
||
|
self.options.config_file = 'toto'
|
||
|
self.options.psd_input_file = None
|
||
|
self.options.psd_output_file = None
|
||
|
self.options.passes = 10
|
||
|
self.options.margin = 3
|
||
|
self.options.psd_fixed = None
|
||
|
self.options.psd_exclude_higher = None
|
||
|
self.options.psd_exclude_lower = None
|
||
|
self.options.psd_graph = None
|
||
|
self.options.group_tolerance = 1
|
||
|
self.options.freq_round = 1
|
||
|
self.options.freq_offset = 0
|
||
|
superscanner.OPTIONS = self.options
|
||
|
superscanner.CONFIG = {
|
||
|
"deviceset_index": 0,
|
||
|
"freqrange_exclusions": [
|
||
|
[145290000, 145335000],
|
||
|
[145692500, 145707500]
|
||
|
],
|
||
|
"freqrange_inclusions": [
|
||
|
[145170000, 145800000]
|
||
|
],
|
||
|
"channel_info": [
|
||
|
{
|
||
|
"index": 0,
|
||
|
"fc_pos": "center"
|
||
|
},
|
||
|
{
|
||
|
"index": 2
|
||
|
},
|
||
|
{
|
||
|
"index": 3
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
superscanner.make_config()
|
||
|
|
||
|
def test_make_config(self):
|
||
|
self.assertEqual(superscanner.CONFIG['device_frequency'], 145480000)
|
||
|
|
||
|
@mock.patch('superscanner.set_channel_frequency', side_effect=set_channel_frequency)
|
||
|
@mock.patch('superscanner.set_channel_mute', side_effect=set_channel_mute)
|
||
|
def test_process_hotspot(self, set_channel_frequency, set_channel_mute):
|
||
|
hotspots1 = [
|
||
|
{
|
||
|
'begin': 145550000,
|
||
|
'end': 145550000,
|
||
|
'power': -50
|
||
|
}
|
||
|
]
|
||
|
superscanner.process_hotspots(hotspots1)
|
||
|
channel_info = superscanner.CONFIG['channel_info']
|
||
|
self.assertEqual(channel_info[0]['usage'], 1)
|
||
|
self.assertEqual(channel_info[1]['usage'], 0)
|
||
|
self.assertEqual(channel_info[2]['usage'], 0)
|
||
|
self.assertEqual(channel_info[0]['frequency'], 145550000)
|
||
|
hotspots2 = [
|
||
|
{
|
||
|
'begin': 145200000,
|
||
|
'end': 145200000,
|
||
|
'power': -35
|
||
|
},
|
||
|
{
|
||
|
'begin': 145550000,
|
||
|
'end': 145550000,
|
||
|
'power': -50
|
||
|
}
|
||
|
]
|
||
|
superscanner.process_hotspots(hotspots2)
|
||
|
channel_info = superscanner.CONFIG['channel_info']
|
||
|
self.assertEqual(channel_info[0]['usage'], 1)
|
||
|
self.assertEqual(channel_info[1]['usage'], 1)
|
||
|
self.assertEqual(channel_info[2]['usage'], 0)
|
||
|
self.assertEqual(channel_info[0]['frequency'], 145550000)
|
||
|
self.assertEqual(channel_info[1]['frequency'], 145200000)
|
||
|
hotspots3 = [
|
||
|
{
|
||
|
'begin': 145200000,
|
||
|
'end': 145200000,
|
||
|
'power': -35
|
||
|
}
|
||
|
]
|
||
|
superscanner.process_hotspots(hotspots3)
|
||
|
channel_info = superscanner.CONFIG['channel_info']
|
||
|
self.assertEqual(channel_info[0]['usage'], 0)
|
||
|
self.assertEqual(channel_info[1]['usage'], 1)
|
||
|
self.assertEqual(channel_info[2]['usage'], 0)
|
||
|
self.assertEqual(channel_info[1]['frequency'], 145200000)
|
||
|
|
||
|
|
||
|
# ======================================================================
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|
||
|
|