Skip to content

Commit

Permalink
Add node attributes from show version command
Browse files Browse the repository at this point in the history
  • Loading branch information
mharista committed Feb 8, 2017
1 parent f30808d commit 92d43e0
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 2 deletions.
43 changes: 43 additions & 0 deletions pyeapi/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,9 @@ def __init__(self, connection, **kwargs):
self._connection = connection
self._running_config = None
self._startup_config = None
self._version = None
self._version_number = None
self._model = None

self._enablepwd = kwargs.get('enablepwd')
self.autorefresh = kwargs.get('autorefresh', True)
Expand Down Expand Up @@ -485,6 +488,46 @@ def startup_config(self):
as_string=True)
return self._startup_config

@property
def version(self):
if self._version:
return self._version
self._get_version_properties()
return self._version

@property
def version_number(self):
if self._version_number:
return self._version_number
self._get_version_properties()
return self._version_number

@property
def model(self):
if self._model:
return self._model
self._get_version_properties()
return self._model

def _get_version_properties(self):
"""Parses version and model information out of 'show version' output
and uses the output to populate class properties.
"""
# Parse out version info
output = self.enable('show version')
self._version = str(output[0]['result']['version'])
match = re.match('[\d.\d]+', output[0]['result']['version'])
if match:
self._version_number = str(match.group(0))
else:
self._version_number = str(output[0]['result']['version'])
# Parse out model number
match = re.search('\d\d\d\d', output[0]['result']['modelName'])
if match:
self._model = str(match.group(0))
else:
self._model = str(output[0]['result']['modelName'])

def enable_authentication(self, password):
"""Configures the enable mode authentication password
Expand Down
7 changes: 7 additions & 0 deletions test/system/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ def setUp(self):
# enable password on the dut and clear it on tearDown
dut.config("enable secret %s" % dut._enablepwd)

def test_populate_version_properties(self):
for dut in self.duts:
result = dut.run_commands('show version')
self.assertEqual(dut.version, result[0]['version'])
self.assertIn(dut.model, result[0]['modelName'])
self.assertIn(dut.version_number, result[0]['version'])

def test_enable_single_command(self):
for dut in self.duts:
result = dut.run_commands('show version')
Expand Down
31 changes: 29 additions & 2 deletions test/unit/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,35 @@ def setUp(self):
self.connection = Mock()
self.node = pyeapi.client.Node(self.connection)

def test_get_version_properties_match_version_number_no_match_model(self):
self.node.enable = Mock()
version = '4.17.1.1F-3512479.41711F (engineering build)'
self.node.enable.return_value = [{'result': {'version': version,
'modelName': 'vEOS'}}]
self.node._get_version_properties()
self.assertEqual(self.node.version_number, '4.17.1.1')
self.assertEqual(self.node.model, 'vEOS')

def test_get_version_properties_no_match_version_number_match_model(self):
self.node.enable = Mock()
version = 'special-4.17.1.1F-3512479.41711F (engineering build)'
model = 'DCS-7260QX-64-F'
self.node.enable.return_value = [{'result': {'version': version,
'modelName': model}}]
self.node._get_version_properties()
self.assertEqual(self.node.version_number, version)
self.assertEqual(self.node.model, '7260')

def test_version_properties_populate(self):
self.node.enable = Mock()
version = '4.17.1.1F-3512479.41711F (engineering build)'
self.node.enable.return_value = [{'result': {'version': version,
'modelName': 'vEOS'}}]
self.node.version_number
self.assertEqual(self.node.version_number, '4.17.1.1')
self.assertEqual(self.node.version, version)
self.assertEqual(self.node.model, 'vEOS')

def test_enable_with_single_command(self):
command = random_string()
response = ['enable', command]
Expand All @@ -71,8 +100,6 @@ def test_no_enable_with_single_command(self):
self.connection.execute.assert_called_once_with(response, 'json')
self.assertEqual(command, result[0]['result'])



def test_enable_with_multiple_commands(self):
commands = list()
for i in range(0, random_int(2, 5)):
Expand Down

0 comments on commit 92d43e0

Please sign in to comment.