def testParseV1FilterDefinitionForGenericTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["0"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 1) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 0) genericTrapDefinition = filter._v1Traps["0"] self.assert_(genericTrapDefinition != None) self.assertEquals(genericTrapDefinition.lineNumber, 99) self.assertEquals(genericTrapDefinition.action, "include") self.assertEquals(genericTrapDefinition.genericTrap, "0") # Now add another to make sure we can parse more than one results = filter._parseV1FilterDefinition(100, "exclude", ["5"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 2) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 0) genericTrapDefinition = filter._v1Traps["5"] self.assert_(genericTrapDefinition != None) self.assertEquals(genericTrapDefinition.lineNumber, 100) self.assertEquals(genericTrapDefinition.action, "exclude") self.assertEquals(genericTrapDefinition.genericTrap, "5")
def testValidateOIDForGlob(self): filter = TrapFilter() results = filter._validateOID("*") self.assertEquals(results, None) results = filter._validateOID("1.2.*") self.assertEquals(results, None)
def testParseV1FilterDefinitionFailsForInvalidEnterpriseSpecificTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5", "abc"]) self.assertEquals(results, "Specific trap 'abc' invalid; must be non-negative integer") results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5", "-1"]) self.assertEquals(results, "Specific trap '-1' invalid; must be non-negative integer")
def testParseV1FilterDefinitionFailsForTooManyArgs(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["0", "1", "2"]) self.assertEquals( results, "Too many fields found; at most 4 fields allowed for V1 filters")
def testValidateOIDFailsForInvalidGlobbing(self): filter = TrapFilter() results = filter._validateOID("1.2.3.*.5.*") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("1.*.5") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("1.5*") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("*.") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("*.1") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("*.*") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("5*") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID("*5") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed") results = filter._validateOID(".*") self.assertEquals(results, "When using '*', only a single '*' at the end of OID is allowed")
def testParseFilterDefinitionForInvalidVersion(self): filter = TrapFilter() results = filter._parseFilterDefinition("include V3 ignored", 99) self.assertEquals( results, "Invalid SNMP version 'V3'; the only valid versions are 'v1' or 'v2'" )
def testParseV1FilterDefinitionForGenericTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["0"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 1) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 0) genericTrapDefinition = filter._v1Traps["0"] self.assert_(genericTrapDefinition != None) self.assertEquals(genericTrapDefinition.lineNumber, 99) self.assertEquals(genericTrapDefinition.action, "include") self.assertEquals(genericTrapDefinition.genericTrap, "0") # Now add another to make sure we can parse more than one results = filter._parseV1FilterDefinition(100, "exclude", ["5"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 2) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 0) genericTrapDefinition = filter._v1Traps["5"] self.assert_(genericTrapDefinition != None) self.assertEquals(genericTrapDefinition.lineNumber, 100) self.assertEquals(genericTrapDefinition.action, "exclude") self.assertEquals(genericTrapDefinition.genericTrap, "5")
def testParseFilterDefinitionForInvalidAction(self): filter = TrapFilter() results = filter._parseFilterDefinition("invalid V1 ignored", 99) self.assertEquals( results, "Invalid action 'invalid'; the only valid actions are 'include' or 'exclude'" )
def testDropV2EventForSimpleExactMatches(self): filterDef = V2FilterDefinition(99, "include", "1.2.3") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[3] = filtersByLevel filterDef = V2FilterDefinition(99, "include", "1.2.3.4") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[4] = filtersByLevel event = {"snmpVersion": "2", "oid": "1.2.3"} self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4" self.assertFalse(filter._dropV2Event(event)) # OIDs with fewer or more levels than the existing filters should NOT match event["oid"] = "1.2" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.9" self.assertTrue(filter._dropV2Event(event)) # OIDs that differ only in the last level should NOT match event["oid"] = "1.2.9" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3.9" self.assertTrue(filter._dropV2Event(event))
def testParseV1FilterDefinitionFailsForInvalidTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["a"]) self.assertEquals(results, "Invalid generic trap 'a'; must be one of 0-5") results = filter._parseV1FilterDefinition(99, "include", ["6"]) self.assertEquals(results, "Invalid generic trap '6'; must be one of 0-5")
def testValidateOIDForGlob(self): filter = TrapFilter() results = filter._validateOID("*") self.assertEquals(results, None) results = filter._validateOID("1.2.*") self.assertEquals(results, None)
def testDropV1EventForGenericTrapForNoMatch(self): genericTrap = 1 filterDef = GenericTrapFilterDefinition(99, "exclude", genericTrap) filter = TrapFilter() filter._v1Traps[genericTrap] = filterDef event = {"snmpVersion": "1", "snmpV1GenericTrapType": 2} self.assertTrue(filter._dropV1Event(event))
def testDropV1EventForGenericTrapInclusion(self): genericTrap = 0 filterDef = GenericTrapFilterDefinition(99, "include", genericTrap) filter = TrapFilter() filter._v1Traps[genericTrap] = filterDef event = {"snmpVersion": "1", "snmpV1GenericTrapType": genericTrap} self.assertFalse(filter._dropV1Event(event))
def testParseV2FilterDefinitionFailsForInvalidOID(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", ["invalidOID"]) self.assertEquals( results, "'invalidOID' is not a valid OID: Invalid character found; only digits, '.' and '*' allowed" )
def testDropV1EventForMissingGenericTrap(self): filterDef = V1FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel event = {"snmpVersion": "1", "snmpV1Enterprise": "1.2"} self.assertTrue(filter._dropV1Event(event))
def testDropV1EventForGenericTrapForNoMatch(self): genericTrap = 1 filterDef = GenericTrapFilterDefinition(99, "exclude", genericTrap) filter = TrapFilter() filter._v1Traps[genericTrap] = filterDef event = {"snmpVersion": "1", "snmpV1GenericTrapType": 2} self.assertTrue(filter._dropV1Event(event))
def testDropV1EventForGenericTrapInclusion(self): genericTrap = 0 filterDef = GenericTrapFilterDefinition(99, "include", genericTrap) filter = TrapFilter() filter._v1Traps[genericTrap] = filterDef event = {"snmpVersion": "1", "snmpV1GenericTrapType": genericTrap} self.assertFalse(filter._dropV1Event(event))
def testParseV1FilterDefinitionFailsForInvalidTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["a"]) self.assertEquals(results, "Invalid generic trap 'a'; must be one of 0-5") results = filter._parseV1FilterDefinition(99, "include", ["6"]) self.assertEquals(results, "Invalid generic trap '6'; must be one of 0-5")
def testDropV2EventForSimpleExactMatches(self): filterDef = V2FilterDefinition(99, "include", "1.2.3") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[3] = filtersByLevel filterDef = V2FilterDefinition(99, "include", "1.2.3.4") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[4] = filtersByLevel event = {"snmpVersion": "2", "oid": "1.2.3"} self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4" self.assertFalse(filter._dropV2Event(event)) # OIDs with fewer or more levels than the existing filters should NOT match event["oid"] = "1.2" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.9" self.assertTrue(filter._dropV2Event(event)) # OIDs that differ only in the last level should NOT match event["oid"] = "1.2.9" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3.9" self.assertTrue(filter._dropV2Event(event))
def testDropV2EventForSimpleGlobMatch(self): filterDef = V2FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[4] = filtersByLevel event = {"snmpVersion": "2", "oid": "1.2.3.4"} self.assertTrue(filter._dropV2Event(event)) filterDef.action = "include" self.assertFalse(filter._dropV2Event(event))
def testDropV1EventForMissingEnterpriseOID(self): filterDef = V1FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, } self.assertTrue(filter._dropV1Event(event))
def testDropV2EventForSimpleGlobMatch(self): filterDef = V2FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[4] = filtersByLevel event = {"snmpVersion": "2", "oid": "1.2.3.4"} self.assertTrue(filter._dropV2Event(event)) filterDef.action = "include" self.assertFalse(filter._dropV2Event(event))
def testDropV2EventExcludeAll(self): filterDef = V2FilterDefinition(99, "exclude", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[1] = filtersByLevel event = {"snmpVersion": "2", "oid": "1"} self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3" self.assertTrue(filter._dropV2Event(event))
def testParseV1FilterDefinitionFailsForConflictingTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["1"]) self.assertEquals(results, None) results = filter._parseV1FilterDefinition(100, "include", ["1"]) self.assertEquals(results, "Generic trap '1' conflicts with previous definition at line 99") # Verify we find a conflict for generic traps where the action differs results = filter._parseV1FilterDefinition(100, "exclude", ["1"]) self.assertEquals(results, "Generic trap '1' conflicts with previous definition at line 99")
def testDropV2EventExcludeAll(self): filterDef = V2FilterDefinition(99, "exclude", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[1] = filtersByLevel event = {"snmpVersion": "2", "oid": "1"} self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3" self.assertTrue(filter._dropV2Event(event))
def testTransformDropsV2Event(self): filterDef = V2FilterDefinition(99, "exclude", "1.2.3") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[3] = filtersByLevel filter._filtersDefined = True event = { "snmpVersion": "2", "oid": filterDef.oid, } self.assertEquals(TRANSFORM_DROP, filter.transform(event))
def testParseV2FilterDefinition(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", ["1.2.3.*"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 0) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 1) oidLevels = 4 mapByLevel = filter._v2Filters[oidLevels] self.assert_(mapByLevel != None) self.assertEquals(len(mapByLevel), 1) filterDef = mapByLevel["1.2.3.*"] self.assert_(filterDef != None) self.assertEquals(filterDef.lineNumber, 99) self.assertEquals(filterDef.action, "include") self.assertEquals(filterDef.oid, "1.2.3.*") # Add another 4-level OID results = filter._parseV2FilterDefinition(100, "exclude", ["1.2.3.4"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 0) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 1) mapByLevel = filter._v2Filters[oidLevels] self.assert_(mapByLevel != None) self.assertEquals(len(mapByLevel), 2) filterDef = mapByLevel["1.2.3.4"] self.assert_(filterDef != None) self.assertEquals(filterDef.lineNumber, 100) self.assertEquals(filterDef.action, "exclude") self.assertEquals(filterDef.oid, "1.2.3.4") # Add another single-level OID results = filter._parseV2FilterDefinition(101, "exclude", ["*"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 0) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 2) oidLevels = 1 mapByLevel = filter._v2Filters[oidLevels] self.assert_(mapByLevel != None) self.assertEquals(len(mapByLevel), 1) filterDef = mapByLevel["*"] self.assert_(filterDef != None) self.assertEquals(filterDef.lineNumber, 101) self.assertEquals(filterDef.action, "exclude") self.assertEquals(filterDef.oid, "*")
def testParseV2FilterDefinition(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", ["1.2.3.*"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 0) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 1) oidLevels = 4 mapByLevel = filter._v2Filters[oidLevels] self.assert_(mapByLevel != None) self.assertEquals(len(mapByLevel), 1) filterDef = mapByLevel["1.2.3.*"] self.assert_(filterDef != None) self.assertEquals(filterDef.lineNumber, 99) self.assertEquals(filterDef.action, "include") self.assertEquals(filterDef.oid, "1.2.3.*") # Add another 4-level OID results = filter._parseV2FilterDefinition(100, "exclude", ["1.2.3.4"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 0) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 1) mapByLevel = filter._v2Filters[oidLevels] self.assert_(mapByLevel != None) self.assertEquals(len(mapByLevel), 2) filterDef = mapByLevel["1.2.3.4"] self.assert_(filterDef != None) self.assertEquals(filterDef.lineNumber, 100) self.assertEquals(filterDef.action, "exclude") self.assertEquals(filterDef.oid, "1.2.3.4") # Add another single-level OID results = filter._parseV2FilterDefinition(101, "exclude", ["*"]) self.assertEquals(results, None) self.assertEquals(len(filter._v1Traps), 0) self.assertEquals(len(filter._v1Filters), 0) self.assertEquals(len(filter._v2Filters), 2) oidLevels = 1 mapByLevel = filter._v2Filters[oidLevels] self.assert_(mapByLevel != None) self.assertEquals(len(mapByLevel), 1) filterDef = mapByLevel["*"] self.assert_(filterDef != None) self.assertEquals(filterDef.lineNumber, 101) self.assertEquals(filterDef.action, "exclude") self.assertEquals(filterDef.oid, "*")
def testTransformDropsV2Event(self): filterDef = V2FilterDefinition(99, "exclude", "1.2.3") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[3] = filtersByLevel filter._filtersDefined = True event = { "snmpVersion": "2", "oid": filterDef.oid, } self.assertEquals(TRANSFORM_DROP, filter.transform(event))
def testParseV1FilterDefinitionFailsForInvalidEnterpriseSpecificTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5", "abc"]) self.assertEquals( results, "Specific trap 'abc' invalid; must be non-negative integer") results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5", "-1"]) self.assertEquals( results, "Specific trap '-1' invalid; must be non-negative integer")
def testParseV2FilterDefinitionFailsForEmptyOID(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", []) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid") results = filter._parseV2FilterDefinition(99, "include", [""]) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid") results = filter._parseV2FilterDefinition(99, "include", ["."]) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid") results = filter._parseV2FilterDefinition(99, "include", ["..."]) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid")
def testDropV1EventForEnterpriseSpecific(self): filterDef = V1FilterDefinition(99, "include", "1.2.3") filterDef.specificTrap = "59" filtersByLevel = {"1.2.3-59": filterDef} filter = TrapFilter() filter._v1Filters[3] = filtersByLevel filterDef = V1FilterDefinition(99, "include", "1.2.3") filterDef.specificTrap = "60" filtersByLevel["1.2.3-60"] = filterDef event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3", "snmpV1SpecificTrap": 59 } self.assertFalse(filter._dropV1Event(event)) event["snmpV1SpecificTrap"] = 60 self.assertFalse(filter._dropV1Event(event)) event["snmpV1SpecificTrap"] = 1 self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2" self.assertTrue(filter._dropV1Event(event))
def testTransformDropsV1Event(self): filterDef = V1FilterDefinition(99, "exclude", "1.2.3") filterDef.specificTrap = "59" filtersByLevel = {"1.2.3-59": filterDef} filter = TrapFilter() filter._v1Filters[3] = filtersByLevel filter._filtersDefined = True event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": filterDef.oid, "snmpV1SpecificTrap": filterDef.specificTrap } self.assertEquals(TRANSFORM_DROP, filter.transform(event))
def testParseV1FilterDefinitionFailsForConflictingTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", ["1"]) self.assertEquals(results, None) results = filter._parseV1FilterDefinition(100, "include", ["1"]) self.assertEquals( results, "Generic trap '1' conflicts with previous definition at line 99") # Verify we find a conflict for generic traps where the action differs results = filter._parseV1FilterDefinition(100, "exclude", ["1"]) self.assertEquals( results, "Generic trap '1' conflicts with previous definition at line 99")
def testDropV1EventForEnterpriseSimpleGlobMatch(self): filterDef = V1FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[4] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3.4" } self.assertTrue(filter._dropV1Event(event)) filterDef.action = "include" self.assertFalse(filter._dropV1Event(event))
def testDropV1EventExcludeAll(self): filterDef = V1FilterDefinition(99, "exclude", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1" } self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3" self.assertTrue(filter._dropV1Event(event))
def testTransformDropsV1Event(self): filterDef = V1FilterDefinition(99, "exclude", "1.2.3") filterDef.specificTrap = "59" filtersByLevel = {"1.2.3-59": filterDef} filter = TrapFilter() filter._v1Filters[3] = filtersByLevel filter._filtersDefined = True event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": filterDef.oid, "snmpV1SpecificTrap": filterDef.specificTrap } self.assertEquals(TRANSFORM_DROP, filter.transform(event))
def testDropV1EventForEnterpriseSimpleGlobMatch(self): filterDef = V1FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[4] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3.4" } self.assertTrue(filter._dropV1Event(event)) filterDef.action = "include" self.assertFalse(filter._dropV1Event(event))
def testDropV1EventExcludeAll(self): filterDef = V1FilterDefinition(99, "exclude", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1" } self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3" self.assertTrue(filter._dropV1Event(event))
def testTransformWithoutFilters(self): filter = TrapFilter() filter._filtersDefined = False event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3", "snmpV1SpecificTrap": 59 } self.assertEquals(TRANSFORM_CONTINUE, filter.transform(event)) event = { "snmpVersion": "2", "oid": "1.2.3", } self.assertEquals(TRANSFORM_CONTINUE, filter.transform(event))
def testTransformWithoutFilters(self): filter = TrapFilter() filter._filtersDefined = False event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3", "snmpV1SpecificTrap": 59 } self.assertEquals(TRANSFORM_CONTINUE, filter.transform(event)) event = { "snmpVersion": "2", "oid": "1.2.3", } self.assertEquals(TRANSFORM_CONTINUE, filter.transform(event))
def testDropEvent(self): filterDef = V1FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel filterDef = V2FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[1] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3", "snmpV1SpecificTrap": 59 } self.assertFalse(filter._dropEvent(event)) event = { "snmpVersion": "2", "oid": "1.2.3", } self.assertFalse(filter._dropEvent(event)) event["snmpVersion"] = "invalidVersion" self.assertTrue(filter._dropEvent(event))
def testDropV1EventForEnterpriseSpecific(self): filterDef = V1FilterDefinition(99, "include", "1.2.3") filterDef.specificTrap = "59" filtersByLevel = {"1.2.3-59": filterDef} filter = TrapFilter() filter._v1Filters[3] = filtersByLevel filterDef = V1FilterDefinition(99, "include", "1.2.3") filterDef.specificTrap = "60" filtersByLevel["1.2.3-60"] = filterDef event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3", "snmpV1SpecificTrap": 59 } self.assertFalse(filter._dropV1Event(event)) event["snmpV1SpecificTrap"] = 60 self.assertFalse(filter._dropV1Event(event)) event["snmpV1SpecificTrap"] = 1 self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2" self.assertTrue(filter._dropV1Event(event))
def testDropEvent(self): filterDef = V1FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel filterDef = V2FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[1] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3", "snmpV1SpecificTrap": 59 } self.assertFalse(filter._dropEvent(event)) event = { "snmpVersion": "2", "oid": "1.2.3", } self.assertFalse(filter._dropEvent(event)) event["snmpVersion"] = "invalidVersion" self.assertTrue(filter._dropEvent(event))
def testParseV2FilterDefinitionFailsForConflictingOID(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", [".1.3.6.1.4.5"]) self.assertEquals(results, None) results = filter._parseV2FilterDefinition(100, "include", [".1.3.6.1.4.5"]) self.assertEquals( results, "OID '1.3.6.1.4.5' conflicts with previous definition at line 99") # Verify we find a conflict for OIDs where the action differs results = filter._parseV2FilterDefinition(100, "exclude", [".1.3.6.1.4.5"]) self.assertEquals( results, "OID '1.3.6.1.4.5' conflicts with previous definition at line 99") results = filter._parseV2FilterDefinition(101, "include", [".1.3.6.1.4.*"]) self.assertEquals(results, None) # Verify we find a conflict for glob-based OIDs results = filter._parseV2FilterDefinition(102, "include", [".1.3.6.1.4.*"]) self.assertEquals( results, "OID '1.3.6.1.4.*' conflicts with previous definition at line 101") # Verify we find a conflict for glob-based OIDs where the action differs results = filter._parseV2FilterDefinition(102, "exclude", [".1.3.6.1.4.*"]) self.assertEquals( results, "OID '1.3.6.1.4.*' conflicts with previous definition at line 101")
def testParseV2FilterDefinitionFailsForEmptyOID(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", []) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid") results = filter._parseV2FilterDefinition(99, "include", [""]) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid") results = filter._parseV2FilterDefinition(99, "include", ["."]) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid") results = filter._parseV2FilterDefinition(99, "include", ["..."]) self.assertEquals(results, "'' is not a valid OID: Empty OID is invalid")
def testParseV2FilterDefinitionFailsForConflictingOID(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", [".1.3.6.1.4.5"]) self.assertEquals(results, None) results = filter._parseV2FilterDefinition(100, "include", [".1.3.6.1.4.5"]) self.assertEquals(results, "OID '1.3.6.1.4.5' conflicts with previous definition at line 99") # Verify we find a conflict for OIDs where the action differs results = filter._parseV2FilterDefinition(100, "exclude", [".1.3.6.1.4.5"]) self.assertEquals(results, "OID '1.3.6.1.4.5' conflicts with previous definition at line 99") results = filter._parseV2FilterDefinition(101, "include", [".1.3.6.1.4.*"]) self.assertEquals(results, None) # Verify we find a conflict for glob-based OIDs results = filter._parseV2FilterDefinition(102, "include", [".1.3.6.1.4.*"]) self.assertEquals(results, "OID '1.3.6.1.4.*' conflicts with previous definition at line 101") # Verify we find a conflict for glob-based OIDs where the action differs results = filter._parseV2FilterDefinition(102, "exclude", [".1.3.6.1.4.*"]) self.assertEquals(results, "OID '1.3.6.1.4.*' conflicts with previous definition at line 101")
def testDropV2EventIncludeAllBut(self): filterDef = V2FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[1] = filtersByLevel filterDef = V2FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[4] = filtersByLevel filterDef = V2FilterDefinition(99, "exclude", "1.4.5") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[3] = filtersByLevel event = {"snmpVersion": "2", "oid": "1"} self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.4.5.1" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.4.5" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3.4" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.5" self.assertTrue(filter._dropV2Event(event))
def testDropV2EventForSimpleGlobMatches(self): filterDef = V2FilterDefinition(99, "include", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[4] = filtersByLevel filterDef = V2FilterDefinition(99, "include", "1.2.3.4.5.*") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[6] = filtersByLevel event = {"snmpVersion": "2", "oid": "1.2.3.4"} self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.99" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.99.5" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.99" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.5" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.5.99" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.99.4" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.99.4.5.6" self.assertTrue(filter._dropV2Event(event))
def testDropV1EventForSimpleGlobMatches(self): filterDef = V1FilterDefinition(99, "include", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[4] = filtersByLevel filterDef = V1FilterDefinition(99, "include", "1.2.3.4.5.*") filtersByLevel = {filterDef.oid: filterDef} filter._v1Filters[6] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3.4" } self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.99" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.99.5" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.99" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.5" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.5.99" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.99.4" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.99.4.5.6" self.assertTrue(filter._dropV1Event(event))
def testDropV1EventIncludeAllBut(self): filterDef = V1FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel filterDef = V1FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter._v1Filters[4] = filtersByLevel filterDef = V1FilterDefinition(99, "exclude", "1.4.5") filterDef.specificTrap = "*" filtersByLevel = {"1.4.5-*": filterDef} filter._v1Filters[3] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1" } self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.4.5.1" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.4.5" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.5" self.assertTrue(filter._dropV1Event(event))
def testParseV2FilterDefinitionFailsForInvalidOID(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", ["invalidOID"]) self.assertEquals(results, "'invalidOID' is not a valid OID: Invalid character found; only digits, '.' and '*' allowed")
def testDropV1EventIncludeAllBut(self): filterDef = V1FilterDefinition(99, "include", "*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[1] = filtersByLevel filterDef = V1FilterDefinition(99, "exclude", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter._v1Filters[4] = filtersByLevel filterDef = V1FilterDefinition(99, "exclude", "1.4.5") filterDef.specificTrap = "*" filtersByLevel = {"1.4.5-*": filterDef} filter._v1Filters[3] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1" } self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.4.5.1" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.4.5" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.5" self.assertTrue(filter._dropV1Event(event))
class TrapDaemon(CollectorDaemon): _frameworkFactoryName = "nosip" def __init__(self, *args, **kwargs): self._trapFilter = TrapFilter() provideUtility(self._trapFilter, ICollectorEventTransformer) kwargs["initializationCallback"] = self._initializeTrapFilter super(TrapDaemon, self).__init__(*args, **kwargs) def _initializeTrapFilter(self): try: self._trapFilter.initialize() initializationSucceededEvent = { 'component': 'zentrap', 'device': self.options.monitor, 'eventClass': "/Status", 'eventKey': "TrapFilterInit", 'summary': 'initialized', 'severity': Clear, } self.sendEvent(initializationSucceededEvent) except TrapFilterError as e: initializationFailedEvent = { 'component': 'zentrap', 'device': self.options.monitor, 'eventClass': "/Status", 'eventKey': "TrapFilterInit", 'summary': 'initialization failed', 'message': e.message, 'severity': Critical, } log.error("Failed to initialize trap filter: %s", e.message) self.sendEvent(initializationFailedEvent) self.setExitCode(1) self.stop() def runPostConfigTasks(self, result=None): # 1) super sets self._prefs.task with the call to postStartupTasks # 2) call remote createAllUsers # 3) service in turn walks DeviceClass tree and returns users CollectorDaemon.runPostConfigTasks(self, result) if not isinstance(result, Failure) and self._prefs.task is not None: service = self.getRemoteConfigServiceProxy() log.debug('TrapDaemon.runPostConfigTasks ' 'callRemote createAllUsers') d = service.callRemote("createAllUsers") d.addCallback(self._createUsers) def remote_createUser(self, user): self._createUsers([user]) def _createUsers(self, users): fmt = 'TrapDaemon._createUsers {0} users' count = len(users) log.debug(fmt.format(count)) if self._prefs.task.session is None: log.debug("No session created, so unable to create users") else: self._prefs.task.session.create_users(users)
def testDropV1EventForSimpleGlobMatches(self): filterDef = V1FilterDefinition(99, "include", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v1Filters[4] = filtersByLevel filterDef = V1FilterDefinition(99, "include", "1.2.3.4.5.*") filtersByLevel = {filterDef.oid: filterDef} filter._v1Filters[6] = filtersByLevel event = { "snmpVersion": "1", "snmpV1GenericTrapType": 6, "snmpV1Enterprise": "1.2.3.4" } self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.99" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.99.5" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.99" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.5" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3.4.5.99" self.assertFalse(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.3" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.99.4" self.assertTrue(filter._dropV1Event(event)) event["snmpV1Enterprise"] = "1.2.99.4.5.6" self.assertTrue(filter._dropV1Event(event))
def __init__(self, *args, **kwargs): self._trapFilter = TrapFilter() provideUtility(self._trapFilter, ICollectorEventTransformer) kwargs["initializationCallback"] = self._initializeTrapFilter super(TrapDaemon, self).__init__(*args, **kwargs)
def testParseV1FilterDefinitionFailsForEnterpriseSpecificGlob(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5.*", "23"]) self.assertEquals(results, "Specific trap not allowed with globbed OID")
def testParseV1FilterDefinitionFailsForMissingEnterpriseSpecificTrap(self): filter = TrapFilter() results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5"]) self.assertEquals(results, "Missing specific trap number or '*'")
def testDropV2EventForSimpleGlobMatches(self): filterDef = V2FilterDefinition(99, "include", "1.2.3.*") filtersByLevel = {filterDef.oid: filterDef} filter = TrapFilter() filter._v2Filters[4] = filtersByLevel filterDef = V2FilterDefinition(99, "include", "1.2.3.4.5.*") filtersByLevel = {filterDef.oid: filterDef} filter._v2Filters[6] = filtersByLevel event = {"snmpVersion": "2", "oid": "1.2.3.4"} self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.99" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.99.5" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.99" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.5" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1.2.3.4.5.99" self.assertFalse(filter._dropV2Event(event)) event["oid"] = "1" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.3" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.99.4" self.assertTrue(filter._dropV2Event(event)) event["oid"] = "1.2.99.4.5.6" self.assertTrue(filter._dropV2Event(event))
def testParseV2FilterDefinitionFailsForTooManyArgs(self): filter = TrapFilter() results = filter._parseV2FilterDefinition(99, "include", ["0", "1"]) self.assertEquals(results, "Too many fields found; at most 3 fields allowed for V2 filters")