def test_snmp_v2_read_parameters(self): snmp_v2_read_parameters = SNMPV2ReadParameters( ip=self.IP, snmp_read_community=self.SNMP_READ_COMMUNITY) self.assertTrue(snmp_v2_read_parameters.ip == self.IP) self.assertTrue( snmp_v2_read_parameters.snmp_community == self.SNMP_READ_COMMUNITY)
def test_quali_snmp_init_with_SNMPV2_read_params(self, cmdgen_mock, view_mock): # Setup result = MagicMock() result.prettyPrint.return_value = "response" cmdgen_mock.CommandGenerator().getCmd.return_value = "", "", "", [[ "view", result ]] cmdgen_mock.CommunityData = lambda x: cmdgen.CommunityData(x) ip = "localhost" snmp_read_community = 'public' view_mock.MibViewController().getNodeLocation.return_value = ( "SNMPv2-MIB", "sysDescr", "0") # Act snmp_v2_read_params = SNMPV2ReadParameters( ip=ip, snmp_read_community=snmp_read_community) test_quali_snmp = quali_snmp.QualiSnmp( snmp_parameters=snmp_v2_read_params, logger=self._logger) # Assert self.assertIsNotNone(test_quali_snmp.security) self.assertTrue( test_quali_snmp.security.communityName == snmp_read_community) self.assertTrue(test_quali_snmp.is_read_only)
def test_execute_flow_fail_empty_snmp_community(self): """ SNMP Community should not be empty """ snmp_parameters = SNMPV2ReadParameters(ip="127.0.0.1", snmp_read_community="") with self.assertRaisesRegexp(Exception, "SNMP community cannot be empty"): self.tested_instance.execute_flow(snmp_parameters)
def _get_snmp_parameters(self, action): if '3' in self.version: return SNMPV3Parameters(ip=self.address, snmp_user=self.user, snmp_password=self.password, snmp_private_key=self.private_key) else: if action.lower() == 'set': # community = self.community_write return SNMPV2WriteParameters(ip=self.address, snmp_write_community=self.community_write) else: # community = self.community_read return SNMPV2ReadParameters(ip=self.address, snmp_read_community=self.community_read)
def test_already_enabled_snmp(self): self.session.send_command.side_effect = [ 'Community name: {}'.format(self.SNMP_READ_COMMUNITY), 'Community name: {}'.format(self.SNMP_READ_COMMUNITY), ] snmp_v2_read_parameters = SNMPV2ReadParameters( self.IP, self.SNMP_READ_COMMUNITY) self.enable_flow.execute_flow(snmp_v2_read_parameters) self.assertEqual(self.session.send_command.call_count, 2)
def test_execute_flow_skip_empty_community(self, snmp_actions_class): """ Disable SNMP Read Community skipped. SNMP Read Community is Empty """ snmp_parameters = SNMPV2ReadParameters(ip="127.0.0.1", snmp_read_community="") snmp_actions = mock.MagicMock() snmp_actions_class.return_value = snmp_actions self.tested_instance.execute_flow(snmp_parameters) snmp_actions.disable_snmp_community.assert_not_called() snmp_actions.disable_snmp_server.assert_not_called()
def test_disable_snmp_read_v2(self): self.session.send_command.side_effect = [ 'disabling community', 'disabled', ] snmp_v2_read_parameters = SNMPV2ReadParameters( self.IP, self.SNMP_READ_COMMUNITY) self.disable_flow.execute_flow(snmp_v2_read_parameters) self.assertEqual(self.session.send_command.call_count, 2)
def test_not_disabled_snmp_community(self): self.session.send_command.side_effect = [ 'disabling community', 'Community name: {}'.format(self.SNMP_READ_COMMUNITY), ] snmp_v2_read_parameters = SNMPV2ReadParameters( self.IP, self.SNMP_READ_COMMUNITY) self.assertRaises( Exception, self.disable_flow.execute_flow, snmp_v2_read_parameters) self.assertEqual(self.session.send_command.call_count, 2)
def test_disable_snmp_v2_will_raise_exception_in_case_of_empty_snmp_community_string( self): """Check that method will raise an Exception if snmp_parameters is an empty string""" snmp_parameters = SNMPV2ReadParameters(ip="10.10.10.10", snmp_read_community="") cli_service = mock.MagicMock() # act with self.assertRaisesRegexp(Exception, "SNMP community can not be empty"): self.disable_snmp_flow._disable_snmp_v2( cli_service=cli_service, snmp_parameters=snmp_parameters)
def _get_handler(self, ip, shell_name="", shell_type="", community="public"): logger = get_qs_logger(log_file_prefix=ip) snmp = QualiSnmp( SNMPV2ReadParameters(ip=ip, snmp_read_community=community), logger=logger ) handler = CiscoGenericSNMPAutoload( shell_name=shell_name, shell_type=shell_type, logger=logger, snmp_handler=snmp, resource_name=ip, ) return handler
def test_execute_flow_success(self, snmp_actions_class): """ SNMP Community already configured """ test_snmp_community = "snmp_community" snmp_parameters = SNMPV2ReadParameters( ip="127.0.0.1", snmp_read_community=test_snmp_community) snmp_actions = mock.MagicMock() snmp_actions_class.return_value = snmp_actions self.tested_instance.execute_flow(snmp_parameters) snmp_actions.disable_snmp_community.assert_called_once_with( test_snmp_community) snmp_actions.disable_snmp_server.assert_called_once()
def _get_handler(self, remove_group=True): self.snmp_v2_write_parameters = SNMPV2WriteParameters( ip=self.IP, snmp_write_community=self.SNMP_WRITE_COMMUNITY) self.snmp_v2_read_parameters = SNMPV2ReadParameters( ip=self.IP, snmp_read_community=self.SNMP_READ_COMMUNITY) self.snmp_v3_parameters = SNMPV3Parameters( ip=self.IP, snmp_user=self.SNMP_USER, snmp_password=self.SNMP_PASSWORD, snmp_private_key=self.SNMP_PRIVATE_KEY) cli = MagicMock() logger = MagicMock() return CiscoDisableSnmpFlow(cli_handler=cli, logger=logger, remove_group=remove_group)
def get_inventory(self, context): """ Discovers the resource structure and attributes. :param AutoLoadCommandContext context: the context the command runs on :return Attribute and sub-resource information for the Shell resource you can return an AutoLoadDetails object :rtype: AutoLoadDetails """ api = get_api(context) logger = get_logger_with_thread_id(context) snmp_community = api.DecryptPassword(context.resource.attributes["{}.SNMP Read Community".format(self.SHELL_NAME)]).Value snmp_params = SNMPV2ReadParameters(context.resource.address, snmp_community) response = ZTEGenericSNMPDiscovery(snmp_params, self.SHELL_NAME, self.SHELL_TYPE, context.resource.name, logger).discover() return response
def test_execute_flow_calls_disable_snmp_v2(self): """Check that method will call "_disable_snmp_v2" method if snmp_parameters is SNMP v2""" snmp_parameters = SNMPV2ReadParameters( ip="10.10.10.10", snmp_read_community="cumuluslinux") cli_service = mock.MagicMock() self.cli_handler.get_cli_service.return_value.__enter__.return_value = cli_service self.disable_snmp_flow._disable_snmp_v2 = mock.MagicMock() self.disable_snmp_flow._disable_snmp_v3 = mock.MagicMock() # act self.disable_snmp_flow.execute_flow(snmp_parameters=snmp_parameters) # verify self.disable_snmp_flow._disable_snmp_v2.assert_called_once_with( cli_service=cli_service, snmp_parameters=snmp_parameters)
def _snmp_parameters(self, action): """ Returns the SNMPHandler state variables for the specific action""" if self.snmp_version == 'v3': return SNMPV3Parameters(ip=self.address, snmp_user=self.snmp_v3_user, snmp_password=self.snmp_v3_password, snmp_private_key=self.snmp_v3_private_key) if self.snmp_version.startswith('v2'): if action.lower() == 'set': return SNMPV2WriteParameters( ip=self.address, snmp_write_community=self.snmp_write_community) if action.lower() == 'get': return SNMPV2ReadParameters( ip=self.address, snmp_read_community=self.snmp_read_community) else: ValueError( "Function argument 'action' should be either 'get' or 'set'" ) else: ValueError("Unknown SNMP version set on resource")
def test_execute_flow_success(self, snmp_actions_class): """ SNMP Server and SNMP Read Community should be configured """ test_snmp_community = "new_read_community" snmp_parameters = SNMPV2ReadParameters( ip="127.0.0.1", snmp_read_community=test_snmp_community) snmp_actions = mock.MagicMock() snmp_actions_class.return_value = snmp_actions snmp_actions.get_current_snmp_info.return_value = """ Status: Disabled Contact: Location: Community(ro): read_community Community(rw): write_community Max Ifindex per module: 64 """ self.tested_instance.execute_flow(snmp_parameters) snmp_actions.get_current_snmp_info.assert_called_once() snmp_actions.enable_snmp_server.assert_called_once() snmp_actions.enable_snmp_community.assert_called_once_with( snmp_community=test_snmp_community)
from cloudshell.snmp.quali_snmp import ObjectIdentity, ObjectType, QualiSnmp from cloudshell.core.logger import qs_logger from cloudshell.snmp.snmp_parameters import SNMPV2ReadParameters class SNMP_data(): def __init__(self, oid, type, value): self.oid = oid self.type = type self.value = value logger = qs_logger.get_qs_logger() qsnmp_params = SNMPV2ReadParameters(ip='192.168.105.4', snmp_read_community='publi') filename = r"C:\Users\yoav.e\AppData\Roaming\Quali\Recordings\192.168.105.4\192.168.105.4.snmp" with open(filename, "r") as f: all_lines = f.readlines() snmp_all_data = [] qsnmp_instance = QualiSnmp(snmp_parameters=qsnmp_params, logger=logger) for line in all_lines: split_line = line.split(',') snmp_all_data.append(SNMP_data(split_line[0], split_line[1], split_line[2])) for q in snmp_all_data: Otype = ObjectType(ObjectIdentity(q.oid), q.value) Otype.resolveWithMib(qsnmp_instance.mib_viewer) print Otype pass