2.5 Plugin Environment support and Testcases for dellos6 modules (#34890)

* Dellos6_2.5_support

* cleanup

* Fix pep8

* fix waitfor

* fix_facts

* fix_assert
This commit is contained in:
abirami-n 2018-01-22 18:04:21 +05:30 committed by John R Barker
commit 775118aae2
24 changed files with 1017 additions and 147 deletions

View file

@ -0,0 +1,88 @@
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import json
from units.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase
fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures')
fixture_data = {}
def load_fixture(name):
path = os.path.join(fixture_path, name)
if path in fixture_data:
return fixture_data[path]
with open(path) as f:
data = f.read()
try:
data = json.loads(data)
except:
pass
fixture_data[path] = data
return data
class TestDellos6Module(ModuleTestCase):
def execute_module(self, failed=False, changed=False, commands=None, sort=True, defaults=False):
self.load_fixtures(commands)
if failed:
result = self.failed()
self.assertTrue(result['failed'], result)
else:
result = self.changed(changed)
self.assertEqual(result['changed'], changed, result)
if commands is not None:
if sort:
self.assertEqual(sorted(commands), sorted(result['updates']), result['updates'])
else:
self.assertEqual(commands, result['updates'], result['updates'])
return result
def failed(self):
with self.assertRaises(AnsibleFailJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertTrue(result['failed'], result)
return result
def changed(self, changed=False):
with self.assertRaises(AnsibleExitJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertEqual(result['changed'], changed, result)
return result
def load_fixtures(self, commands=None):
pass

View file

@ -0,0 +1,16 @@
!
hostname router
exit
!
interface Te1/0/1
description "test_string"
exit
!
interface Te1/0/2
no shutdown
exit
!
interface Te1/0/9
switchport access vlan 2
exit

View file

@ -0,0 +1,7 @@
!
hostname foo
exit
!
interface Te1/0/2
shutdown
exit

View file

@ -0,0 +1,41 @@
Interface Name................................. Te1/0/1
SOC Hardware Info.............................. BCM56842_A1
Link Status.................................... Up /None
Keepalive Enabled.............................. FALSE
Err-disable Cause.............................. None
VLAN Membership Mode........................... Trunk Mode
VLAN Membership................................ (1),2-4096
MTU Size....................................... 1518
Port Mode [Duplex]............................. Full
Port Speed..................................... 1000
Link Debounce Flaps............................ 0
Auto-Negotation Status......................... Auto
Burned MAC Address............................. F8B1.565B.615E
L3 MAC Address................................. F8B1.565B.615F
Sample Load Interval........................... 300
Received Input Rate Bits/Sec................... 0
Received Input Rate Packets/Sec................ 0
Transmitted Input Rate Bits/Sec................ 440
Transmitted Input Rate Packets/Sec : .......... 0
Total Packets Received Without Errors.......... 0
Unicast Packets Received....................... 0
Multicast Packets Received..................... 0
Broadcast Packets Received..................... 0
Total Packets Received with MAC Errors......... 0
Jabbers Received............................... 0
Fragments/Undersize Received................... 0
Alignment Errors............................... 0
FCS Errors..................................... 0
Overruns....................................... 0
Total Received Packets Not Forwarded........... 0
Total Packets Transmitted Successfully......... 381302
Unicast Packets Transmitted.................... 1
Multicast Packets Transmitted.................. 351645
Broadcast Packets Transmitted.................. 29656
Transmit Packets Discarded..................... 0
Total Transmit Errors.......................... 0
Total Transmit Packets Discarded............... 0
Single Collision Frames........................ 0
Multiple Collision Frames...................... 0
Excessive Collision Frames..................... 0

View file

@ -0,0 +1,48 @@
Port Description Duplex Speed Neg Link Flow M VLAN
State Ctrl
--------- --------------- ------ ------- ---- ------ ----- -- -------------------
Te1/0/1 connected to sp Full 1000 Auto Up Off T (1),2-4096
Te1/0/2 to_NIC_1 Full 1000 Auto Up Off A 99
Te1/0/3 N/A Unknown Auto Down Off A 1
Te1/0/4 N/A Unknown Auto Down Off A 1
Te1/0/5 N/A Unknown Auto Down Off A 1
Te1/0/6 N/A Unknown Auto Down Off A 1
Te1/0/7 N/A Unknown Auto Down Off A 1
Te1/0/8 N/A Unknown Auto Down Off A 1
Te1/0/9 N/A Unknown Auto Down Off A 2
Te1/0/10 N/A Unknown Auto Down Off A 1
Te1/0/11 N/A Unknown Auto Down Off A 1
Te1/0/12 N/A Unknown Auto Down Off A 1
Te1/0/13 N/A Unknown Auto Down Off A 1
Te1/0/14 N/A Unknown Auto Down Off A 1
Te1/0/15 N/A Unknown Auto Down Off A 1
Te1/0/16 N/A Unknown Auto Down Off A 1
Te1/0/17 N/A Unknown Auto Down Off A 1
Te1/0/18 N/A Unknown Auto Down Off A 1
Te1/0/19 N/A Unknown Auto Down Off A 1
Te1/0/20 N/A Unknown Auto Down Off A 1
Te1/0/21 N/A Unknown Auto Down Off A 1
Te1/0/22 N/A Unknown Auto Down Off A 100
Te1/0/23 N/A Unknown Auto Down Off A 1
Te1/0/24 N/A Unknown Auto Down Off A 1
Fo1/1/1 N/A N/A N/A Detach N/A
Fo1/1/2 Full 40000 Off Down Off A 1
Te1/1/1 N/A N/A N/A Detach N/A
Te1/1/2 N/A N/A N/A Detach N/A
Te1/1/3 N/A N/A N/A Detach N/A
Te1/1/4 N/A N/A N/A Detach N/A
Te1/1/5 N/A N/A N/A Detach N/A
Te1/1/6 N/A N/A N/A Detach N/A
Te1/1/7 N/A N/A N/A Detach N/A
Te1/1/8 N/A N/A N/A Detach N/A
Oob Type Link
State
--- ------------------------------ -----
oob Out-Of-Band Up
Port Description Link M VLAN
Channel State
------- ------------------------------ ------- -- -------------------

View file

@ -0,0 +1,6 @@
Yes: Dell Qualified No: Not Qualified
N/A : Not Applicable
Port Type Media Serial Number Dell Qualified
--------- ------- --------------------- --------------------- --------------

View file

@ -0,0 +1,15 @@
Default Gateway................................ 0.0.0.0
L3 MAC Address................................. F8B1.565B.615F
Routing Interfaces:
Interface State IP Address IP Mask Method
---------- ----- --------------- --------------- -------
Vl1 Down 0.0.0.0 0.0.0.0 None
Vl2 Up 0.0.0.0 0.0.0.0 DHCP
Vl99 Up 10.99.1.2 255.255.0.0 Manual
Vl100 Up 3.3.3.3 255.255.255.0 Manual
Vl999 Up 10.250.1.2 255.255.255.0 Manual
Vl1010 Up 10.1.1.1 255.255.255.0 Manual
Vl1681 Up 192.168.100.1 255.255.255.0 Manual

View file

@ -0,0 +1,11 @@
LLDP Global Configuration
Transmit Interval............................ 30 seconds
Transmit Hold Multiplier..................... 4
Reinit Delay................................. 2 seconds
Notification Interval........................ 5 seconds

View file

@ -0,0 +1,9 @@
LLDP Remote Device Summary
Local
Interface RemID Chassis ID Port ID System Name
--------- ------- ------------------- ----------------- -----------------
Te1/0/5 14 F8:B1:56:70:49:38 Gi1/0/5 MAA-N2048-6884

View file

@ -0,0 +1,3 @@
Total Memory................................... 1723232 KBytes
Available Memory Space......................... 638144 KBytes

View file

@ -0,0 +1,124 @@
!Current Configuration:
!System Description "Dell Networking N4064F, 6.3.3.10, Linux 3.7.10-e54850e7"
!System Software Version 6.3.3.10
!Cut-through mode is configured as disabled
!
configure
hostname "os6"
slot 1/0 5 ! Dell Networking N4064F
slot 1/1 8 ! Dell 10GBase-T Card
stack
member 1 4 ! N4064F
exit
interface out-of-band
ip address 10.16.148.73 255.255.0.0 10.16.144.254
exit
no logging console
interface vlan 1
ip address dhcp
exit
no passwords min-length
username "admin" password 21232f297a57a5a743894a0e4a801fc3 privilege 1 encrypted
line telnet
exec-timeout 0
exit
ip ssh server
application install SupportAssist auto-restart start-on-boot
!
interface Te1/0/1
no switchport port-security violation protect
exit
!
interface Te1/0/2
no switchport port-security violation protect
exit
!
interface Te1/0/3
no switchport port-security violation protect
exit
!
interface Te1/0/4
no switchport port-security violation protect
exit
!
interface Te1/0/5
no switchport port-security violation protect
exit
!
interface Te1/0/6
no switchport port-security violation protect
exit
!
interface Te1/0/7
no switchport port-security violation protect
exit
!
interface Te1/0/8
no switchport port-security violation protect
exit
!
interface Te1/0/9
no switchport port-security violation protect
exit
!
interface Te1/0/10
no switchport port-security violation protect
exit
!
interface Te1/0/11
no switchport port-security violation protect
exit
!
interface port-channel 1
no switchport port-security violation protect
exit
!
interface port-channel 2
no switchport port-security violation protect
exit
!
interface port-channel 3
no switchport port-security violation protect
exit
!
interface port-channel 4
no switchport port-security violation protect
exit
!
interface port-channel 5
no switchport port-security violation protect
exit
!
snmp-server enable traps dvmrp
snmp-server enable traps pim
no snmp-server enable traps vrrp
no snmp-server enable traps acl
snmp-server enable traps captive-portal
snmp-server enable traps captive-portal client-auth-failure
snmp-server enable traps captive-portal client-connect
snmp-server enable traps captive-portal client-db-full
snmp-server enable traps captive-portal client-disconnect
router bgp 11
bgp router-id 1.1.1.1
maximum-paths 2
maximum-paths ibgp 2
network 101.1.2.0 mask 255.255.255.0
template peer MUX_HNV_ACCESS
remote-as 64918
exit
neighbor 10.10.234.16 remote-as 64818
neighbor 10.10.234.16 default-originate
neighbor 10.10.234.16 timers 2 5
neighbor 2001:4898:5808:ffa2::1 remote-as 64818
neighbor 2001:4898:5808:ffa2::1 default-originate
neighbor 2001:4898:5808:ffa2::1 timers 2 4
address-family ipv6
network 2001:4898:5808:ffa0::/126
redistribute connected
exit
exit
enable password c4f25f005187e9a85ad6480d3507a541 encrypted
openflow
exit
eula-consent support-assist reject
exit

View file

@ -0,0 +1,3 @@
hostname "dellos6_sw1"

View file

@ -0,0 +1,17 @@
Machine Description............... Dell Networking Switch
System Model ID................... N4032
Machine Type...................... Dell Networking N4032
Serial Number..................... CN04G4FP282984AI0097A01
Manufacturer...................... 0xbc00
Burned In MAC Address............. F8B1.565B.615C
System Object ID.................. 1.3.6.1.4.1.674.10895.3042
CPU Version....................... XLP308H-B2
SOC Version....................... BCM56842_A1
HW Version........................ 3
CPLD Version...................... 17
unit active backup current-active next-active
---- ----------- ----------- -------------- --------------
1 6.3.3.7 6.3.2.7 6.3.3.7 6.3.3.7

View file

@ -0,0 +1,108 @@
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import json
from ansible.compat.tests.mock import patch
from ansible.modules.network.dellos6 import dellos6_command
from units.modules.utils import set_module_args
from .dellos6_module import TestDellos6Module, load_fixture
class TestDellos6CommandModule(TestDellos6Module):
module = dellos6_command
def setUp(self):
super(TestDellos6CommandModule, self).setUp()
self.mock_run_commands = patch('ansible.modules.network.dellos6.dellos6_command.run_commands')
self.run_commands = self.mock_run_commands.start()
def tearDown(self):
super(TestDellos6CommandModule, self).tearDown()
self.mock_run_commands.stop()
def load_fixtures(self, commands=None):
def load_from_file(*args, **kwargs):
module, commands = args
output = list()
for item in commands:
try:
obj = json.loads(item['command'])
command = obj['command']
except ValueError:
command = item['command']
filename = str(command).replace(' ', '_')
output.append(load_fixture(filename))
return output
self.run_commands.side_effect = load_from_file
def test_dellos6_command_simple(self):
set_module_args(dict(commands=['show version']))
result = self.execute_module()
self.assertEqual(len(result['stdout']), 1)
self.assertTrue(result['stdout'][0].startswith('Machine Description'))
def test_dellos6_command_multiple(self):
set_module_args(dict(commands=['show version', 'show version']))
result = self.execute_module()
self.assertEqual(len(result['stdout']), 2)
self.assertTrue(result['stdout'][0].startswith('Machine Description'))
def test_dellos6_command_wait_for(self):
wait_for = 'result[0] contains "Machine Description"'
set_module_args(dict(commands=['show version'], wait_for=wait_for))
self.execute_module()
def test_dellos6_command_wait_for_fails(self):
wait_for = 'result[0] contains "test string"'
set_module_args(dict(commands=['show version'], wait_for=wait_for))
self.execute_module(failed=True)
self.assertEqual(self.run_commands.call_count, 10)
def test_dellos6_command_retries(self):
wait_for = 'result[0] contains "test string"'
set_module_args(dict(commands=['show version'], wait_for=wait_for, retries=2))
self.execute_module(failed=True)
self.assertEqual(self.run_commands.call_count, 2)
def test_dellos6_command_match_any(self):
wait_for = ['result[0] contains "Machine Description"',
'result[0] contains "test string"']
set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any'))
self.execute_module()
def test_dellos6_command_match_all(self):
wait_for = ['result[0] contains "Machine Description"',
'result[0] contains "Dell Networking"']
set_module_args(dict(commands=['show version'], wait_for=wait_for, match='all'))
self.execute_module()
def test_dellos6_command_match_all_failure(self):
wait_for = ['result[0] contains "Machine Description"',
'result[0] contains "test string"']
commands = ['show version', 'show version']
set_module_args(dict(commands=commands, wait_for=wait_for, match='all'))
self.execute_module(failed=True)

View file

@ -0,0 +1,147 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.compat.tests.mock import patch
from ansible.modules.network.dellos6 import dellos6_config
from units.modules.utils import set_module_args
from .dellos6_module import TestDellos6Module, load_fixture
class TestDellos6ConfigModule(TestDellos6Module):
module = dellos6_config
def setUp(self):
super(TestDellos6ConfigModule, self).setUp()
self.mock_get_config = patch('ansible.modules.network.dellos6.dellos6_config.get_config')
self.get_config = self.mock_get_config.start()
self.mock_load_config = patch('ansible.modules.network.dellos6.dellos6_config.load_config')
self.load_config = self.mock_load_config.start()
self.mock_run_commands = patch('ansible.modules.network.dellos6.dellos6_config.run_commands')
self.run_commands = self.mock_run_commands.start()
def tearDown(self):
super(TestDellos6ConfigModule, self).tearDown()
self.mock_get_config.stop()
self.mock_load_config.stop()
self.mock_run_commands.stop()
def load_fixtures(self, commands=None):
config_file = 'dellos6_config_config.cfg'
self.get_config.return_value = load_fixture(config_file)
self.load_config.return_value = None
def test_dellos6_config_unchanged(self):
src = load_fixture('dellos6_config_config.cfg')
set_module_args(dict(src=src))
self.execute_module()
def test_dellos6_config_src(self):
src = load_fixture('dellos6_config_src.cfg')
set_module_args(dict(src=src))
commands = ['hostname foo', 'exit', 'interface Te1/0/2',
'shutdown', 'exit']
self.execute_module(changed=True, commands=commands)
def test_dellos6_config_backup(self):
set_module_args(dict(backup=True))
result = self.execute_module()
self.assertIn('__backup__', result)
def test_dellos6_config_save(self):
set_module_args(dict(save=True))
self.execute_module(changed=True)
self.assertEqual(self.run_commands.call_count, 1)
self.assertEqual(self.get_config.call_count, 0)
self.assertEqual(self.load_config.call_count, 0)
args = self.run_commands.call_args[0][1]
self.assertDictContainsSubset({'command': 'copy running-config startup-config'}, args[0])
# self.assertIn('copy running-config startup-config\r', args)
def test_dellos6_config_lines_wo_parents(self):
set_module_args(dict(lines=['hostname foo']))
commands = ['hostname foo']
self.execute_module(changed=True, commands=commands)
def test_dellos6_config_lines_w_parents(self):
set_module_args(dict(lines=['description "teest"', 'exit'], parents=['interface Te1/0/2']))
commands = ['interface Te1/0/2', 'description "teest"', 'exit']
self.execute_module(changed=True, commands=commands)
def test_dellos6_config_before(self):
set_module_args(dict(lines=['hostname foo'], before=['snmp-server contact bar']))
commands = ['snmp-server contact bar', 'hostname foo']
self.execute_module(changed=True, commands=commands, sort=False)
def test_dellos6_config_after(self):
set_module_args(dict(lines=['hostname foo'], after=['snmp-server contact bar']))
commands = ['hostname foo', 'snmp-server contact bar']
self.execute_module(changed=True, commands=commands, sort=False)
def test_dellos6_config_before_after_no_change(self):
set_module_args(dict(lines=['hostname router'],
before=['snmp-server contact bar'],
after=['snmp-server location chennai']))
self.execute_module()
def test_dellos6_config_config(self):
config = 'hostname localhost'
set_module_args(dict(lines=['hostname router'], config=config))
commands = ['hostname router']
self.execute_module(changed=True, commands=commands)
def test_dellos6_config_replace_block(self):
lines = ['description test string', 'shutdown']
parents = ['interface Te1/0/2']
set_module_args(dict(lines=lines, replace='block', parents=parents))
commands = parents + lines
self.execute_module(changed=True, commands=commands)
def test_dellos6_config_match_none(self):
lines = ['hostname router']
set_module_args(dict(lines=lines, match='none'))
self.execute_module(changed=True, commands=lines)
def test_dellos6_config_match_none(self):
lines = ['description test string', 'shutdown']
parents = ['interface Te1/0/2']
set_module_args(dict(lines=lines, parents=parents, match='none'))
commands = parents + lines
self.execute_module(changed=True, commands=commands, sort=False)
def test_dellos6_config_match_strict(self):
lines = ['description "test_string"',
'shutdown']
parents = ['interface Te1/0/1']
set_module_args(dict(lines=lines, parents=parents, match='strict'))
commands = parents + ['shutdown']
self.execute_module(changed=True, commands=commands, sort=False)
def test_dellos6_config_match_exact(self):
lines = ['description test_string', 'shutdown']
parents = ['interface Te1/0/1']
set_module_args(dict(lines=lines, parents=parents, match='exact'))
commands = parents + lines
self.execute_module(changed=True, commands=commands, sort=False)

View file

@ -0,0 +1,105 @@
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import json
from ansible.compat.tests.mock import patch
from units.modules.utils import set_module_args
from .dellos6_module import TestDellos6Module, load_fixture
from ansible.modules.network.dellos6 import dellos6_facts
class TestDellos6Facts(TestDellos6Module):
module = dellos6_facts
def setUp(self):
super(TestDellos6Facts, self).setUp()
self.mock_run_command = patch(
'ansible.modules.network.dellos6.dellos6_facts.run_commands')
self.run_command = self.mock_run_command.start()
def tearDown(self):
super(TestDellos6Facts, self).tearDown()
self.mock_run_command.stop()
def load_fixtures(self, commands=None):
def load_from_file(*args, **kwargs):
module, commands = args
output = list()
for item in commands:
try:
obj = json.loads(item)
command = obj['command']
except ValueError:
command = item
if '|' in command:
command = str(command).replace('|', '')
filename = str(command).replace(' ', '_')
filename = filename.replace('/', '7')
output.append(load_fixture(filename))
return output
self.run_command.side_effect = load_from_file
def test_dellos6_facts_gather_subset_default(self):
set_module_args(dict())
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('hardware', ansible_facts['ansible_net_gather_subset'])
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset'])
self.assertEquals('"dellos6_sw1"', ansible_facts['ansible_net_hostname'])
self.assertIn('Te1/0/1', ansible_facts['ansible_net_interfaces'].keys())
self.assertEquals(1682, ansible_facts['ansible_net_memtotal_mb'])
self.assertEquals(623, ansible_facts['ansible_net_memfree_mb'])
def test_dellos6_facts_gather_subset_config(self):
set_module_args({'gather_subset': 'config'})
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('config', ansible_facts['ansible_net_gather_subset'])
self.assertEquals('"dellos6_sw1"', ansible_facts['ansible_net_hostname'])
self.assertIn('ansible_net_config', ansible_facts)
def test_dellos6_facts_gather_subset_hardware(self):
set_module_args({'gather_subset': 'hardware'})
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('hardware', ansible_facts['ansible_net_gather_subset'])
self.assertEquals(1682, ansible_facts['ansible_net_memtotal_mb'])
self.assertEquals(623, ansible_facts['ansible_net_memfree_mb'])
def test_dellos6_facts_gather_subset_interfaces(self):
set_module_args({'gather_subset': 'interfaces'})
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset'])
self.assertIn('Te1/0/1', ansible_facts['ansible_net_interfaces'].keys())
self.assertEquals(['Te1/0/5'], list(ansible_facts['ansible_net_neighbors'].keys()))
self.assertIn('ansible_net_interfaces', ansible_facts)