1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-21 00:19:42 +02:00

iwconfig: add to parser list + move test fixture to generic folder

This commit is contained in:
Thomas Vincent
2022-12-21 17:12:20 -05:00
parent e996b3a9f6
commit bcd7bac950
6 changed files with 46 additions and 47 deletions

View File

@ -65,6 +65,7 @@ parsers: List[str] = [
'iptables',
'iso-datetime',
'iw-scan',
'iwconfig',
'jar-manifest',
'jobs',
'jwt',

View File

@ -18,6 +18,32 @@ Usage (module):
Schema:
[
{
"name": string,
"protocol": string,
"essid": string,
"mode": string,
"frequency": float,
"frequency_unit": string,
"access_point": string,
"bit_rate": float,
"bit_rate_unit": string,
"tx_power": integer,
"tx_power_unit": string,
"retry_short_limit": integer,
"rts_threshold": boolean,
"fragment_threshold": boolean,
"power_management": boolean,
"link_quality": string,
"signal_level": integer,
"signal_level_unit": string,
"rx_invalid_nwid": integer,
"rx_invalid_crypt": integer,
"rx_invalid_frag": integer,
"tx_excessive_retries": integer,
"invalid_misc": integer,
"missed_beacon": integer
}
]
@ -90,36 +116,7 @@ def parse(
jc.utils.input_type_check(data)
raw_output: List[Dict] = []
# for backwards compatibility, preset all fields to None
wireless_extension_obj: Dict = {
"name": None,
"protocol": None,
"essid": None,
"mode": None,
"frequency": None,
"frequency_unit": None,
"access_point": None,
"bit_rate": None,
"bit_rate_unit": None,
"tx_power": None,
"tx_power_unit": None,
"retry_short_limit": None,
"rts_threshold": None,
"fragment_threshold": None,
"power_management": None,
"link_quality": None,
"signal_level": None,
"signal_level_unit": None,
"rx_invalid_nwid": None,
"rx_invalid_crypt": None,
"rx_invalid_frag": None,
"tx_excessive_retries": None,
"invalid_misc": None,
"missed_beacon": None
}
interface_item: Dict = wireless_extension_obj.copy()
wireless_extension_obj: Dict = {}
re_interface = re.compile(r'^(?P<name>[a-zA-Z0-9:._-]+)\s+(?P<protocol>([a-zA-Z0-9]+\s)*[a-zA-Z0-9.]+)\s+ESSID:\"(?P<essid>[a-zA-Z0-9:._\s]+)\"')
re_mode = re.compile(r'Mode:(?P<mode>\w+)')
@ -147,21 +144,22 @@ def parse(
re_rx_invalid_frag, re_tx_excessive_retries, re_invalid_misc, re_missed_beacon
]
interface_item = None
if jc.utils.has_data(data):
for line in filter(None, data.splitlines()):
# Find new interface lines
interface_match = re.search(re_interface, line)
if interface_match:
if interface_item['name'] is not None:
if interface_item is not None:
raw_output.append(interface_item)
interface_item = wireless_extension_obj.copy()
interface_item = dict()
interface_item.update(interface_match.groupdict())
continue
# we do not have any interface yet continue to search for it --> next line
if interface_item['name'] is None:
# we do not have any interface yet continue to search for it --> next line
if interface_item is None:
continue
# Filling interface with whatever we can find
@ -170,7 +168,7 @@ def parse(
if match:
interface_item.update(match.groupdict())
if interface_item['name'] is not None:
if interface_item is not None:
raw_output.append(interface_item)
return raw_output if raw else _process(raw_output)

View File

@ -9,15 +9,15 @@ THIS_DIR = os.path.dirname(os.path.abspath(__file__))
class iwconfigTests(unittest.TestCase):
# input
with open(os.path.join(THIS_DIR, 'fixtures/ubuntu-20.10/iwconfig.out'), 'r', encoding='utf-8') as f:
ubuntu_20_10_iwconfig= f.read()
with open(os.path.join(THIS_DIR, 'fixtures/generic/iwconfig.out'), 'r', encoding='utf-8') as f:
iwconfig_output = f.read()
# output
with open(os.path.join(THIS_DIR, 'fixtures/ubuntu-20.10/iwconfig.json'), 'r', encoding='utf-8') as f:
ubuntu_20_10_iwconfig_json= json.loads(f.read())
with open(os.path.join(THIS_DIR, 'fixtures/generic/iwconfig.json'), 'r', encoding='utf-8') as f:
iwconfig_json = json.loads(f.read())
with open(os.path.join(THIS_DIR, 'fixtures/ubuntu-20.10/iwconfig-raw.json'), 'r', encoding='utf-8') as f:
ubuntu_20_10_iwconfig_raw_json= json.loads(f.read())
with open(os.path.join(THIS_DIR, 'fixtures/generic/iwconfig-raw.json'), 'r', encoding='utf-8') as f:
iwconfig_raw_json = json.loads(f.read())
def test_iwconfig_nodata(self):
@ -26,17 +26,17 @@ class iwconfigTests(unittest.TestCase):
"""
self.assertEqual(jc.parsers.iwconfig.parse('', quiet=True), [])
def test_iwconfig_ubuntu_20_04(self):
def test_iwconfig_raw(self):
"""
Test 'iwconfig' raw on Ubuntu 20.10
Test 'iwconfig' raw
"""
self.assertEqual(jc.parsers.iwconfig.parse(self.ubuntu_20_10_iwconfig, quiet=True, raw=True), self.ubuntu_20_10_iwconfig_raw_json)
self.assertEqual(jc.parsers.iwconfig.parse(self.iwconfig_output, quiet=True, raw=True), self.iwconfig_raw_json)
def test_iwconfig_ubuntu_20_04(self):
def test_iwconfig(self):
"""
Test 'iwconfig' on Ubuntu 20.10
Test 'iwconfig'
"""
self.assertEqual(jc.parsers.iwconfig.parse(self.ubuntu_20_10_iwconfig, quiet=True), self.ubuntu_20_10_iwconfig_json)
self.assertEqual(jc.parsers.iwconfig.parse(self.iwconfig_output, quiet=True), self.iwconfig_json)
if __name__ == '__main__':
unittest.main()