mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
517 lines
13 KiB
Python
517 lines
13 KiB
Python
# -*- coding: utf-8 -*-
|
|
'''
|
|
Base classes for napalm unit tests
|
|
|
|
:codeauthor: :email:`Anthony Shaw <anthonyshaw@apache.org>`
|
|
'''
|
|
|
|
from __future__ import absolute_import
|
|
from functools import wraps
|
|
|
|
|
|
TEST_INTERFACES = {
|
|
'Management1': {
|
|
'is_up': False,
|
|
'is_enabled': False,
|
|
'description': u'',
|
|
'last_flapped': -1,
|
|
'speed': 1000,
|
|
'mac_address': u'dead:beef:dead',
|
|
}
|
|
}
|
|
|
|
# Test data
|
|
TEST_FACTS = {
|
|
'__opts__': {},
|
|
'OPTIONAL_ARGS': {},
|
|
'uptime': 'Forever',
|
|
'UP': True,
|
|
'HOSTNAME': 'test-device.com',
|
|
'hostname': 'test-device.com',
|
|
'username': 'admin',
|
|
'os_version': '1.2.3',
|
|
'model': 'test_model',
|
|
'serial_number': '123456',
|
|
'vendor': 'cisco',
|
|
'interface_list': TEST_INTERFACES
|
|
}
|
|
|
|
TEST_ENVIRONMENT = {
|
|
'hot': 'yes'
|
|
}
|
|
|
|
TEST_COMMAND_RESPONSE = {
|
|
'show run': 'all the command output'
|
|
}
|
|
|
|
TEST_TRACEROUTE_RESPONSE = {
|
|
'success': {
|
|
1: {
|
|
'probes': {
|
|
1: {
|
|
'rtt': 1.123,
|
|
'ip_address': u'206.223.116.21',
|
|
'host_name': u'eqixsj-google-gige.google.com'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST_PING_RESPONSE = {
|
|
'success': {
|
|
'probes_sent': 5,
|
|
'packet_loss': 0,
|
|
'rtt_min': 72.158,
|
|
'rtt_max': 72.433,
|
|
'rtt_avg': 72.268,
|
|
'rtt_stddev': 0.094,
|
|
'results': [
|
|
{
|
|
'ip_address': '1.1.1.1',
|
|
'rtt': 72.248
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
TEST_ARP_TABLE = [
|
|
{
|
|
'interface': 'MgmtEth0/RSP0/CPU0/0',
|
|
'mac': '5C:5E:AB:DA:3C:F0',
|
|
'ip': '172.17.17.1',
|
|
'age': 1454496274.84
|
|
}
|
|
]
|
|
|
|
TEST_IPADDRS = {
|
|
'FastEthernet8': {
|
|
'ipv4': {
|
|
'10.66.43.169': {
|
|
'prefix_length': 22
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST_INTERFACES = {
|
|
'Management1': {
|
|
'is_up': False,
|
|
'is_enabled': False,
|
|
'description': u'',
|
|
'last_flapped': -1,
|
|
'speed': 1000,
|
|
'mac_address': u'dead:beef:dead',
|
|
}
|
|
}
|
|
|
|
TEST_LLDP_NEIGHBORS = {
|
|
u'Ethernet2':
|
|
[
|
|
{
|
|
'hostname': u'junos-unittest',
|
|
'port': u'520',
|
|
}
|
|
]
|
|
}
|
|
|
|
TEST_MAC_TABLE = [
|
|
{
|
|
'mac': '00:1C:58:29:4A:71',
|
|
'interface': 'Ethernet47',
|
|
'vlan': 100,
|
|
'static': False,
|
|
'active': True,
|
|
'moves': 1,
|
|
'last_move': 1454417742.58
|
|
}
|
|
]
|
|
|
|
TEST_RUNNING_CONFIG = {
|
|
'one': 'two'
|
|
}
|
|
|
|
TEST_OPTICS = {
|
|
'et1': {
|
|
'physical_channels': {
|
|
'channel': [
|
|
{
|
|
'index': 0,
|
|
'state': {
|
|
'input_power': {
|
|
'instant': 0.0,
|
|
'avg': 0.0,
|
|
'min': 0.0,
|
|
'max': 0.0,
|
|
},
|
|
'output_power': {
|
|
'instant': 0.0,
|
|
'avg': 0.0,
|
|
'min': 0.0,
|
|
'max': 0.0,
|
|
},
|
|
'laser_bias_current': {
|
|
'instant': 0.0,
|
|
'avg': 0.0,
|
|
'min': 0.0,
|
|
'max': 0.0,
|
|
},
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST_BGP_CONFIG = {
|
|
'test': 'value'
|
|
}
|
|
|
|
TEST_BGP_NEIGHBORS = {
|
|
'default': {
|
|
8121: [
|
|
{
|
|
'up': True,
|
|
'local_as': 13335,
|
|
'remote_as': 8121,
|
|
'local_address': u'172.101.76.1',
|
|
'local_address_configured': True,
|
|
'local_port': 179,
|
|
'remote_address': u'192.247.78.0',
|
|
'router_id': u'192.168.0.1',
|
|
'remote_port': 58380,
|
|
'multihop': False,
|
|
'import_policy': u'4-NTT-TRANSIT-IN',
|
|
'export_policy': u'4-NTT-TRANSIT-OUT',
|
|
'input_messages': 123,
|
|
'output_messages': 13,
|
|
'input_updates': 123,
|
|
'output_updates': 5,
|
|
'messages_queued_out': 23,
|
|
'connection_state': u'Established',
|
|
'previous_connection_state': u'EstabSync',
|
|
'last_event': u'RecvKeepAlive',
|
|
'suppress_4byte_as': False,
|
|
'local_as_prepend': False,
|
|
'holdtime': 90,
|
|
'configured_holdtime': 90,
|
|
'keepalive': 30,
|
|
'configured_keepalive': 30,
|
|
'active_prefix_count': 132808,
|
|
'received_prefix_count': 566739,
|
|
'accepted_prefix_count': 566479,
|
|
'suppressed_prefix_count': 0,
|
|
'advertise_prefix_count': 0,
|
|
'flap_count': 27
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
TEST_TERM_CONFIG = {
|
|
'result': True,
|
|
'already_configured': False
|
|
}
|
|
|
|
TEST_NTP_PEERS = {
|
|
'192.168.0.1': 1,
|
|
'172.17.17.1': 2,
|
|
'172.17.17.2': 3,
|
|
'2400:cb00:6:1024::c71b:840a': 4
|
|
}
|
|
|
|
TEST_NTP_SERVERS = {
|
|
'192.168.0.1': 1,
|
|
'172.17.17.1': 2,
|
|
'172.17.17.2': 3,
|
|
'2400:cb00:6:1024::c71b:840a': 4
|
|
}
|
|
|
|
TEST_NTP_STATS = [
|
|
{
|
|
'remote': u'188.114.101.4',
|
|
'referenceid': u'188.114.100.1',
|
|
'synchronized': True,
|
|
'stratum': 4,
|
|
'type': u'-',
|
|
'when': u'107',
|
|
'hostpoll': 256,
|
|
'reachability': 377,
|
|
'delay': 164.228,
|
|
'offset': -13.866,
|
|
'jitter': 2.695
|
|
}
|
|
]
|
|
|
|
TEST_PROBES_CONFIG = {
|
|
'probe1': {
|
|
'test1': {
|
|
'probe_type': 'icmp-ping',
|
|
'target': '192.168.0.1',
|
|
'source': '192.168.0.2',
|
|
'probe_count': 13,
|
|
'test_interval': 3
|
|
},
|
|
'test2': {
|
|
'probe_type': 'http-ping',
|
|
'target': '172.17.17.1',
|
|
'source': '192.17.17.2',
|
|
'probe_count': 5,
|
|
'test_interval': 60
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST_PROBES_RESULTS = {
|
|
'probe1': {
|
|
'test1': {
|
|
'last_test_min_delay': 63.120,
|
|
'global_test_min_delay': 62.912,
|
|
'current_test_avg_delay': 63.190,
|
|
'global_test_max_delay': 177.349,
|
|
'current_test_max_delay': 63.302,
|
|
'global_test_avg_delay': 63.802,
|
|
'last_test_avg_delay': 63.438,
|
|
'last_test_max_delay': 65.356,
|
|
'probe_type': 'icmp-ping',
|
|
'rtt': 63.138,
|
|
'last_test_loss': 0,
|
|
'round_trip_jitter': -59.0,
|
|
'target': '192.168.0.1',
|
|
'source': '192.168.0.2',
|
|
'probe_count': 15,
|
|
'current_test_min_delay': 63.138
|
|
},
|
|
'test2': {
|
|
'last_test_min_delay': 176.384,
|
|
'global_test_min_delay': 169.226,
|
|
'current_test_avg_delay': 177.098,
|
|
'global_test_max_delay': 292.628,
|
|
'current_test_max_delay': 180.055,
|
|
'global_test_avg_delay': 177.959,
|
|
'last_test_avg_delay': 177.178,
|
|
'last_test_max_delay': 184.671,
|
|
'probe_type': 'icmp-ping',
|
|
'rtt': 176.449,
|
|
'last_test_loss': 0,
|
|
'round_trip_jitter': -34.0,
|
|
'target': '172.17.17.1',
|
|
'source': '172.17.17.2',
|
|
'probe_count': 15,
|
|
'current_test_min_delay': 176.402
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST_ROUTE = {
|
|
'172.16.0.0/25': [
|
|
{
|
|
'protocol': 'BGP',
|
|
'last_active': True,
|
|
'current_active': True,
|
|
'age': 1178693,
|
|
'routing_table': 'inet.0',
|
|
'next_hop': '192.168.0.11',
|
|
'outgoing_interface': 'xe-1/1/1.100',
|
|
'preference': 170,
|
|
'selected_next_hop': False,
|
|
'protocol_attributes': {
|
|
'remote_as': 65001,
|
|
'metric': 5,
|
|
'local_as': 13335,
|
|
'as_path': '',
|
|
'remote_address': '192.168.0.11',
|
|
'metric2': 0,
|
|
'local_preference': 0,
|
|
'communities': [
|
|
'0:2',
|
|
'no-export'
|
|
],
|
|
'preference2': -1
|
|
},
|
|
'inactive_reason': ''
|
|
},
|
|
{
|
|
'protocol': 'BGP',
|
|
'last_active': False,
|
|
'current_active': False,
|
|
'age': 2359429,
|
|
'routing_table': 'inet.0',
|
|
'next_hop': '192.168.0.17',
|
|
'outgoing_interface': 'xe-1/1/1.100',
|
|
'preference': 170,
|
|
'selected_next_hop': True,
|
|
'protocol_attributes': {
|
|
'remote_as': 65001,
|
|
'metric': 5,
|
|
'local_as': 13335,
|
|
'as_path': '',
|
|
'remote_address': '192.168.0.17',
|
|
'metric2': 0,
|
|
'local_preference': 0,
|
|
'communities': [
|
|
'0:3',
|
|
'no-export'
|
|
],
|
|
'preference2': -1
|
|
},
|
|
'inactive_reason': 'Not Best in its group - Router ID'
|
|
}
|
|
]
|
|
}
|
|
|
|
TEST_SNMP_INFO = {
|
|
'test_': 'value'
|
|
}
|
|
|
|
TEST_USERS = {
|
|
'mircea': {
|
|
'level': 15,
|
|
'password': '$1$0P70xKPa$4jt5/10cBTckk6I/w/',
|
|
'sshkeys': [
|
|
'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4pFn+shPwTb2yELO4L7NtQrKOJXNeCl1je\
|
|
l9STXVaGnRAnuc2PXl35vnWmcUq6YbUEcgUTRzzXfmelJKuVJTJIlMXii7h2xkbQp0YZIEs4P\
|
|
8ipwnRBAxFfk/ZcDsdfsdfsdfsdN56ejk345jhk345jk345jk341p3A/9LIL7l6YewLBCwJj6\
|
|
D+fWSJ0/YW+7oH17Fk2HH+tw0L5PcWLHkwA4t60iXn16qDbIk/ze6jv2hDGdCdz7oYQeCE55C\
|
|
CHOHMJWYfN3jcL4s0qv8/u6Ka1FVkV7iMmro7ChThoV/5snI4Ljf2wKqgHH7TfNaCfpU0WvHA\
|
|
nTs8zhOrGScSrtb mircea@master-roshi'
|
|
]
|
|
}
|
|
}
|
|
|
|
|
|
class MockNapalmDevice(object):
|
|
'''Setup a mock device for our tests'''
|
|
def get_facts(self):
|
|
return TEST_FACTS
|
|
|
|
def get_environment(self):
|
|
return TEST_ENVIRONMENT
|
|
|
|
def get_arp_table(self):
|
|
return TEST_ARP_TABLE
|
|
|
|
def get(self, key, default=None, *args, **kwargs):
|
|
try:
|
|
if key == 'DRIVER':
|
|
return self
|
|
return TEST_FACTS[key]
|
|
except KeyError:
|
|
return default
|
|
|
|
def cli(self, commands, *args, **kwargs):
|
|
assert commands[0] == 'show run'
|
|
return TEST_COMMAND_RESPONSE
|
|
|
|
def traceroute(self, destination, **kwargs):
|
|
assert destination == 'destination.com'
|
|
return TEST_TRACEROUTE_RESPONSE
|
|
|
|
def ping(self, destination, **kwargs):
|
|
assert destination == 'destination.com'
|
|
return TEST_PING_RESPONSE
|
|
|
|
def get_config(self, retrieve='all'):
|
|
assert retrieve == 'running'
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def get_interfaces_ip(self, **kwargs):
|
|
return TEST_IPADDRS
|
|
|
|
def get_interfaces(self, **kwargs):
|
|
return TEST_INTERFACES
|
|
|
|
def get_lldp_neighbors_detail(self, **kwargs):
|
|
return TEST_LLDP_NEIGHBORS
|
|
|
|
def get_mac_address_table(self, **kwargs):
|
|
return TEST_MAC_TABLE
|
|
|
|
def get_optics(self, **kwargs):
|
|
return TEST_OPTICS
|
|
|
|
def load_merge_candidate(self, filename=None, config=None):
|
|
assert config == 'new config'
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def load_replace_candidate(self, filename=None, config=None):
|
|
assert config == 'new config'
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def commit_config(self, **kwargs):
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def discard_config(self, **kwargs):
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def compare_config(self, **kwargs):
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def rollback(self, **kwargs):
|
|
return TEST_RUNNING_CONFIG
|
|
|
|
def get_bgp_config(self, **kwargs):
|
|
return TEST_BGP_CONFIG
|
|
|
|
def get_bgp_neighbors_detail(self, neighbor_address=None, **kwargs):
|
|
assert neighbor_address is None or "test_address"
|
|
return TEST_BGP_NEIGHBORS
|
|
|
|
def get_ntp_peers(self, **kwargs):
|
|
return TEST_NTP_PEERS
|
|
|
|
def get_ntp_servers(self, **kwargs):
|
|
return TEST_NTP_SERVERS
|
|
|
|
def get_ntp_stats(self, **kwargs):
|
|
return TEST_NTP_STATS
|
|
|
|
def get_probes_config(self, **kwargs):
|
|
return TEST_PROBES_CONFIG
|
|
|
|
def get_probes_results(self, **kwargs):
|
|
return TEST_PROBES_RESULTS
|
|
|
|
def get_route_to(self, destination, protocol=None, **kwargs):
|
|
assert destination == '1.2.3.4'
|
|
return TEST_ROUTE
|
|
|
|
def get_snmp_information(self, **kwargs):
|
|
return TEST_SNMP_INFO
|
|
|
|
def get_users(self, **kwargs):
|
|
return TEST_USERS
|
|
|
|
|
|
def mock_proxy_napalm_wrap(func):
|
|
'''
|
|
The proper decorator checks for proxy minions. We don't care
|
|
so just pass back to the origination function
|
|
'''
|
|
|
|
@wraps(func)
|
|
def func_wrapper(*args, **kwargs):
|
|
func.__globals__['napalm_device'] = MockNapalmDevice()
|
|
return func(*args, **kwargs)
|
|
return func_wrapper
|
|
|
|
|
|
import salt.utils.napalm as napalm_utils # NOQA
|
|
napalm_utils.proxy_napalm_wrap = mock_proxy_napalm_wrap # NOQA
|
|
|
|
|
|
def true(name):
|
|
return True
|
|
|
|
|
|
def random_hash(source, method):
|
|
return 12346789
|
|
|
|
|
|
def join(*files):
|
|
return True
|
|
|
|
|
|
def get_managed_file(*args, **kwargs):
|
|
return 'True'
|