sdrangel/scriptsapi/test_superscanner.py

212 wiersze
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()