From bcd7bac95058e328c455cbd1b50f197c42a0f4d5 Mon Sep 17 00:00:00 2001 From: Thomas Vincent Date: Wed, 21 Dec 2022 17:12:20 -0500 Subject: [PATCH] iwconfig: add to parser list + move test fixture to generic folder --- jc/lib.py | 1 + jc/parsers/iwconfig.py | 68 +++++++++---------- .../iwconfig-raw.json | 0 .../{ubuntu-20.10 => generic}/iwconfig.json | 0 .../{ubuntu-20.10 => generic}/iwconfig.out | 0 tests/test_iwconfig.py | 24 +++---- 6 files changed, 46 insertions(+), 47 deletions(-) rename tests/fixtures/{ubuntu-20.10 => generic}/iwconfig-raw.json (100%) rename tests/fixtures/{ubuntu-20.10 => generic}/iwconfig.json (100%) rename tests/fixtures/{ubuntu-20.10 => generic}/iwconfig.out (100%) diff --git a/jc/lib.py b/jc/lib.py index ab0a544c..ca02f5e1 100644 --- a/jc/lib.py +++ b/jc/lib.py @@ -65,6 +65,7 @@ parsers: List[str] = [ 'iptables', 'iso-datetime', 'iw-scan', + 'iwconfig', 'jar-manifest', 'jobs', 'jwt', diff --git a/jc/parsers/iwconfig.py b/jc/parsers/iwconfig.py index 09417781..8d7d2f01 100644 --- a/jc/parsers/iwconfig.py +++ b/jc/parsers/iwconfig.py @@ -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[a-zA-Z0-9:._-]+)\s+(?P([a-zA-Z0-9]+\s)*[a-zA-Z0-9.]+)\s+ESSID:\"(?P[a-zA-Z0-9:._\s]+)\"') re_mode = re.compile(r'Mode:(?P\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) diff --git a/tests/fixtures/ubuntu-20.10/iwconfig-raw.json b/tests/fixtures/generic/iwconfig-raw.json similarity index 100% rename from tests/fixtures/ubuntu-20.10/iwconfig-raw.json rename to tests/fixtures/generic/iwconfig-raw.json diff --git a/tests/fixtures/ubuntu-20.10/iwconfig.json b/tests/fixtures/generic/iwconfig.json similarity index 100% rename from tests/fixtures/ubuntu-20.10/iwconfig.json rename to tests/fixtures/generic/iwconfig.json diff --git a/tests/fixtures/ubuntu-20.10/iwconfig.out b/tests/fixtures/generic/iwconfig.out similarity index 100% rename from tests/fixtures/ubuntu-20.10/iwconfig.out rename to tests/fixtures/generic/iwconfig.out diff --git a/tests/test_iwconfig.py b/tests/test_iwconfig.py index 050b9b52..062d595c 100644 --- a/tests/test_iwconfig.py +++ b/tests/test_iwconfig.py @@ -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()