Skip to content

Commit 6b72dab

Browse files
committed
[openvpn] Avoid failing if data is empty
1 parent 84e97c5 commit 6b72dab

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

netdiff/parsers/openvpn.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import networkx
22
from openvpn_status import parse_status
3+
from openvpn_status.parser import ParsingError
34

45
from .base import BaseParser
56

@@ -13,7 +14,10 @@ class OpenvpnParser(BaseParser):
1314
_server_common_name = 'openvpn-server'
1415

1516
def to_python(self, data):
16-
return parse_status(data)
17+
try:
18+
return parse_status(data)
19+
except (AttributeError, ParsingError):
20+
return None
1721

1822
def parse(self, data):
1923
"""
@@ -25,8 +29,15 @@ def parse(self, data):
2529
server = self._server_common_name
2630
# add server (central node) to graph
2731
graph.add_node(server)
32+
# data may be empty
33+
if data is None:
34+
clients = []
35+
links = []
36+
else:
37+
clients = data.client_list.values()
38+
links = data.routing_table.values()
2839
# add clients in graph as nodes
29-
for client in data.client_list.values():
40+
for client in clients:
3041
client_properties = {
3142
'label': client.common_name,
3243
'real_address': str(client.real_address.host),
@@ -44,6 +55,6 @@ def parse(self, data):
4455
client_properties['local_addresses'] = local_addresses
4556
graph.add_node(str(client.real_address.host), **client_properties)
4657
# add links in routing table to graph
47-
for link in data.routing_table.values():
58+
for link in links:
4859
graph.add_edge(server, str(link.real_address.host), weight=1)
4960
return graph

tests/test_openvpn.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ def test_json_dict_tap(self):
6262
self.assertIn('nodeC', labels)
6363
self.assertIn('nodeD', labels)
6464
self.assertIn('nodeE', labels)
65+
66+
def test_empty_string(self):
67+
OpenvpnParser(data='{}')
68+
69+
def test_empty_dict(self):
70+
OpenvpnParser({})
71+

0 commit comments

Comments
 (0)