mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -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()
 | 
						|
 |