Exemplo n.º 1
0
    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")
Exemplo n.º 2
0
    def testValidateOIDForGlob(self):
        filter = TrapFilter()
        results = filter._validateOID("*")
        self.assertEquals(results, None)

        results = filter._validateOID("1.2.*")
        self.assertEquals(results, None)
Exemplo n.º 3
0
    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")
Exemplo n.º 4
0
 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")
Exemplo n.º 5
0
    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")
Exemplo n.º 6
0
 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'"
     )
Exemplo n.º 7
0
    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")
Exemplo n.º 8
0
 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'"
     )
Exemplo n.º 9
0
    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))
Exemplo n.º 10
0
    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")
Exemplo n.º 11
0
    def testValidateOIDForGlob(self):
        filter = TrapFilter()
        results = filter._validateOID("*")
        self.assertEquals(results, None)

        results = filter._validateOID("1.2.*")
        self.assertEquals(results, None)
Exemplo n.º 12
0
    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))
Exemplo n.º 13
0
    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))
Exemplo n.º 14
0
 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"
     )
Exemplo n.º 15
0
    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))
Exemplo n.º 16
0
    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))
Exemplo n.º 17
0
    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))
Exemplo n.º 18
0
    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")
Exemplo n.º 19
0
    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))
Exemplo n.º 20
0
    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))
Exemplo n.º 21
0
    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))
Exemplo n.º 22
0
    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))
Exemplo n.º 23
0
    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))
Exemplo n.º 24
0
    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")
Exemplo n.º 25
0
    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))
Exemplo n.º 26
0
    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))
Exemplo n.º 27
0
    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, "*")
Exemplo n.º 28
0
    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, "*")
Exemplo n.º 29
0
    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))
Exemplo n.º 30
0
    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")
Exemplo n.º 31
0
    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")
Exemplo n.º 32
0
    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))
Exemplo n.º 33
0
    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))
Exemplo n.º 34
0
    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")
Exemplo n.º 35
0
    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))
Exemplo n.º 36
0
    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))
Exemplo n.º 37
0
    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))
Exemplo n.º 38
0
    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))
Exemplo n.º 39
0
    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))
Exemplo n.º 40
0
    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))
Exemplo n.º 41
0
    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))
Exemplo n.º 42
0
    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))
Exemplo n.º 43
0
    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))
Exemplo n.º 44
0
    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))
Exemplo n.º 45
0
    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")
Exemplo n.º 46
0
    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")
Exemplo n.º 47
0
    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")
Exemplo n.º 48
0
    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))
Exemplo n.º 49
0
    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))
Exemplo n.º 50
0
    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))
Exemplo n.º 51
0
    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))
Exemplo n.º 52
0
 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")
Exemplo n.º 53
0
    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))
Exemplo n.º 54
0
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)
Exemplo n.º 55
0
    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))
Exemplo n.º 56
0
 def __init__(self, *args, **kwargs):
     self._trapFilter = TrapFilter()
     provideUtility(self._trapFilter, ICollectorEventTransformer)
     kwargs["initializationCallback"] = self._initializeTrapFilter
     super(TrapDaemon, self).__init__(*args, **kwargs)
Exemplo n.º 57
0
 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")
Exemplo n.º 58
0
 def testParseV1FilterDefinitionFailsForMissingEnterpriseSpecificTrap(self):
     filter = TrapFilter()
     results = filter._parseV1FilterDefinition(99, "include", [".1.3.6.1.4.5"])
     self.assertEquals(results, "Missing specific trap number or '*'")
Exemplo n.º 59
0
    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))
Exemplo n.º 60
0
 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")