Skip to content

Commit

Permalink
Update Varp API, systests and unittests to support new command format…
Browse files Browse the repository at this point in the history
… in EOS 4.17.x
  • Loading branch information
mharista committed Jan 19, 2017
1 parent b5a3b6b commit 34ce20e
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 16 deletions.
13 changes: 8 additions & 5 deletions pyeapi/api/varp.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,13 @@ def set_mac_address(self, mac_address=None, default=False, disable=False):
aa:bb:cc:dd:ee:ff.
default (bool): Sets the virtual-router mac address to the system
default (which is to remove the configuration line).
disabel (bool): Negates the virtual-router mac address using
disable (bool): Negates the virtual-router mac address using
the system no configuration command
Returns:
True if the set operation succeeds otherwise False.
"""
base_command = 'ip virtual-router mac-address'
if not default and not disable:
if mac_address is not None:
# Check to see if mac_address matches expected format
Expand All @@ -131,10 +132,12 @@ def set_mac_address(self, mac_address=None, default=False, disable=False):
else:
raise ValueError('mac_address must be a properly formatted '
'address string')

commands = self.command_builder('ip virtual-router mac-address',
value=mac_address, default=default,
disable=disable)
if default or disable and not mac_address:
current_mac = self._parse_mac_address()
if current_mac['mac_address']:
base_command = base_command + ' ' + current_mac['mac_address']
commands = self.command_builder(base_command, value=mac_address,
default=default, disable=disable)
return self.configure(commands)


Expand Down
39 changes: 30 additions & 9 deletions test/system/test_api_varp.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,37 +37,54 @@

from systestlib import DutSystemTest

VIRT_NULL = 'no ip virtual-router mac-address'
VIRT_ENTRY_A = 'ip virtual-router mac-address 00:11:22:33:44:55'
VIRT_ENTRY_B = 'ip virtual-router mac-address 00:11:22:33:44:56'
VIRT_ENTRY_C = 'ip virtual-router mac-address 00:11:22:33:44:57'
IP_CMD = 'ip virtual-router address'


class TestApiVarp(DutSystemTest):

def _null_virtual_mac_command(self, dut):
# Default format of ip virtual-router mac-address changed in EOS 4.17.x
# pre 4.17.x - no ip virtual-router mac-address
# 4.17.x and on - ip virtual-router mac-address 00:00:00:00:00:00
mac_dict = dut.api('varp')._parse_mac_address()
virt_null_base = 'no ip virtual-router mac-address'
if mac_dict['mac_address']:
return virt_null_base + ' ' + mac_dict['mac_address']
return virt_null_base

def test_basic_get(self):
for dut in self.duts:
dut.config([VIRT_NULL])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null])
response = dut.api('varp').get()
self.assertIsNotNone(response)

def test_get_with_value(self):
for dut in self.duts:
dut.config([VIRT_NULL, VIRT_ENTRY_A])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null, VIRT_ENTRY_A])
response = dut.api('varp').get()
self.assertIsNotNone(response)
self.assertEqual(response['mac_address'], '00:11:22:33:44:55')

def test_get_none(self):
# None response is for code versions before 4.17.x due to default
# configuration change in 4.17.x. Default configuration difference
# shown above in _null_virtual_mac_command
for dut in self.duts:
dut.config([VIRT_NULL])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null])
response = dut.api('varp').get()
self.assertIsNotNone(response)
self.assertEqual(response['mac_address'], None)
self.assertIn(response['mac_address'], [None, '00:00:00:00:00:00'])

def test_set_mac_address_with_value(self):
for dut in self.duts:
dut.config([VIRT_NULL])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null])
api = dut.api('varp')
self.assertNotIn(VIRT_ENTRY_A, api.config)
result = dut.api('varp').set_mac_address('00:11:22:33:44:55')
Expand All @@ -76,7 +93,8 @@ def test_set_mac_address_with_value(self):

def test_change_mac_address(self):
for dut in self.duts:
dut.config([VIRT_NULL, VIRT_ENTRY_A])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null, VIRT_ENTRY_A])
api = dut.api('varp')
self.assertIn(VIRT_ENTRY_A, api.config)
result = dut.api('varp').set_mac_address('00:11:22:33:44:56')
Expand All @@ -85,7 +103,8 @@ def test_change_mac_address(self):

def test_remove_mac_address(self):
for dut in self.duts:
dut.config([VIRT_NULL, VIRT_ENTRY_A])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null, VIRT_ENTRY_A])
api = dut.api('varp')
self.assertIn(VIRT_ENTRY_A, api.config)
result = dut.api('varp').set_mac_address(disable=True)
Expand All @@ -94,13 +113,15 @@ def test_remove_mac_address(self):

def test_set_mac_address_with_bad_value(self):
for dut in self.duts:
dut.config([VIRT_NULL])
virt_null = self._null_virtual_mac_command(dut)
dut.config([virt_null])
api = dut.api('varp')
self.assertNotIn(VIRT_ENTRY_A, api.config)

with self.assertRaises(ValueError):
dut.api('varp').set_mac_address('0011.2233.4455')


class TestApiVarpInterfaces(DutSystemTest):

def test_set_virtual_addr_with_values_clean(self):
Expand Down
4 changes: 2 additions & 2 deletions test/unit/test_api_varp.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def test_set_mac_address_with_positional_value(self):

def test_set_mac_address_with_disable(self):
func = function('set_mac_address', disable=True)
cmds = 'no ip virtual-router mac-address'
cmds = 'no ip virtual-router mac-address 00:11:22:33:44:55'
self.eapi_positive_config_test(func, cmds)

def test_set_mac_address_with_no_value(self):
Expand All @@ -96,7 +96,7 @@ def test_set_mac_address_with_bad_value(self):

def test_set_mac_address_with_default(self):
func = function('set_mac_address', default=True)
cmds = 'default ip virtual-router mac-address'
cmds = 'default ip virtual-router mac-address 00:11:22:33:44:55'
self.eapi_positive_config_test(func, cmds)


Expand Down

0 comments on commit 34ce20e

Please sign in to comment.