From 5c538816cf76686bac1a86a7c06e24664d25a2dc Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Tue, 4 Aug 2020 17:36:35 -0700 Subject: [PATCH] ping parser fix for raspberry pi --- CHANGELOG | 3 +++ jc/cli.py | 2 +- jc/parsers/ping.py | 4 ++-- setup.py | 2 +- tests/fixtures/pi/ping-ip-O-D.json | 1 + tests/fixtures/pi/ping-ip-O-D.out | 10 ++++++++++ tests/fixtures/pi/ping-ip-O.json | 1 + tests/fixtures/pi/ping-ip-O.out | 10 ++++++++++ tests/test_ping.py | 26 ++++++++++++++++++++++++++ 9 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 tests/fixtures/pi/ping-ip-O-D.json create mode 100644 tests/fixtures/pi/ping-ip-O-D.out create mode 100644 tests/fixtures/pi/ping-ip-O.json create mode 100644 tests/fixtures/pi/ping-ip-O.out diff --git a/CHANGELOG b/CHANGELOG index e657f50b..cb025111 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ jc changelog +20200804 v1.13.3 +- Updae ping parser for Raspberry Pi compatibility + 20200803 v1.13.2 - Add key/value file parser (wrapper for ini parser) - Add date command parser diff --git a/jc/cli.py b/jc/cli.py index 5ae412cb..01bbbc0c 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -21,7 +21,7 @@ import jc.appdirs as appdirs class info(): - version = '1.13.2' + version = '1.13.3' description = 'JSON CLI output utility' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' diff --git a/jc/parsers/ping.py b/jc/parsers/ping.py index 11a02279..636b21de 100644 --- a/jc/parsers/ping.py +++ b/jc/parsers/ping.py @@ -108,7 +108,7 @@ import jc.utils class info(): - version = '1.0' + version = '1.1' description = 'ping command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -496,7 +496,7 @@ def parse(data, raw=False, quiet=False): if jc.utils.has_data(data): - if 'time' in data.splitlines()[-2]: + if 'time' in data.splitlines()[-2] or 'time' in data.splitlines()[-3]: raw_output = linux_parse(data) else: raw_output = bsd_parse(data) diff --git a/setup.py b/setup.py index 74c716de..69ca5d66 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open('README.md', 'r') as f: setuptools.setup( name='jc', - version='1.13.2', + version='1.13.3', author='Kelly Brazil', author_email='kellyjonbrazil@gmail.com', description='Converts the output of popular command-line tools and file-types to JSON.', diff --git a/tests/fixtures/pi/ping-ip-O-D.json b/tests/fixtures/pi/ping-ip-O-D.json new file mode 100644 index 00000000..eabde6ea --- /dev/null +++ b/tests/fixtures/pi/ping-ip-O-D.json @@ -0,0 +1 @@ +{"destination_ip": "192.168.120.164", "data_bytes": 56, "pattern": null, "destination": "192.168.120.164", "packets_transmitted": 5, "packets_received": 0, "packet_loss_percent": 100.0, "duplicates": 0, "time_ms": 4154.0, "responses": [{"type": "timeout", "timestamp": 1596585008.591169, "icmp_seq": 1}, {"type": "timeout", "timestamp": 1596585009.631169, "icmp_seq": 2}, {"type": "timeout", "timestamp": 1596585010.671173, "icmp_seq": 3}, {"type": "timeout", "timestamp": 1596585011.711167, "icmp_seq": 4}]} diff --git a/tests/fixtures/pi/ping-ip-O-D.out b/tests/fixtures/pi/ping-ip-O-D.out new file mode 100644 index 00000000..0ae05564 --- /dev/null +++ b/tests/fixtures/pi/ping-ip-O-D.out @@ -0,0 +1,10 @@ +PING 192.168.120.164 (192.168.120.164) 56(84) bytes of data. +[1596585008.591169] no answer yet for icmp_seq=1 +[1596585009.631169] no answer yet for icmp_seq=2 +[1596585010.671173] no answer yet for icmp_seq=3 +[1596585011.711167] no answer yet for icmp_seq=4 + +--- 192.168.120.164 ping statistics --- +5 packets transmitted, 0 received, 100% packet loss, time 4154ms + + diff --git a/tests/fixtures/pi/ping-ip-O.json b/tests/fixtures/pi/ping-ip-O.json new file mode 100644 index 00000000..14f7509b --- /dev/null +++ b/tests/fixtures/pi/ping-ip-O.json @@ -0,0 +1 @@ +{"destination_ip": "192.168.120.164", "data_bytes": 56, "pattern": null, "destination": "192.168.120.164", "packets_transmitted": 5, "packets_received": 0, "packet_loss_percent": 100.0, "duplicates": 0, "time_ms": 4149.0, "responses": [{"type": "timeout", "timestamp": null, "icmp_seq": 1}, {"type": "timeout", "timestamp": null, "icmp_seq": 2}, {"type": "timeout", "timestamp": null, "icmp_seq": 3}, {"type": "timeout", "timestamp": null, "icmp_seq": 4}]} diff --git a/tests/fixtures/pi/ping-ip-O.out b/tests/fixtures/pi/ping-ip-O.out new file mode 100644 index 00000000..f0c64cf3 --- /dev/null +++ b/tests/fixtures/pi/ping-ip-O.out @@ -0,0 +1,10 @@ +PING 192.168.120.164 (192.168.120.164) 56(84) bytes of data. +no answer yet for icmp_seq=1 +no answer yet for icmp_seq=2 +no answer yet for icmp_seq=3 +no answer yet for icmp_seq=4 + +--- 192.168.120.164 ping statistics --- +5 packets transmitted, 0 received, 100% packet loss, time 4149ms + + diff --git a/tests/test_ping.py b/tests/test_ping.py index 282dbdad..fa0508af 100644 --- a/tests/test_ping.py +++ b/tests/test_ping.py @@ -181,6 +181,13 @@ class MyTests(unittest.TestCase): with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/ping6-ip-dup.out'), 'r', encoding='utf-8') as f: self.osx_10_14_6_ping6_ip_dup = f.read() + # raspberry pi + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/pi/ping-ip-O.out'), 'r', encoding='utf-8') as f: + self.pi_ping_ip_O = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/pi/ping-ip-O-D.out'), 'r', encoding='utf-8') as f: + self.pi_ping_ip_O_D = f.read() + # output # centos @@ -353,6 +360,13 @@ class MyTests(unittest.TestCase): with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/osx-10.14.6/ping6-ip-dup.json'), 'r', encoding='utf-8') as f: self.osx_10_14_6_ping6_ip_dup_json = json.loads(f.read()) + # raspberry pi + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/pi/ping-ip-O.json'), 'r', encoding='utf-8') as f: + self.pi_ping_ip_O_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/pi/ping-ip-O-D.json'), 'r', encoding='utf-8') as f: + self.pi_ping_ip_O_D_json = json.loads(f.read()) + def test_ping_nodata(self): """ Test 'ping' with no data @@ -689,6 +703,18 @@ class MyTests(unittest.TestCase): """ self.assertEqual(jc.parsers.ping.parse(self.osx_10_14_6_ping6_ip_dup, quiet=True), self.osx_10_14_6_ping6_ip_dup_json) + def test_ping_ip_O_pi(self): + """ + Test 'ping6 -O' on raspberry pi + """ + self.assertEqual(jc.parsers.ping.parse(self.pi_ping_ip_O, quiet=True), self.pi_ping_ip_O_json) + + def test_ping_ip_O_D_pi(self): + """ + Test 'ping6 -O -D' on raspberry pi + """ + self.assertEqual(jc.parsers.ping.parse(self.pi_ping_ip_O_D, quiet=True), self.pi_ping_ip_O_D_json) + if __name__ == '__main__': unittest.main()